find_shape_mode参数详解及时长优化

  注:本文内容大量引用了王成群所著《Halcon工业使用教程》第二册中9.1.3 find_shape_mode的内容。

       HALCON中最实用的算子find_shape_model,该算子通过模板在图像中寻找没有几何缩放的目标。本文重点对其主要参数进行了归纳整理。通过对该参数的分析,得出通过优化匹配角度、金字塔层数以及贪婪度可减少模板寻找的时长。 
find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score) 
       其输出参数共有4个。分别是目标在图像中的坐标(Row,Column)、目标的旋转角度以及匹配分值。其中,(Row,Column)是目标在图像中的坐标。但是目标是有一定区域的,一个区域的位置怎么会以一个点的坐标来描述呢?实际上是可以的,比如说圆能够以圆心坐标的表示其位置。默认情况下,在find_shape_model中,目标的位置是其重心的位置。这也是其旋转角度默认的旋转中心的位置。而(Row,Column)坐标为了创建变换矩阵,可以用匹配结果实现如仿射变换等对其ROI的功能[1]。 
       匹配得到的目标的分值通过Score返回,是模板在搜索图像中可视比例的近视测量[1]。 
       Image的domain定义了模板参考点的搜索区域,模板参考点是在create_shape_model中用来创建模板图像的domain区域的重心。默认情况下,是在Image的domain区域内搜索模板,且当模板完全属于domain才能有匹配结果。这意味着,如果模板超出图像边界,即使获得的Score>MinScore也不能找到模板。特殊情况下,我们需要,即使部分目标超出了图像区域也能有匹配的结果。因此,需要通过set_system(‘border_shape_models’, ‘true’)改变。这样,那些超出图像边界的目标才有可能被找到[1]。 
       参数AngleStart和AngleExtent确定了模板搜索的旋转角度。该角度尽量是create_shape_model算子中给定的角度一致[1]。 
       参数MinScore设置的越大,搜索的就越快。如果模板在图像中没有被遮挡,MinScore可以设置为0.8,甚至为0.9[1]。 
       NumMatches定义了模板上找到模板的最大个数[1]。如果Image中仅有1个目标,将NumMatches设置为1,将MinScore设置较低,比如0.5。该方式是一种较健壮的在Image中找到匹配目标的参数设置。 
       如果模板具有对称性,则会在搜索图像的同一个位置和不同角度上找到多个与目标匹配的区域。参数MaxOverlap定义了找到两个目标区域的最大重叠度 ,以便于把他们作为两个不同的目标区域分别返回。如果MaxOverlap = 0,找到的目标区域不能存在重叠;如果MaxOverlap = 1,找到所有的目标区域均要返回[1]。 
       SubPixel确定找到的目标是否使用亚像素精度提取。如果其值为‘none’或者‘false’,模板位置仅仅是像素精度和在create_shape_model中定义的角度分辨率。如果其值为 ‘interpolation’或‘true’,位置和角度都是亚像素精度的。在这种模式下模板的位姿是在匹配分数函数中插值运算得到的。这种模式耗费时间较少且精度足够,被广泛使用[1]。 
       但是,在精度要求极高的应用中,模板的位姿应该通过最小二乘法确定,即模板点到相关图像点的距离最小。其值分别有'least_squares', 'least_squares_high', 'least_squares_very_high'。其级别越高,耗时越长。一般情况下,使用’least_squares’能达到时间和精度的平衡[1]。 
       如果目标相对于模板稍微有形变,其匹配的分值会较低。对于这样的目标,可在参数SubPixel额外传递一个最大允许目标变形的参数,‘max_deformation 1’,字符串中的数值是0到32之间的整数值。0代表不允许变形。较高的最大允许变形值导致运行时长的增加且及承担了更高的匹配错误的风险。因此,最大变形应该选择尽可能的小。为了获取一个有意义的分数值以及避免匹配错误,推荐把允许变量和最小二乘法联合使用[1]。 
       NumLevels是在搜索时使用的金字塔级别。当NumLevels=0时,使用创建模板时的金字塔级别。另外,NumLevels还可以包含第二个参数,这个参数定义了找到匹配模板的最低金字塔级别。例如:NumLevels=[4,2]表示在第4层开始匹配,在第2层找到匹配(其默认值为1)。可以使用这种方式降低运行时间,但是这种模式下的位姿参数是精度较低的[1]。 
       如果输入图像质量太差,例如失焦,变形,噪声等,导致边缘信息丢失或变形,通常在最低金字塔层找不到匹配目标。然而,其边缘信息可能在更高的金字塔级别上是足够的[1]。 
       另外,不同图像间,金字塔级别可能略有不同。为了方便对质量较差的图像匹配,在匹配时可以确定最低的金字塔级别。这里的技巧是,最低金字塔层可用负数指明。例如,如果NumLevels为[4,-2],匹配从第4层金字塔开始,跟踪到最低金字塔级别。如果在这层金字塔找不到匹配目标,继续降低金字塔级别进行搜索,把找到至少一个匹配目标的金字塔级别最为最低金字塔级别,并返回找到的目标[1]。 
       参数Greediness确定搜索时的 “贪婪程度”。如果Greediness=0,使用一个安全的启发式搜索,该方式总能找到模板,但耗时较长。一般情况下,将Greediness=0.9,这样几乎所有的情况,总能够找到模板[1]。 
       最后,该模板寻找算子在找不到目标的情况下较为耗时,通过算子 
set_shape_model_param (ModelID, 'timeout', 1000) 
能设置匹配时长,如果find_shape_model达到’timeout’,立刻终止执行,无输出匹配结果,返回一个错误代码9400(H_ERR_TIMEOUT)[1]。 
[1] 王成群. Halcon工业使用教程第二册: 129
--------------------- 
作者:罗泽 
来源:CSDN 
原文:https://blog.csdn.net/u013698770/article/details/52198568 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Halcon算子find_shape_models是用于在图像中查找形状模板的算子,其基本用法如下: find_shape_models(Image : ModelID, MinScore, NumMatches, Greediness, Overlap, SubPixel, Pose, AngleStart, AngleExtent, ScaleMin, ScaleMax, ScaleStep, Models, Scores, Positions, Orientations) 其中,各个参数的含义如下: - Image:输入图像。 - ModelID:形状模板的ID。 - MinScore:得分的最小阈值。 - NumMatches:匹配结果的最大数量。 - Greediness:控制贪心匹配的参数。 - Overlap:两个匹配的形状模板之间的最小重叠区域。 - SubPixel:是否使用亚像素级匹配。 - Pose:输出匹配的位姿参数。 - AngleStart:旋转角度的起始值。 - AngleExtent:旋转角度的范围。 - ScaleMin:缩放的最小值。 - ScaleMax:缩放的最大值。 - ScaleStep:缩放的步。 - Models:匹配的形状模板。 - Scores:匹配的得分。 - Positions:匹配的位置。 - Orientations:匹配的方向。 具体来说,MinScore是一个0到1之间的分数,表示匹配模板必须达到的最低得分。NumMatches是匹配结果的最大数量,Greediness控制贪心匹配的程度。Overlap是两个匹配形状之间的最小重叠面积,SubPixel控制是否使用亚像素级别的匹配。Pose是一个输出参数,返回匹配形状的位姿参数。AngleStart和AngleExtent是旋转角度的起始值和范围,ScaleMin、ScaleMax和ScaleStep是缩放的最小值、最大值和步Models、Scores、Positions和Orientations是返回的匹配结果,其中Models是匹配的形状模板,Scores是匹配的得分,Positions是匹配的位置,Orientations是匹配的方向。 使用find_shape_models算子需要先创建形状模板,具体可以参考Halcon官方文档中的create_shape_model算子。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值