| Developers' Corner

XYZ 映射简介(第 2 部分)

在上一篇开发人员专区的文章中我们介绍了,什么是 XYZ 映射。并简要介绍了为何使用 XYZ 映射对许多 3D 应用有益。今天,我们会更详细地解答这个问题。

Z 图像
Z 图像
Z 图像上的区域生长
Z 图像上的区域生长
选定区域
选定区域
分割后的3D点云
分割后的3D点云

为何使用 XYZ 映射对许多 3D 应用有益?

在 3D 应用中使用 XYZ 映射对于点云的准备及应用的主要环节都有好处。我们会在下文中介绍三个主要优点,并给出一些解释和具体示例。以下列表和示例并非面面俱到,但应该能让您有一个整体的了解。

1) 加快 3D 算子速度

3D 数据的许多运算都需要不同 3D 点之间邻域的信息。对于包含 XYZ 映射的点云,可从 2D XYZ 映射中 3D 点的独特关系得出邻域,从而加快代价高昂的 3D 运算。

示例:

许多 HALCON 算子提供的方法明确使用了 XYZ 映射,例如 surface_normals_object_model_3d、sample_object_model_3d、reduce_object_model_by_view 或 triangulate_object_model_3d。您可以查看算子参考资料,了解可用方法。

2) 通过使用 2D 算子提高灵活性(并加快速度

此外,您可以在 XYZ 图像上使用许多 HALCON 现有的强大 2D 算子(例如分割和过滤等),从而提高灵活性。通常,在 XYZ 图像上使用 2D 算子也比类似的 3D 算子快。

示例:

假设我们希望在上次所用的示例图像中将盒子从背景中分离出来。在处理 3D 物体模型时,可使用以下算子:

connection_object_model_3d (OM3DScene, 'distance_3d', 0.01, ObjectModel3DConnected) select_object_model_3d (ObjectModel3DConnected, 'num_points', 'and', 5000, 500000, ObjectModel3DSelected) union_object_model_3d (ObjectModel3DSelected, 'points_surface', ObjectModel3DBoxes1)

在处理 2D XYZ 图像时,我们还可以选择使用:

object_model_3d_to_xyz (X, Y, Z, OM3DScene, 'from_xyz_map', [ ], [ ]) regiongrowing (Z, Regions, 3, 3, 0.01, 100) select_shape (Regions, SelectedRegions, 'area', 'and', 5000, 500000) union1 (SelectedRegions, RegionUnion) reduce_object_model_3d_by_view (RegionUnion, OM3DScene, [ ], [ ], ObjectModel3DBoxes2)

虽然 3D 和 2D 方法可以提供相同或相似的结果,但是第二种方法通常比第一种方法快,尤其是在处理大点云时。在此示例中,可实现高达 400% 的加速。

3) 需要 XYZ 图像的 3D 算子

使用 3D 边缘的算子非常需要 XYZ 图像,例如 edges_object_model_3d、find_box_3d 或支持边缘的基于表面的匹配。因此,如果要使用这些方法,需要包含 XYZ 映射的 3D 物体模型。

总结

总体而言,使用包含 XYZ 映射的 3D 物体模型可以显著提高应用的速度、灵活性和稳定性。因此,强烈建议在 3D 处理中使用 XYZ 图像。 更多信息和示例(例如背景去除)可以在我们随 HALCON 20.11 开发版提供的新技术说明:%HALCONROOT%/doc/pdf/manuals/surface_based_matching.pdf中找到。