Halcon 3D点云和深度图的相互转化

本文介绍了如何将灰度图像转化为3D点云,通过像素坐标和灰度值构建三维模型,并详细讲解了深度图的创建方法。此外,还涵盖了深度图与点云的双向转换,以及实战代码和资源下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 如何将灰度图转为3D点云

  • 这里所说的灰度图转为3D点云,其实是将灰度图像每个像素的行列坐标作为3D点云的X,Y坐标,像素的灰度值(0—255)作为三维点的Z坐标。
  • 简单说就是将一张灰度图像拆成了三个数组:X,Y,Z,然后将这三个数组转为点云。
    在这里插入图片描述
    halcon代码:
dev_get_window (WindowHandle)
read_image (Image, '1.bmp')
rgb1_to_gray (Image, GrayImage)

*获取图像尺寸
get_image_size (GrayImage, Width, Height)
gen_rectangle1 (Rectangle, 0, 0, Height-1,Width-1)
*从区域生成所有的像素坐标
get_region_points(Rectangle, X, Y)
*读取图像的全部像素
get_grayval(GrayImage, X, Y, Z)
*创建3D对象模型
gen_object_model_3d_from_points(X, Y, Z, ObjectModel3D)
*显示3D模型
visualize_object_model_3d (WindowHandle,ObjectModel3D , [], [], [], [], [], [], [], PoseOut)

2. 创建一张深度图

  • 实际上深度图是使用X,Y,Z三个数组的数据创建来的;
  • X,Y是作为图像的行列坐标,Z是实数(表示的是深度/高度),而不是灰度,因为灰度值是0——255之间的整数;
  • Z的值是能够返回高度信息的传感器获取到的,比如点激光、线激光,结构光等。
  • 下面是自己赋值得到的一张深度图。
    在这里插入图片描述
dev_get_window (WindowHandle)
read_image (Image, '2.bmp')
rgb1_to_gray (Image, GrayImage)
*获取图像尺寸
get_image_size (GrayImage, Width, Height)
gen_rectangle1 (Rectangle, 0, 0, Height-1,Width-1)
*从区域生成所有的像素坐标
get_region_points(Rectangle, X, Y)
*读取图像的全部像素
get_grayval(GrayImage, X, Y, Z)

*改变Z的值
Z:=Z-256

*对在Rectangle2区域中的像素进行赋值
gen_rectangle1 (Rectangle2, 101, 101, 140,140)
get_region_points(Rectangle2, X2, Y2)
Z[X2*400+Y2]:=2.4

*创建一张类型为'real'的图像
gen_image_const (ImageConst, 'real', Width, Height)
*使用X,Y,Z给图像赋值A
set_grayval (ImageConst, X, Y, Z)

3. 深度图转点云、点云转深度图

  • 接下来我们加载一张真正的深度图,它是由线激光采集数据得到的,保存格式为tiff文件;
  • 这是截取了其中一段图像,扫描的是电路板上一些元器件和焊点的高度。
    在这里插入图片描述
read_image (Image, '3DImage1.tiff')
get_image_size (Image, Width, Height)

*1. 这一步是将灰度图转为了X,Y,Z三个数组,当然也就可以转为三位点云了
*获取图像尺寸
get_image_size (Image, Width, Height)
gen_rectangle1 (Rectangle, 0, 0, Height-1,Width-1)
*从区域生成所有的像素坐标
get_region_points(Rectangle, X, Y)
*读取图像的全部像素
get_grayval(Image, X, Y, Z)

*2. 再将X,Y,Z这三个数组转回深度图,实际应用中,线机光返回的数据就是Z数组,X,Y数组由自己创建
*创建一个空图像,注意type选择'real'
gen_image_const (ImageConst, 'real', Width, Height)
*然后使用数组填充图像,这样就完成了
set_grayval (ImageConst, X, Y, Z)

*3. 接下来就可以对深度图做进一步处理了。。。

4. 代码和图片下载地址

https://download.youkuaiyun.com/download/weixin_38566632/19765495

### Halcon3D点云处理方面的功能及解决方案 Halcon 是一款功能强大的机器视觉软件,广泛应用于工业自动化、质量检测机器人导航等领域。它提供了丰富的工具算子,用于高效处理3D点云数据。以下是 Halcon3D 点云处理方面的主要功能及解决方案: #### 1. 点云拼接 Halcon 提供了完善的点云拼接功能,能够将来自不同视角的点云数据进行对齐合并,生成完整的三维模型[^1]。这一过程通常涉及点云配准(Registration)、坐标变换以及噪声去除等步骤。通过使用 Halcon 的 `match_surface_points` `concat_obj` 等算子,可以实现高精度的点云拼接。 #### 2. 点云可视化 在 Halcon 中,可以通过调用 `visualize_object_model_3d` 函数来实现点云的可视化[^2]。此函数允许用户在交互式窗口中查看点云数据,并支持缩放、旋转平移操作。以下是一个简单的代码示例: ```python dev_get_window (WindowHandle) visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], [], [], [], [], [], PoseOut) ``` #### 3. 点云平面拟合与空间旋转 Halcon 支持点云的平面拟合功能,这对于物体识别、环境建模机器人导航等任务至关重要[^3]。通过使用 `fit_plane_xld` 或 `fit_surface_normal_model` 算子,可以计算出最佳拟合平面及其法向量。此外,Halcon 还提供了 `pose_to_hom_mat3d` `affine_trans_point_3d` 等算子,用于实现点云的空间旋转平移。 #### 4. 点云分割与特征提取 Halcon 提供了多种点云分割算法,例如基于区域生长的分割方法或基于聚类的分割方法。这些算法可以帮助用户从复杂的点云数据中提取感兴趣的区域。同时,Halcon 还支持特征提取功能,例如计算点云的曲率、法向量距离等几何属性。 #### 5. 噪声去除与平滑处理 为了提高点云数据的质量,Halcon 提供了多种噪声去除平滑处理的方法。例如,可以通过 `reduce_domain` `smooth_image` 算子来去除孤立点毛刺。此外,还可以使用 `close_points_minkowski` `open_points_minkowski` 等算子来进行形态学操作,进一步优化点云数据。 #### 6. 点云配准与对齐 Halcon 支持基于特征的点云配准方法,例如 ICP(Iterative Closest Point)算法。通过使用 `match_surface_points` `align_sceneicp` 等算子,可以实现高精度的点云对齐。 --- ### 示例代码:点云可视化 以下是一个简单的 Halcon 代码示例,展示如何加载点云数据并进行可视化: ```hdevelop * 加载点云数据 read_object_model_3d ('point_cloud.obj', ObjectModel3D) * 获取窗口句柄 dev_get_window (WindowHandle) * 可视化点云 visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], [], [], [], [], [], []) ``` ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MechMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值