Halcon - find_box_3d 官方文档翻译

官方英文文档原文:https://www.mvtec.com/doc/halcon/2005/en/find_box_3d.html

函数原型

find_box_3d( : : ObjectModel3DSceneSideLen1SideLen2SideLen3MinScoreGenParam : GrippingPoseScoreObjectModel3DBoxBoxInformation)

输入参数为:ObjectModel3DSceneSideLen1SideLen2SideLen3MinScoreGenParam

输出参数为:GrippingPoseScoreObjectModel3DBoxBoxInformation

find_box_3d函数的作用是在3D场景ObjectModel3DScene 中寻找盒状物。为每个找到的盒子ObjectModel3DBox返回抓取点的姿态 GrippingPose 、得分值Score和盒子的相关信息,这些信息保存在字典BoxInformation中。

对于输入参数 SideLen1SideLen2, and SideLen3中。每个长度由两个值的组成,表示该边的最小和最大长度。如果场景中只看到盒子的一个面,或者对盒子的第三维长度没有限制,SideLen3  可以将其设置为-1

 MinScore该参数设置要返回的盒子的最低分数。分数小于此值的盒子将被舍弃。

ObjectModel3DScene 必须包含一个XYZ映射,例如可以使用函数 xyz_to_object_model_3d创建。

典型工作流程

关于返回值及Results

GrippingPose中返回抓取点的姿势。抓取点的Z轴和抓取面是根据点云的XYZ映射图得到的。如果仅能看到箱子的一个面,则抓握姿势的中心位于该面的中心,并且其Z轴的方向沿相机光轴远离视点的方向。如果一个视野里可以看到箱子的多个平面,则抓取姿势位于最垂直于视点的面的中心,( the gripping pose lies in the center of the side that is most parallel to the viewing point of the XYZ-mapping)。

Z轴定向为沿相机光轴远离视点的方向。抓取点的X轴方向为最平行于点云平面的列坐标的方向(The x-axis of the gripping pose is set to the box axis that is roughly the most aligned with the column direction of the XYZ-mapping. ) y轴是根据x轴和z轴计算的。 

识别出来的盒子还以三角形式返回ObjectModel3DBox。方便用来快速显示结果。

对于找到的每个盒子,在 Score返回值中返回01之间的一个分数。该分数表示盒子及其边缘的可见程度的得分,以及找到的盒子与指定尺寸的匹配程度。

最后,有关结果的其他信息将在返回值BoxInformation中返回。

Generic Parameters

可以在字典中将其他参数作为键/元组对传递, 以改善匹配结果。

'3d_edges':

允许手动设置3D场景边缘。参数必须是3D对象模型句柄。

'3d_edge_min_amplitude':

设置不连续的最小幅度,以便将其分类为边。请注意,如果使用通用参数手动传递了边,则将 忽略此参数。

Default value: 10% of the smallest box diagonal.

'remove_outer_edges':

设置为'true'时,删除最外面的边缘。例如,这对于从箱子中拣选应用程序很有帮助,以便删除外围箱子。

'max_num_boxes':

限制返回的框数。

'box_type':

设置要搜索的框的类型。对于“ full_box_visible”,仅返回可见面大于一个的箱子。如果设置了“ single_side_visible”,则仅搜索具有一侧可见面的箱子。如果仍然可以看到更多的盒子侧面,则将其忽略。对于“全部”,将返回两种类型。

Troubleshooting

要调试该算法,可以使用返回的字典中的数据来可视化一些内部使用的数据 。The sampled 3D scene can be extracted with the key 'sampled_scene'.查找较小的盒子需要更密集的采样,从而减慢盒子的检测速度。采样的3D边缘可以利用参数'sampled_edges' and 'sampled_edges_directions'来获得。它们包含相同的点。但是,'sampled_edges' 包含法线向量为相机光轴方向,而 'sampled_edges_directions'包含边缘点的法线向量。请注意,边缘方向应垂直于边缘,并指向盒子的外部。

Improve performance:

如果花费的时间太长,则以下步骤可能有助于提高其性能。 find_box_3d

  • 消除更多的背景和杂物:通常可以通过尽可能多地消除3D场景中的背景和杂物来显着提高运行时间和检测精度。

    删除不需要的数据的最常见方法是:

    • 在调用之前通过在XYZ图像上使用和,或通过直接在包含场景的3D对象模型上使用,对X,Y和Z坐标进行阈值设置。

    • 一些传感器返回强度图像(intensity)以及3D数据。强度图像上的滤镜可用于删除图像中包含背景的部分。

    • 使用背景差分法。如果场景是静态的,例如,如果传感器安装在传送带上方的固定位置,则背景中的XYZ图像可以一次获取而没有任何盒子。之后, 可以在Z图像上使用 sub_image 和threshold,并选择3D数据中不属于背景的部分。

  • 增加最低分数
  • 增加可能的最小框:可能的最小框边越小,运行速度越慢 。例如,如果通常从一个侧面看到所有框,则将SideLen3 设置为-1可能很有意义。此外,可以设置为限制搜索框的类型'box_type'。
  • 手动计算和过滤边缘:可以使用手动提取场景的边缘edges_object_model_3d,并使用参数“ 3d_edges” 传递给场景 。因此,手动提取可用作进一步过滤边缘的方法。

个人总结:

find_box_3d 如果一个场景中都是同种箱子,很有优势,但是事先需要准确设定目标的长宽高范围 。如果一个场景中是不同长度的目标,可以使用多个查找表,但是速度会慢,误识别也会增多。

猜你喜欢

转载自blog.csdn.net/yaked/article/details/109995163