一、記錄一些Halcon里的關(guān)于3D的算子
1.read_object_model_3d? 從文件讀取一個(gè)3d模型
如下圖,讀的一個(gè)ply文件出來是個(gè)3d點(diǎn)云模型
?2.visualize_object_model_3d? 交互式展示3d模型
即上個(gè)算子讀出來后,通過這個(gè)算子可以把3d模型顯示出來旋轉(zhuǎn)、平移,縮放來觀察操作
算子簽名
visualize_object_model_3d( : : WindowHandle, ObjectModel3D, CamParam, PoseIn, GenParamName, GenParamValue, Title, Label, Information : PoseOut)
WindowHandle:顯示窗口句柄
ObjectModel3D:需要展示的3d模型
CamParam:假想的觀察這個(gè)模型的一個(gè)面陣相機(jī)的內(nèi)參
PoseIn:這個(gè)模型的3d姿態(tài)
GenParamName:參數(shù)名
GenParamValue:參數(shù)值
Title:展示在窗口左上角的文字
Label:在每個(gè)3d模型位置顯示的文本
Information:窗口左下角顯示的信息
PoseOut:用戶調(diào)整模型姿態(tài)后輸出這個(gè)3d姿態(tài)
其中參數(shù)名和參數(shù)值有很多,
舉例 參數(shù)名color 參數(shù)值green? ? 將模型顏色變?yōu)榫G色
參數(shù)名 color_attrib 參數(shù)值coord_z 類似于z軸方向的漸變色ba
參數(shù)名?disp_pose 參數(shù)值 true? 顯示出坐標(biāo)軸
3.connection_object_model_3d? 分離3d模型中的各個(gè)連通域
算子簽名
connection_object_model_3d( : : ObjectModel3D, Feature, Value : ObjectModel3DConnected)
可以通過調(diào)節(jié)distance_3d參數(shù),把一些噪點(diǎn)分離出來
4.select_object_model_3d? 根據(jù)全局特征從3d模型組中選取符合特征的3d模型們
算子簽名
select_object_model_3d( : : ObjectModel3D, Feature, Operation, MinValue, MaxValue : ObjectModel3DSelected)
如可以設(shè)置參數(shù)'num_points'? 模型點(diǎn)的數(shù)量,去除一部分點(diǎn)數(shù)少的模型,如噪點(diǎn)
5.union_object_model_3d 合并多個(gè)3d模型們成一個(gè)新的3d模型
算子簽名
union_object_model_3d( : : ObjectModels3D, Method : UnionObjectModel3D)
3、4、5的操作可以用來去除噪點(diǎn),如下圖,去除噪點(diǎn)之后的3d模型
?6.surface_normals_object_model_3d 計(jì)算3d模型的表面法線
算子簽名
surface_normals_object_model_3d( : : ObjectModel3D, Method, GenParamName, GenParamValue : ObjectModel3DNormals)
這個(gè)算子計(jì)算模型表面法線。在3d點(diǎn)云匹配創(chuàng)建3d匹配模型的時(shí)候,需要模型帶表面法線信息才可以用來創(chuàng)建。
7.max_diameter_object_model_3d 計(jì)算3d模型最大直徑
8.?create_pose 創(chuàng)建3D位姿
算子簽名:
create_pose( : : TransX, TransY, TransZ, RotX, RotY, RotZ, OrderOfTransform, OrderOfRotation, ViewOfTransform : Pose)
這個(gè)算子有一些參數(shù),主要是通過各方向平移和旋轉(zhuǎn)得到一個(gè)新的3d位姿。后面一些參數(shù)控制平移旋轉(zhuǎn)先后順序還有繞哪個(gè)坐標(biāo)系下的軸,詳細(xì)可查對(duì)應(yīng)算子說明。
9.rigid_trans_object_model_3d 將剛性三維變換應(yīng)用于這個(gè)3d模型
可以用這個(gè)算子對(duì)某個(gè)模型進(jìn)行剛性變換、即平移和旋轉(zhuǎn)??梢杂蒙蟼€(gè)算子的pose作為變換參數(shù)
如下圖,做了變換
?變換后,原點(diǎn)位置,姿態(tài)都變了
10.sample_object_model_3d? 對(duì)3d模型進(jìn)行采樣
算子簽名
sample_object_model_3d( : : ObjectModel3D, Method, SampleDistance, GenParamName, GenParamValue : SampledObjectModel3D)
SampleDistance:這個(gè)采樣距離,隔多少距離采集一個(gè)點(diǎn),可以先求出3d模型的最大直徑乘以一個(gè)比例系數(shù)來得到這個(gè)采樣距離,如Diameter*0.003 最大直徑的0.003倍,及最大直徑上取333個(gè)采樣點(diǎn),乘的系數(shù)越小,點(diǎn)越多。
11.create_surface_model 創(chuàng)建一個(gè)用于基于曲面3d匹配的數(shù)據(jù)結(jié)構(gòu)
算子簽名
create_surface_model( : : ObjectModel3D, RelSamplingDistance, GenParamName, GenParamValue : SurfaceModelID)
RelSamplingDistance:這里的相對(duì)采樣距離跟上面那個(gè)采樣距離不一樣,填0.05即取總點(diǎn)數(shù)乘以0.05個(gè)點(diǎn),越小點(diǎn)越少
?12.find_surface_model 在3d場(chǎng)景中找到模型的最佳匹配
算子簽名:
find_surface_model( : : SurfaceModelID, ObjectModel3D, RelSamplingDistance, KeyPointFraction, MinScore, ReturnResultHandle, GenParamName, GenParamValue : Pose, Score, SurfaceMatchingResultID)
挺多參數(shù),不一一寫了
13.refine_surface_model_pose?優(yōu)化三維場(chǎng)景中曲面模型的姿勢(shì)
上一步算出來的姿態(tài)可以再給進(jìn)這個(gè)算子優(yōu)化一下
14.pose_invert 反轉(zhuǎn)姿態(tài)
這樣上面find的姿態(tài),是預(yù)先做的模型通過變換匹配到場(chǎng)景中的位置,反轉(zhuǎn)這個(gè)姿態(tài),可以將場(chǎng)景變換回模型的位置,用于后期分析處理
用rigid_trans_object_model_3d變換后,和之前創(chuàng)建的3d模型匹配上了,如下圖顯示文章來源:http://www.zghlxwxcb.cn/news/detail-510824.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-510824.html
二、halcon測(cè)試代碼:
dev_close_window ()
dev_open_window (0, 0, 1200, 800, 'black', WindowHandle)
*讀取單幀點(diǎn)云ply文件
read_object_model_3d('D:/項(xiàng)目/tray盤/230425-匯川-tray盤/3d導(dǎo)出.ply', 'mm', [], [], ObjectModel3D, Status)
Instructions[0] := 'Rotate: Left button'
Instructions[1] := 'Zoom: Shift + left button'
Instructions[2] := 'Move: Ctrl + left button'
Message := 'Hik3D PointCloud'
*虛擬化模型并且顯示
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['color','color_attrib','disp_pose'], ['green','coord_z','true'], Message, [], Instructions, PoseOut)
dev_clear_window ()
connection_object_model_3d (ObjectModel3D, 'distance_3d', 0.001, ObjectModel3DConnected)
select_object_model_3d (ObjectModel3DConnected, 'num_points', 'and', 2000, 1e30, ObjectModel3DSelected)
union_object_model_3d (ObjectModel3DSelected, 'points_surface', UnionObjectModel3D)
visualize_object_model_3d (WindowHandle, UnionObjectModel3D, [], [], ['color','color_attrib','disp_pose'], ['green','coord_z','true'], Message, [], Instructions, PoseOut)
dev_clear_window ()
surface_normals_object_model_3d (UnionObjectModel3D, 'mls', [], [], ObjectModel3DNormals)
max_diameter_object_model_3d (ObjectModel3DNormals, Diameter)
create_pose (0.13, 0.13, 0.028, 0, 0,180, 'Rp+T', 'gba', 'point', Pose4)
rigid_trans_object_model_3d (ObjectModel3DNormals, Pose4, ObjectModel3DRigidTrans1)
sample_object_model_3d (ObjectModel3DRigidTrans1, 'fast',Diameter*0.003, [], [], SampledObjectModel3D)
visualize_object_model_3d (WindowHandle, SampledObjectModel3D, [], [], ['color','color_attrib','disp_pose'], ['green','coord_z','true'], Message, [], Instructions, PoseOut)
dev_clear_window ()
create_surface_model (ObjectModel3DRigidTrans1, 0.01, [], [], SurfaceModelID)
read_object_model_3d ('D:/項(xiàng)目/tray盤/230425-匯川-tray盤/帶圍擋/1-3d導(dǎo)出', 'mm', 'convert_to_triangles', 'true', ObjectModel3D1, Status1)
sample_object_model_3d (ObjectModel3D1, 'fast', Diameter*0.01, [], [], SampledObjectModel3D1)
find_surface_model (SurfaceModelID, SampledObjectModel3D1, 0.02, 0.2, 0, 'false', [], [], Pose, Score, SurfaceMatchingResultID)
refine_surface_model_pose (SurfaceModelID, SampledObjectModel3D1, Pose, 0, 'false', [], [], Pose1, Score1, SurfaceMatchingResultID1)
pose_invert (Pose1, PoseInvert)
rigid_trans_object_model_3d (SampledObjectModel3D1, PoseInvert, ObjectModel3DRigidTrans)
dev_clear_window ()
create_pose (-0.05, -0.06, 10, 134, 340, 235, 'Rp+T', 'gba', 'point', Pose2)
create_pose (-0.05+Pose1[0], -0.06+Pose1[1], 10+Pose1[2], 134+Pose1[3], 340+Pose1[4], 235+Pose1[5], 'Rp+T', 'gba', 'point', Pose3)
visualize_object_model_3d (WindowHandle, [ObjectModel3DRigidTrans,ObjectModel3DRigidTrans1], [], Pose2, ['color_0','color_1','disp_pose'], ['gray','green','true'], [], [], [], PoseOut1)
dev_clear_window ()
visualize_object_model_3d (WindowHandle, [ObjectModel3D1,ObjectModel3DRigidTrans1], [], [Pose3,Pose2], ['alpha','color_0','color_1','disp_pose'], [0.5,'yellow','green','true'], [], [], [], PoseOut1)
到了這里,關(guān)于Halcon中的一些3D算子的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!