Halcon算子学习:create_surface_model

image.png

create_surface_model

( : : ObjectModel3D, RelSamplingDistance, GenParamName, GenParamValue : SurfaceModelID)

创建执行基于表面的匹配所需的数据结构


输入:


object_model_3d

3D对象模型的句柄。

RelSamplingDistance (input_control) real→(real)

相对于物体直径的采样距离

默认值:0.03

建议值:0.1,0.05,0.03,0.02,0.01

限制:0 < RelSamplingDistance < 1

GenParamName (input_control)

通用参数的名称。

默认值:[]

建议值:model_invert_normals、pose_ref_rel_sampling_distance、feat_step_size_rel、feat_angle_resolution、train_3d_edges

GenParamValue

通用参数的值。

默认值:[]

建议值:0,1,‘true’, ‘false’,0.005,0.01,0.02,0.05,0.1

输出:


SurfaceModelID (output_control)

表面模型的句柄

算子说明

1、操作符create_surface_model为3D对象模型ObjectModel3D创建基于表面的匹配模型。例如,以前可以使用read_object_model_3d从文件读取3D对象模型,或者使用xyz_to_object_model_3d创建3D对象模型。创建的表面模型在SurfaceModelID中返回。


2、曲面模型的创建要求三维对象模型包含点和法线。下列组合是可能的:


点和点法线;

点和三角形或多边形网格,例如,从CAD文件;

点和2d映射,例如用xyz_to_object_model_3d三倍转换的XYZ图像。

3、注意,模型法线的方向和方向(向内或向外)对于匹配非常重要。还请注意,对于边缘支持的基于表面的匹配,模型必须包含一个三角形或多边形网格(如图)

image.png

4、表面模型是通过对一定距离的三维对象模型采样来创建的。采样距离必须在参数RelSamplingDistance中指定,并相对于三维对象模型的轴向-平行 边界框(axis-parallel bounding box)的直径进行参数化。例如,如果RelSamplingDistance设置为0.05,ObjectModel3D的直径为“10 cm”,则从对象表面采样的点之间的距离大约为“5 mm”。采样点用于操作符find_surface_model中的近似匹配(参见下面)。可以使用操作符get_surface_model_param使用值’sampled_model’获得采样点。请注意,应该避免对象模型中的离群点,因为它们会破坏直径。

减少RelSamplingDistance会产生更多的点,从而实现更稳定但更慢的匹配。增加RelSamplingDistance会导致更少的点,从而导致更少的稳定但更快的匹配。


5、采样点用于通过操作符find_surface_model在场景中查找对象模型。为此,要检查点集中所有可能的点对,并计算每对点的距离和相对表面方向。这两个值被离散化并存储以进行匹配。通用参数**‘feat_step_size_rel’和‘feat_angle_resolution’可分别用于设置距离和方向角的离散化**(如下所示)。


再次采样3D对象模型进行姿态细化。第二次采样的采样距离较小,导致更多的点。通用参数**'pose_ref_rel_sampling_distance’设置相对于对象直径的采样距离**。降低该值可以得到更精确的位姿细化,但会导致更大的模型和更慢的模型生成和匹配。增加该值会导致更少的精确姿态细化,但会导致更小的模型和更快的模型生成和匹配(见下文)。


6、此外,基于表面的匹配可以使用3D边缘来改进对齐(排列)。这对于平面或包含较大平面边的对象特别有帮助,例如在不正确的旋转或背景平面中发现它们。为了允许find_surface_model也对齐边缘,必须通过将通用参数‘train_3d_edges’设置为‘true’来训练表面模型。在这种情况下,模型必须包含一个网格,即三角形或多边形。此外,对于边缘支持的基于表面的匹配的训练需要 OpenGL 2.1、GLSL 1.2和OpenGL扩展GL_EXT_framebuffer_object和GL_EXT_framebuffer_blit。我也可以比没有边缘支持的训练花更长的时间。

通用参数对GenParamName和GenParamValue用于为模型生成设置额外的参数。GenParamName包含要设置的参数名的元组,GenParamValue包含相应的值。以下值是可能的GenParamName:


“model_invert_normals”:

反转模型表面法线的方向。模型生成需要知道正常的方向。如果模型和场景都使用相同的设置,法线将指向相同的方向。如果模型是从CAD文件加载的,法线可能指向相反的方向。如果你在场景表面的“外部”发现了模型,并且模型是由CAD文件创建的,试着将这个参数设置为“true”。另外,确保CAD文件中的法线都指向外或内,即,始终一个方向。法向与曲面模型的姿态细化无关。因此,如果对象模型仅与操作符refine_surface_model_pose一起使用,则‘model_invert_normals’的值对结果没有影响。

可能的值:‘false’, ‘true’

默认值:“假”


“pose_ref_rel_sampling_distance”:

设置相对于对象直径的姿态细化的采样距离。减少这个值会导致更精确的姿态细化,但会导致更大的模型和更慢的模型生成和细化。增加该值会导致更少的精确姿态细化,但会导致更小的模型和更快的模型生成和匹配。

建议值:0.05、0.02、0.01、0.005

默认值:0.01

断言:0 < ‘pose_ref_rel_sampling_distance’ < 1


“feat_step_size_rel”:

设置点对距离相对于物体直径的离散化距离。该值默认为RelSamplingDistance的值。不建议更改此值。对于噪声很大的场景,可以通过增加值来提高对噪声点的匹配的鲁棒性。

建议值:0.1、0.05、0.03

默认值:RelSamplingDistance的值

断言:0 < ‘feat_step_size_rel’ < 1


“feat_angle_resolution”:

将点对方向的离散化设置为角度细分的数目。建议不要更改此值。值的增加增加了匹配的精度,但降低了对不正确法线方向的鲁棒性。值的减少降低了匹配的精度,但增加了对不正确法线方向的鲁棒性。对于法线方向无法精确计算的非常嘈杂的场景,该值可以设置为25或20。

建议值:20、25、30

默认值:30

断言:‘feat_angle_resolution’ > 1


“train_3d_edges”:

支持边缘支持的基于表面的匹配和细化的训练。在这种情况下,模型必须包含一个网格,即三角形或多边形。这个参数需要OpenGL。

可能的值:‘false’, ‘true’

默认值:“假”


————————————————

版权声明:本文为CSDN博主「Leon_Chan0」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Vichael_Chan/article/details/102613081



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864