- ??博客主頁:https://loewen.blog.csdn.net
- ??歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請指正!
- ??本文由 丶布布原創(chuàng),首發(fā)于 CSDN,轉(zhuǎn)載注明出處??
- ??現(xiàn)在的付出,都會是一種沉淀,只為讓你成為更好的人?
一. 重要算子解析
-
read_object_model_3d ( : : FileName, Scale, GenParamName, GenParamValue : ObjectModel3D, Status) —
讀取3D點(diǎn)云模型
參數(shù):
FileName(in):要讀取的文件的文件名。
Scale(in):文件中數(shù)據(jù)的比例,包括‘m’, ‘cm’, ‘mm’, ‘um’, ‘nm’
等。
GenParamName(in):參數(shù)名稱。
GenParamValue (in):參數(shù)名稱對應(yīng)的值。
ObjectModel3D(out) :3D對象模型的句柄。
Status(out) :狀態(tài)信息。
-
select_points_object_model_3d ( : : ObjectModel3D, Attrib, MinValue, MaxValue : ObjectModel3DThresholded) —
篩選孤立散點(diǎn)的特征值(點(diǎn)的x y z坐標(biāo),法向量x y z)針對點(diǎn)的特診的篩選
參數(shù):
ObjectModel3D(in):輸入點(diǎn)云模型句柄。
Attrib(in):被篩選點(diǎn)的屬性特征(包括點(diǎn)的X/Y/Z
坐標(biāo),法向量的X/Y/Z
坐標(biāo)等特征)。
MinValue(in):被篩選點(diǎn)的屬性特征最小值。
MaxValue (in):被篩選點(diǎn)的屬性特征最大值。
ObjectModel3DThresholded(out) :處理之后的3D對象模型的句柄。
注:類似二維平面處理中用于篩選面積、長度、寬度等灰度特征的算子select_obj(Operator)
-
select_object_model_3d ( : : ObjectModel3D, Feature, Operation, MinValue, MaxValue : ObjectModel3DSelected) —
篩選點(diǎn)云連通集合的特征
參數(shù):
ObjectModel3D(in):輸入點(diǎn)云模型句柄。
Feature(in):特征名稱。
Operation(in):特征之間的關(guān)系。
MinValue(in):特征之間的最小值。
MaxValue (in):特征之間的最大值。
ObjectModel3DSelected(out) :處理之后的3D對象模型的句柄。
-
triangulate_object_model_3d ( : : ObjectModel3D, Method, GenParamName, GenParamValue : TriangulatedObjectModel3D, Information) —
三角網(wǎng)格曲面重建(點(diǎn)集→曲面)
參數(shù):
ObjectModel3D(in): 3D對象模型的句柄。
Method(in):曲面重建所使用的方法。
GenParamName(in):參數(shù)名稱。
GenParamValue (in):參數(shù)名稱對應(yīng)的值。
TriangulatedObjectModel3D(out) :網(wǎng)格曲面重建之后的句柄。
Information(out) :狀態(tài)信息。
-
visualize_object_model_3d ( : : WindowHandle, ObjectModel3D, CamParam, PoseIn, GenParamName, GenParamValue, Title, Label, Information : PoseOut) —
顯示3D點(diǎn)云數(shù)據(jù)
參數(shù):
WindowHandle(in):窗口句柄指針。
ObjectModel3D(in):3D模型的句柄。
CamParam(in):相機(jī)內(nèi)參(與相機(jī)自身特性相關(guān)的參數(shù),比如相機(jī)的焦距、像素大小等)。
PoseIn (in):相機(jī)外參(在世界坐標(biāo)系中的參數(shù),比如相機(jī)的位置、旋轉(zhuǎn)方向等,一般是3個(gè)平移+3個(gè)旋轉(zhuǎn)),即選擇以什么樣的姿態(tài)去顯示該模型。一般默認(rèn)空[],會以一種默認(rèn)姿態(tài)去顯示3D
模型。
*GenParamName(in) :參數(shù)名稱,例如:'color'(設(shè)置模型顯示顏色)
、'disp_pose'(是否顯示世界坐標(biāo)系)
、'disp_normals'(是否顯示法向量)
、'normal_color'(法向量顯示顏色)
、'lut'(顏色表)
、'color_attrib'(顏色屬性:對哪個(gè)方向顏色遞進(jìn))
等。
*GenParamValue(in) :參數(shù)名稱對應(yīng)的值,常用:['lut','color_attrib','disp_pose']
,['color1','coord_z','true']
。
Title(in) :現(xiàn)實(shí)的文字,將顯示在輸出圖形窗口左上角的文本。
Label(in) :將顯示在每個(gè)顯示對象模型位置的文本。
Information (in) :將顯示在輸出圖形窗口左下角的文本。
PoseOut(out) :用戶可能以交互式更改的所有對象模型的姿勢。
-
write_object_model_3d ( : : ObjectModel3D, FileType, FileName, GenParamName, GenParamValue : ) —
保存3D點(diǎn)云數(shù)據(jù)
參數(shù):
ObjectModel3D(in):3D模型的句柄。
FileType(in):寫入的文件的類型。
FileName(in):寫入的文件的名稱。
GenParamName(in):參數(shù)名稱。
GenParamValue (in) :參數(shù)名稱對應(yīng)的值。
注:
1、visualize_object_model_3d
算子是阻塞式的,需要點(diǎn)擊窗口右下角的Continue
按鈕才可執(zhí)行下一步操作,可通過更改內(nèi)部封裝的算子去掉Continue按鈕。
2、參數(shù)CamParam、PoseIn、GenParamName、GenParamValue
,可通過disp_object_model_3d
算子完成設(shè)置。
二. 相關(guān)示例展示
1、點(diǎn)云求電池高度
* 1.讀入點(diǎn)云數(shù)據(jù)(文件中)
read_object_model_3d ('./2020-01-10-235331.om3', 'm', [], [], ObjectModel3D, Status)
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
* 可視化顯示三維點(diǎn)云模型
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut)
* 2.得到電池表面點(diǎn)云的數(shù)據(jù)集合(mm)
get_object_model_3d_params (ObjectModel3D, 'point_coord_z', GenParamValue)
* 去掉不在電池表面的干擾噪點(diǎn)(針對點(diǎn)的特征進(jìn)行篩選)
select_points_object_model_3d (ObjectModel3D, 'point_coord_z', 15, 16, ObjectModel3DThresholded)
visualize_object_model_3d (WindowHandle, ObjectModel3DThresholded, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut1)
* 點(diǎn)云連通集合斷開(點(diǎn)點(diǎn)間距不超過1mm的點(diǎn)當(dāng)做一個(gè)連通域點(diǎn)集)
connection_object_model_3d (ObjectModel3DThresholded, 'distance_3d', 1, ObjectModel3DConnected)
get_object_model_3d_params (ObjectModel3DConnected, 'num_points', GenParamValue1)
* 去掉其他散點(diǎn)組成的連通域,獲取電池表面點(diǎn)集連通域(針對點(diǎn)云連通集合之間的特征進(jìn)行篩選)
select_object_model_3d (ObjectModel3DConnected, 'num_points', 'and', 1000, 50000, ObjectModel3DBattery)
visualize_object_model_3d (WindowHandle, ObjectModel3DBattery, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut1)
* 3.得到背景的點(diǎn)云數(shù)據(jù)集合(mm)
select_points_object_model_3d (ObjectModel3D, 'point_coord_z', 12, 14, ObjectModel3DBackGround)
visualize_object_model_3d (WindowHandle, ObjectModel3DBackGround, [], PoseOut1, ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut2)
* 4.求電池上表面點(diǎn)云的z坐標(biāo)值
get_object_model_3d_params (ObjectModel3DBattery, 'point_coord_z', GenParamValue1)
* 5.求背景表面的點(diǎn)云的z坐標(biāo)值
get_object_model_3d_params (ObjectModel3DBackGround, 'point_coord_z', GenParamValue2)
* 6.求電池上表面點(diǎn)云A和背景表面點(diǎn)云B的z坐標(biāo)的平均值
A:=mean(GenParamValue1)
B:=mean(GenParamValue2)
* 7.求電池表面的高度
H:=A-B
Param[0]:='Shift+left button Zoom'
Param[1]:='ctrl+ left button Move'
Param[2]:='left button Rotat'
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], '電池點(diǎn)云的高度為'+H+'mm', 'Battery Object', Param, PoseOut)
結(jié)果圖如下所示(Halcon
默認(rèn)紅色代碼X
軸、綠色代表Y
軸、藍(lán)色代表Z
軸):
通過計(jì)算電池表面的點(diǎn)云Z
坐標(biāo)集合平均值和和背景表面的點(diǎn)云Z
坐標(biāo)集合平均值作差,最終計(jì)算結(jié)果為2.94mm
,標(biāo)準(zhǔn)高度在3mm
左右,誤差在0.1mm
左右.文章來源:http://www.zghlxwxcb.cn/news/detail-776631.html
halcon
仿真代碼以及點(diǎn)云模型分享鏈接: https://pan.baidu.com/s/1YjXlMva_duZb2tBUj1ga5A ?? 提取碼:et5w文章來源地址http://www.zghlxwxcb.cn/news/detail-776631.html
下雨天,最愜意的事莫過于躺在床上靜靜聽雨,雨中入眠,連夢里也長出青苔。 |
到了這里,關(guān)于[3D&Halcon] 3D重要算子及簡單處理點(diǎn)云模型求高度示例講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!