基于halcon的3D点云重建和高度的测量

1,040 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 ``

dev_close_window ()
*点云文件数据的读取
read_object_model_3d ('E:/项目程序/2021-07-03-山西华翔/刹车卡钳/刹车卡钳/1.om3', 'mm', [], [], ObjectModel3D, Status)
*获得点云的数据,例如高度
get_object_model_3d_params (ObjectModel3D, 'point_coord_z', GenParamValue)
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*faxiangliang法向量
*surface_normals_object_model_3d (ObjectModel3D, 'mls', [], [], ObjectModel3DNormals)
*点云曲面重建,常用三角网格算法
triangulate_object_model_3d (ObjectModel3D, 'greedy', [], [], TriangulatedObjectModel3D, Information)
*显示点云数据   阻塞显示,需要点击继续
*第一个参数是窗口的句柄
*第二个是点云的句柄
*第三个和第四个参数是相机的内参和外参
*第五个和第六个参数是重要的,第五个写参数名,第六个是参数名的值  例如颜色什么的  七八九如下
visualize_object_model_3d (WindowHandle, TriangulatedObjectModel3D, [], [], ['lut','color_attrib'], ['color1','coord_z'], '点云显示', '标签', '提示客户做什么的', PoseOut)

write_object_model_3d (TriangulatedObjectModel3D, 'om3', 'E:/123', [], [])

image.png

dev_close_window ()
*读取点云数据
read_object_model_3d ('E:/项目程序/2021-07-03-山西华翔/刹车卡钳/刹车卡钳/1.om3', 'm', [], [], ObjectModel3D, Status)
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*显示点云数据
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut)
*得到要测试的表面点云数据
get_object_model_3d_params (ObjectModel3D, 'point_coord_z', GenParamValue)
*点云筛选有两个函数 select_points_object_model_3d  筛选孤立散点的特征
*点的x,y z 坐标,以及法向量的x y z 都可以
*第一个参数时句柄,第二个时特征名称,第三第四是最大和最小值
select_points_object_model_3d (ObjectModel3D, 'point_coord_z', 122, 150, ObjectModel3DThresholded)
*显示点云
visualize_object_model_3d (WindowHandle, ObjectModel3DThresholded, [], PoseOut,['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut1)
*点云连通集合断开; 设置联通条件,点的最小距离什么的
connection_object_model_3d (ObjectModel3DThresholded, 'distance_3d', 0.5, ObjectModel3DConnected)
get_object_model_3d_params (ObjectModel3DConnected, 'num_points', GenParamValue1)
*筛选点云联通集合
select_object_model_3d (ObjectModel3DConnected, 'num_points', 'and', 5000, 10000000, ObjectModel3DSelected)
visualize_object_model_3d (WindowHandle, ObjectModel3DSelected, [], PoseOut,['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut1)
*得到基础面的点云数据集合
select_points_object_model_3d (ObjectModel3D, 'point_coord_z', 150, 500, ObjectModel3DThresholded2)
visualize_object_model_3d (WindowHandle, ObjectModel3DThresholded2, [], PoseOut,['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut1)
*顶部点云坐标数据值Z的值
get_object_model_3d_params (ObjectModel3DSelected, 'point_coord_z', GenParamValue2)
*得到另一个的点云面的Z的值
get_object_model_3d_params(ObjectModel3DThresholded2, 'point_coord_z', GenParamValue3)
*求两个面的Z值的平均值
tuple_mean (GenParamValue2, Mean1)
tuple_mean (GenParamValue3, Mean2)
*计算两个面的高度
H:=Mean1-Mean2
parm[0]:='shift+left button zoom'
parm[1]:='ctrl+left button suofang'
parm[2]:='left button zoom'
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], PoseOut,['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], '高度为'+H+'mm', '模型的样子', parm, PoseOut1)
*顶部点云坐标数据值Z的值

image.png