【四】3D Object Model之测量Features——area_object_model_3d()/distance_object_model_3d()算子


😊😊😊欢迎来到本博客😊😊😊

🌟🌟🌟 Halcon算子太多,学习查找都没有系统的学习查找路径,本专栏主要分享Halcon各类算子含义及用法,有时间会更新具体案例。

😊😊😊 具体食用方式:可以点击本专栏【Halcon算子快速查找】–>搜索你要查询的算子名称;或者点击Halcon算子汇总博客,即可食用。

🎁🎁🎁支持:如果觉得博主的文章还不错或者您用得到的话,可以悄悄关注一下博主哈,如果三连收藏支持就更好啦!这就是给予我最大的支持!😙😙😙


学习目标

  • area_object_model_3d()
  • distance_object_model_3d()

学习内容

算子简介

函数名解释
area_object_model_3d()计算三维对象模型所有面的面积。
distance_object_model_3d()计算一个三维对象模型的点到另一个三维对象模型的距离。

1、area_object_model_3d()

area_object_model_3d( : : ObjectModel3D : Area)

  函数说明:计算三维对象模型中所有面的面积。三维对象模型需要面或三角形。生成的区域返回到Area中。

  函数参数:
    ObjectModel3D输入 3D对象模型句柄;
    Area输出计算出的面积;

Halcon例程


2、distance_object_model_3d()

distance_object_model_3d( : : ObjectModel3DFrom, ObjectModel3DTo, Pose, MaxDistance, GenParamName, GenParamValue : )

  函数说明:计算三维对象模型ObjectModel3DFrom中的点到三维对象模型ObjectModel3DTo中的点、三角形、多边形或基本体的距离。距离存储为三维对象模型ObjectModel3DFrom中名为“&distance”的扩展属性。该属性随后可以使用get_object_model_3d_params进行查询,也可以使用select_points_object_model_3d或其他使用扩展属性的运算符进行处理。

  目标数据(点、三角形、多边形或基本体)是基于ObjectModel3DTo中包含的属性选择的。它是根据数据的存在顺序选择的:基本体、三角形、多边形和点。作为这种自动目标数据选择的替代方案,还可以使用通用参数“distance _to”设置目标数据类型(见下文)。在计算到生成的三角形的距离之前,操作符会对一般的非三角形多边形进行内部三角化。因此,使用三角化对象调用操作符比使用具有不同多边形面的对象调用操作符更快。

  MaxDistance可用于限制要计算的距离值的范围。如果“最大距离”设置为0,则会计算所有距离。如果将“MaxDistance”设置为另一个值,则不处理距离将超过“MaxDistances”的点,并将其设置为“MaxDistrict”。因此,将MaxDistance设置为不同于0的值可以显著加快此运算符的执行。

  如果Pose是非空元组,则在计算距离之前,它必须包含应用于ObjectModel3DFrom中的点的姿势。可以使用通用参数“inverse_pose”反转姿势。

  根据目标数据类型(点、三角形或基本体),可以使用多种方法计算距离。其中一些方法在ObjectModel3DTo的元素上计算数据结构,以加快距离计算。这些数据结构可以使用运算符prepare_object_model_3d进行预计算。这允许多次调用distance_object_model_3d来重用数据结构,从而节省每次调用重新计算数据结构的时间。对于具有非三角形多边形面的对象,操作符prepare_object_model_3d可以额外执行三角测量并将其保存到对象,以进一步加速distance _object_model_3d操作符。只有当通用参数“distance _to”设置为“triangles”时,才会执行此三角测量。请注意,与操作符triangulate_object_model_3d相反,此三角测量不会清除多边形属性。

  在计算到点或到三角形的距离时,我们可以选择通过将通用参数“store_closest_index”设置为“true”来返回ObjectModel3DFrom中每个点的最近点或三角形的索引。索引存储为三维对象模型ObjectModel3DFrom中名为“&closest_index”的扩展属性。请注意,使用“体素”方法时无法计算最接近的索引。如果点与其最近元素的距离超过在MaxDistance中设置的最大距离,则最近的索引将设置为-1

  可以计算到点、三角形或到基本体的带符号距离。因此,必须将通用参数“signed_dances”设置为“true”请注意,将“体素”方法与点到点距离结合使用时,无法计算带符号距离。


  下面解释了不同的目标类型和方法,并描述了它们的优点和缺点。请注意,我们会根据目标数据类型自动选择默认方法。可以使用泛型参数“method”重写此方法。

  【Distance to points】:以下方法可用于计算点到点之间的距离:

方法解释
Linear search对于ObjectModel3DFrom中的每个点,将计算到ObjectModel3DTo中所有点的距离,并使用最小距离。此方法不需要预先计算的数据结构,并且对于ObjectModel3DTo中的少量点来说是最快的。
KD-TreeObjectModel3DTo中的点被组织在KD树中,这加快了搜索最近点的速度。这棵树的建造非常有效。搜索时间与ObjectModel3DTo中的点数近似为对数。但是,搜索时间不是恒定的,并且可能会根据查询点在ObjectModel3DFrom中的位置而显著变化。
VoxelObjectModel3DTo中的点被组织成体素结构。这种体素结构允许在几乎恒定的时间内进行搜索,即独立于ObjectModel3DFrom中查询点的位置和ObjectModel3DTo中的点的数量。

    请注意,准备此数据结构需要几秒钟或几分钟的时间。但是,可以使用prepare_object_model_3dObjectModel3DTo执行预计算,其中Purpose设置为“distance_computerion”

  【Distance to triangles】:计算到三角形的距离,支持以下方法:

方法解释
Linear search对于ObjectModel3DFrom中的每个点,将计算到ObjectModel3DTo中所有三角形的距离,并使用最小距离。此方法不需要预先计算的数据结构,并且对于ObjectModel3DTo中的少量三角形来说是最快的。
KD-TreeObjectModel3DTo中的三角形被组织在KD树中,这加快了搜索最接近的三角形的速度。这棵树的建造是有效的。搜索时间大约是ObjectModel3DTo中三角形数量的对数。但是,搜索时间不是恒定的,并且可能会根据查询点在ObjectModel3DFrom中的位置而显著变化。
VoxelObjectModel3DTo中的三角形以体素结构进行组织。这种体素结构允许在几乎恒定的时间内进行搜索,即独立于ObjectModel3DFrom中查询点的位置和ObjectModel3DTo中三角形的数量。

    请注意,准备此数据结构需要几秒钟或几分钟的时间。但是,可以使用prepare_object_model_3dObjectModel3DTo执行预计算,其中Purpose设置为“distance_computerion”。为了创建体素数据结构,对三角形进行采样。可以使用通用参数“sampling_dist_rel”“samplings_dist_abs”设置相应的采样距离。

    默认情况下,使用0.03的相对采样距离。请注意,此数据结构仅为近似数据。一些距离可能偏离了采样距离的大约10%。在这些情况下,返回的距离将始终大于实际距离。

  【Distance to primitive:】 由于ObjectModel3DTo只能包含一个基元,因此从查询点到该基元的距离是线性计算的。无法创建或使用数据结构。

    请注意,计算与segment_object_model_3dfit_primitives_object_model_3d拟合的基元平面的距离可能很慢,因为这些平面包含用于拟合平面的点的复杂凸包。如果只需要到平面的距离,并且应忽略边界,则建议使用参数为“primitive_parameter_pose”get_object_model_3d_params获取平面姿态,并使用gen_plane_object_model_3d创建新平面。

  函数参数:
    ObjectModel3DFrom输入 源3D对象模型句柄;
    ObjectModel3DTo输入目标3D对象模型句柄;
    Pose输入源三维对象模型在目标三维对象模型中的姿势;
    MaxDistance输入感兴趣的最大距离;
    GenParamName输入通用输入参数的名称;默认: [ ];参考: ‘distance_to’, ‘invert_pose’, ‘method’, ‘output_attribute’, ‘sampling_dist_abs’, ‘sampling_dist_rel’, ‘signed_distances’, ‘store_closest_index’;
    GenParamValue输入通用输入参数的值;默认: [ ];参考: ‘auto’, ‘false’, ‘kd-tree’, ‘linear’, ‘points’, ‘polygons’, ‘primitive’, ‘triangles’, ‘true’, ‘voxel’

  除了上述参数之外,还可以设置以下参数来影响距离计算。如果需要,可以分别使用GenParamNameGenParamValue指定这些参数及其相应的值。以下所有参数都是可选的。

【‘distance_to’】:此参数可用于明确设置计算距离的目标数据

参数名解释
'auto'(默认)自动设置目标数据。将查询以下属性列表,列表中第一个出现的属性将用作目标数据:“基本体”、“三角形”、“点”。
'primitive'计算到ObjectModel3DTo中包含的基本体的距离。
'triangles'计算到ObjectModel3DTo中包含的三角形的距离。
'points'计算到ObjectModel3DTo中包含的的距离。

【‘method’】:此参数可用于明确设置要用于距离计算的方法请注意,并非所有方法都可用于所有目标数据类型。有关可能的目标数据类型和方法对的列表,请参见上文。

参数名解释
'auto'(默认)对所使用的目标数据类型使用默认方法。
'linear'使用线性搜索来计算距离。
'kd-tree'使用KD树计算距离。
'voxel''使用体素结构来计算距离。

【‘invert_pose’】:此参数可用于反转“姿势”中给定的姿势。

参数名解释
'false'默认设置)姿势不会反转。
'true'姿势是倒置(反转)的。

【‘output_attribute’】:此参数可用于设置存储距离的属性的名称。默认情况下,距离存储在ObjectModel3DFrom中名为“&distance”的扩展属性中。然而,如果相同的3D对象模型用于该运算符的不同调用,则先前调用的结果将被覆盖。这可以通过更改扩展属性的名称来避免。有效的扩展属性名称以“&”开头。

【‘sampling_dist_rel’, ‘sampling_dist_abs’】:当**使用体素方法计算到三角形的距离时,使用这些参数。**为此,需要对三角形进行采样。采样距离可以使用“sampling_dist_abs”以绝对值设置,也可以使用“sampleling_dist_rel”相对于轴对齐边界框的直径设置。默认情况下,“sampling_dist_rel”设置为0.03。只能设置两个参数中的一个。可以使用get_object_model_3d_params查询轴对齐边界框的直径。请注意,体素数据结构的创建非常耗时,通常使用prepare_object_model_3d离线执行。

【‘store_closest_index’】:此参数可用于返回扩展属性'&closest_index'中最近点或三角形的索引

参数名解释
'false'(默认值)不返回索引。
'true'返回索引。

【‘signed_distances’】:此参数可用于计算三维对象模型ObjectModel3DFrom中的点到三维对象模型ObjectModel3DTo中的点、三角形或基元的带符号距离。

参数名解释
'false'(默认值)返回无符号距离。
'true'返回带符号的距离。

根据可用的目标数据(点、三角形或基本体),必须考虑以下特殊性:

参数名解释
Distance to points只有“kd-tree”“linear search”方法才支持有符号距离的计算。但是,只有当点法线可用于三维对象模型中的点或通过操作符set_object_model_3D_attrib_mod附加时,才能计算带符号距离。
Distance to triangles可以为上面列出的所有方法计算符号距离。如果三角形法向量的点积小于零,则运算符返回负距离。否则,距离为正。
Distance to primitive计算到圆柱形、球形或长方体的有符号距离时,三维对象模型ObjectModel3DFrom的点在基本体内部的距离为负,而所有其他点的距离为正。当计算到平面的有符号距离时,平面下的所有点都获得负距离,而所有其他点都获得正距离。

Halcon例程

set_object_model_3d_attrib.hdev					设置三维对象模型的属性
scene_flow_globe.hdev							计算两个立体图像对之间的3D场景流,以恢复对象在3D中的运动
reconstruct_3d_object_model_for_matching.hdev	通过三维配准从多个视图重建用于匹配的三维对象模型
measure_plant.hdev								在三维中测量植物特征
find_surface_model_noisy_data.hdev				在使用飞行时间(TOF)相机获取的嘈杂3D场景中查找具有基于表面匹配的对象
find_deformable_surface_model.hdev				使用基于可变形曲面的匹配在三维场景中查找对象
compare_surface_sheet_of_light.hdev				使用未校准的光设置表进行3D表面比较
check_for_holes_sheet_of_light.hdev				使用校准的光设置表来验证孔的存在和正确性

【3D Object Model之测量Features】 待更新算子

  • area_object_model_3d()
  • distance_object_model_3d()
  • get_object_model_3d_params()
  • max_diameter_object_model_3d()
  • moments_object_model_3d()
  • select_object_model_3d()
  • smallest_bounding_box_object_model_3d()
  • smallest_sphere_object_model_3d()
  • volume_object_model_3d_relative_to_plane()

汇总

  本专栏博客汇总:Halcon算子汇总


🚶🚶🚶今天的文章就到这里啦~
喜欢的话,点赞👍、收藏⭐️、关注💟哦 ~

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cqy阳

预祝上岸,感谢打赏

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

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

打赏作者

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

抵扣说明:

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

余额充值