halcon3D点云的blob分析

一、文章简介
文章介绍的是halcon 3D点云数据blob分析的基础步骤,需要处理的点云数据如图一所示:
在这里插入图片描述
二、3D图像Blob分析的基本步骤
1、读取点云模型

** 读取点云数据
read_object_model_3d ('白板笔', 'm', [], [], ObjectModel3D, Status)
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], GenParamName, GenParamValue \
          , [], [], [], PoseOut)

2、去掉离散点数据(处理结果如图二所示):

** 去掉离散点数据
smooth_object_model_3d (ObjectModel3D, 'mls', [], [], SmoothObjectModel3D)
visualize_object_model_3d (WindowHandle, SmoothObjectModel3D, [], [], GenParamName, GenParamValue \
          , [], [], [], PoseOut)

在这里插入图片描述
3、按照点距筛选(将白板笔的大概区域找出来,处理结果如图三所示):

** 筛选需要数据
get_object_model_3d_params (SmoothObjectModel3D, 'point_coord_z', ZValues)
** 求取Z轴上点云坐标的范围值
ZMin :=min(ZValues)
ZMax :=max(ZValues)
** 按照坐标进行筛选
select_points_object_model_3d (SmoothObjectModel3D, 'point_coord_z', 76, 80, ObjectModel3DThresholded)
visualize_object_model_3d (WindowHandle, ObjectModel3DThresholded, [], [], GenParamName, GenParamValue \
          , [], [], [], PoseOut)

在这里插入图片描述
4、进行去噪操作(找出主要的焦点区域,处理结果如图四所示):

** 去噪
connection_object_model_3d (ObjectModel3DThresholded, 'distance_3d', 0.5, ObjectModel3DConnected)
** 获取当前拆分的每个点云区域的点的数量
get_object_model_3d_params (ObjectModel3DConnected, 'num_points', PointsValue)
PointsMax :=max(PointsValue)
** 按照点云数量获取目标点云区域
select_object_model_3d (ObjectModel3DConnected, 'num_points', 'and', 200000, 220000, ObjectModel3DSelected)

在这里插入图片描述
5、点云简化并进行点云的采样(处理结果如图五所示):

** 点云采样
sample_object_model_3d (ObjectModel3DSelected, 'accurate', 0.8, [], [], SampledObjectModel3D)
visualize_object_model_3d (WindowHandle, SampledObjectModel3D, [], [], GenParamName, GenParamValue \
          , [], [], [], PoseOut)

在这里插入图片描述
6、调整主轴的位置,一般三个主轴的原点放到点云数据的质心上面(处理截图如图六,求取的质心数据如图七所示):

** 坐标放到点云数据质心上
moments_object_model_3d (SampledObjectModel3D, 'principal_axes', Moments)
** 位姿反转
pose_invert (Moments, PoseInvert)
** 把位姿转换为旋转+平移矩阵
pose_to_hom_mat3d (PoseInvert, HomMat3D)
** 仿射变换位置
affine_trans_object_model_3d (SampledObjectModel3D, HomMat3D, ObjectModel3DAffineTrans)

在这里插入图片描述
在这里插入图片描述
7、处理为光面(做三角化处理,处理结果如图八所示):

** 转换为光面
triangulate_object_model_3d (ObjectModel3DAffineTrans, 'greedy', [], [], TriangulatedObjectModel3D, Information)
visualize_object_model_3d (WindowHandle, TriangulatedObjectModel3D, [], [], GenParamName, GenParamValue \
          , [], [], [], PoseOut)

在这里插入图片描述
以上的七个步骤就是3D图像Blob分析的基本步骤。
三、代码流程如下所示:

dev_close_window ()
dev_open_window (0, 0, 500, 400, 'black', WindowHandle)

GenParamName :=['lut', 'color_attrib','disp_pose']
GenParamValue :=['color1','coord_z','true']

** 读取点云数据
read_object_model_3d ('白板笔', 'm', [], [], ObjectModel3D, Status)
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], GenParamName, GenParamValue \
          , [], [], [], PoseOut)
** 去掉离散点数据
smooth_object_model_3d (ObjectModel3D, 'mls', [], [], SmoothObjectModel3D)
visualize_object_model_3d (WindowHandle, SmoothObjectModel3D, [], [], GenParamName, GenParamValue \
          , [], [], [], PoseOut)
** 筛选需要数据
get_object_model_3d_params (SmoothObjectModel3D, 'point_coord_z', ZValues)
** 求取Z轴上点云坐标的范围值
ZMin :=min(ZValues)
ZMax :=max(ZValues)
** 按照坐标进行筛选
select_points_object_model_3d (SmoothObjectModel3D, 'point_coord_z', 76, 80, ObjectModel3DThresholded)
visualize_object_model_3d (WindowHandle, ObjectModel3DThresholded, [], [], GenParamName, GenParamValue \
          , [], [], [], PoseOut)
** 去噪
connection_object_model_3d (ObjectModel3DThresholded, 'distance_3d', 0.5, ObjectModel3DConnected)
** 获取当前拆分的每个点云区域的点的数量
get_object_model_3d_params (ObjectModel3DConnected, 'num_points', PointsValue)
PointsMax :=max(PointsValue)
** 按照点云数量获取目标点云区域
select_object_model_3d (ObjectModel3DConnected, 'num_points', 'and', 200000, 220000, ObjectModel3DSelected)
visualize_object_model_3d (WindowHandle, ObjectModel3DSelected, [], [], GenParamName, GenParamValue \
          , [], [], [], PoseOut)
** 点云采样
sample_object_model_3d (ObjectModel3DSelected, 'accurate', 0.8, [], [], SampledObjectModel3D)
visualize_object_model_3d (WindowHandle, SampledObjectModel3D, [], [], GenParamName, GenParamValue \
          , [], [], [], PoseOut)
** 坐标放到点云数据质心上
moments_object_model_3d (SampledObjectModel3D, 'principal_axes', Moments)
** 位姿反转
pose_invert (Moments, PoseInvert)
** 把位姿转换为旋转+平移矩阵
pose_to_hom_mat3d (PoseInvert, HomMat3D)
** 仿射变换位置
affine_trans_object_model_3d (SampledObjectModel3D, HomMat3D, ObjectModel3DAffineTrans)
visualize_object_model_3d (WindowHandle, ObjectModel3DAffineTrans, [], [], GenParamName, GenParamValue \
          , [], [], [], PoseOut)
** 求发线
* surface_normals_object_model_3d (ObjectModel3DAffineTrans, 'mls', [], [], ObjectModel3DNormals)
** 转换为光面
triangulate_object_model_3d (ObjectModel3DAffineTrans, 'greedy', [], [], TriangulatedObjectModel3D, Information)
visualize_object_model_3d (WindowHandle, TriangulatedObjectModel3D, [], [], GenParamName, GenParamValue \
          , [], [], [], PoseOut)

附录:
程序点云数据网盘自取:
链接:https://pan.baidu.com/s/1EJRdTpcC3LtnYa_ghSS3Pw
提取码:wzlb

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值