Halcon之算子create_shape_model和find_shape_model的总结

Halcon之算子create_shape_model和find_shape_model的总结

在做课题时用到了两个比较关键的算子:create_shape_model和find_shape_model,通过查阅资料和自己在课题中的理解做出了一些总结:

1、create_shape_model

create_shape_model(Template :: NumLevelsAngleStartAngleExtentAngleStepOptimizationMetricContrastMinContrast : ModelID)

Template :reduce_domain后的模板图像先确定一个ROI区域,然后通过算子reduce_domain得到这个区域

NumLevels :金字塔的层数,可设为“auto”或0—10的整数该值越大,匹配使用的时间越小。如果金字塔层数过大会导致模板不容易识别出来,这时需要将算子find_shape_model中的MinScore和Greediness参数设置的低一些。如果金字塔层数太小则会导致模板匹配时间增加。可以先用算子inspect_shape_model的输出结果来选择一个较好的金字塔层数。如果金字塔层数设为auto,算法会自动计算金字塔的层数,可以通过算子get_shape_model_params查看金字塔的层数

AngleStart :模板旋转的起始角度

AngleExtent:模板旋转角度范围,>=0参数AngleStart、AngleExtent定义了模板可能发生旋转的范围。在后续算子find_shape_model去发现模板时,只能在这个范围内去匹配

AngleStep:旋转角度的步长, >=0 and <=pi/16该参数定义了旋转角度范围内的步长,对于较小的模板图像AngleStep应该设置的比较大。如果AngleStep='auto',算子create_shape_model将会基于模板的大小自动定义一个合适的角度步长.。自动计算出来的AngleStep可以使用get_shape_model_params函数查看

Optimization:设置模板优化和模板创建方法如果Optimization= 'none', 所有的模型点数将要存储;如果Optimization设置为'auto', create_shape_model自动确定模型的点数;对于特别大的模板图像,将参数Optimization设置为不同于'none'的其他数值是非常有用的。参数Optimization的第二个值定义了模型是否进行预处理,是通过选择'pregeneration'或者'no_pregeneration'来设置的。如果不使用第二个值(例如:仅仅设置了第一个值), 默认的是系统中的设置,是通过set_system('pregenerate _shape_models',...)来设置的

Metric:匹配方法设置如果Metric= 'use_polarity',图像中的目标必须和模型具有一样的对比度。例如,如果模型是一个亮的目标在一个暗的背景上,那么仅仅那些比背景亮的目标可以找到。如果Metric= 'ignore_global_polarity',在两者对比度完全相反时也能找到目标。例如,在刚刚的例子中,如果目标是比背景暗的也能将目标找到。算子ind_shape_model的运行时间在这种情况下将会略微增加。如果Metric= 'ignore_local_polarity', 即使局部对比度改变也能找到模型。例如,当目标包含一部分中等灰度,并且其中部分比较亮部分比较暗时,采用这种模式是非常有用的。由于这种模式下算子find_shape_model的运行时间显著增加,最好的方法是使用create_shape_model创建几个反映目标可能的对比度变化的模型,同时使用find_shape_models去匹配他们。如果是多通道图像作为模板图像或搜索图像,仅仅第一个通道被使用。如果Metric='ignore_color_polarity', 即使颜色对比度局部变化也能找到模型。例如,当目标的部分区域颜色发生变化(e.g.从红到绿)的情况。如果不能提前知道目标在哪一个通道是可见的这种模式是非常有用的。'ignore_color_polarity'可以使用于具有任意通道数目的图像中。如果在单通道图像中使用,效果和'ignore_local_polarity'是完全相同的

Contrast:设置对比度参数Contras决定着模型点的对比度对比度是用来测量目标与背景之间和目标不同部分之间局部的灰度值差异。Contrast也可以是两个数值,这时模板使用近似edges_image函数中滞后阈值的算法进行分割其中,第一个数值是比较低的阈值,第二个数值是比较高的阈值。Contrast也可以有第三个数值,这个数值是在基于组件尺寸选择重要模型组件时所设置的阈值。如果一个小的模型组件被抑制,但是不使用滞后阈值,那么在Contrast中必须指定三个数值,在这种情况下前两个数值设置成相同的数值。这个参数的设置可以在inspect_shape_model函数中查看效果。如果Contrast设置为'auto',create_shape_model将会自动确定三个上面描述的数值,或者仅仅自动设置对比度('auto_contrast'),滞后阈值('auto_contrast_hyst')或是最小尺寸('auto_min_size')中一个。其他没有自动设置的数值可以按照上面的格式再进行设置。允许各种组合,例如:如果设置 ['auto_contrast','auto_min_size'],对比度和最小尺寸自动确定;如果设置 ['auto_min_size',20,30],最小尺寸会自动设定,而滞后阈值被设为20和30。有时候可能对比度阈值自动设置的结果是不满意的,可以手动设置这些参数。对比度阈值可以使用determine_shape_model_params函数自动确定,也可以在调用create_shape_model之前使用inspect_shape_mode函数检查效果

MinContrast:设置最小对比度参数MinContrast用来确定在执行算子find_shape_model进行识别时模型的哪一个对比度必须存在如果要在对比度较低的图像中识别模板,MinContrast必须设置为一个相对较小的数值。MinContrast必须小于Contrast。如果MinContrast设置为'auto',最小对比度会基于模板图像中的噪声自动定义。使用get_shape_model_params函数可以查询自动计算的最小对比度

 ModelID:输出模板句柄

2、find_shape_model

find_shape_model(ImageModelIDAngleStartAngleExtentMinScoreNumMatchesMaxOverlapSubPixelNumLevelsGreediness : Row,ColumnAngleScore)

Image:要搜索的图像

ModelID:算子create_shape_model生成的模板

AngleStart:搜索时的起始角度

AngleExtent:搜索时的角度范围,必须与创建模板时的范围有交集如果创建模板时,AngleStart=-20°、AngleExtent=40°,在搜索模板函数find_shape_model中设置AngleStart=350°、AngleExtent=20°,尽管角度模360°后是重叠的,还是会找不到模板的。为了找到模板,必须将AngleStart=350°改为AngleStart=-10°

MinScore:最小匹配值,输出的Score(匹配的得分)大于该值MinScore设置的越大,搜索的就越快。如果模板在图像中没有被遮挡,MinScore可以设置为0.8这么高甚至0.9

NumMatches:定义了在图像上找到模板的最大的个数

MaxOverlap:当找到的目标存在重叠时,且重叠大于该值时选择一个好的输出如果MaxOverlap=0, 找到的目标区域不能存在重叠, 如果MaxOverla p=1,所有找到的目标区域都要返回

SubPixel:计算精度的设置,五种模式,大多情况选择2,3模式最小二乘调整的模式有:'least_squares', 'least_squares_high', 和'least_squares_very_high'。如果希望设置最小二乘就选择'least_squares', 因为这样能确保运行时间和精度的权衡。通常SubPixel设置为'interpolation'

NumLevels:搜索时金字塔的层数NumLevels可以包含第二个参数,这个参数定义了找到匹配模板的最低金字塔层数。NumLevels=[4,2]表示匹配在第四层金字塔开始,在第二层金字塔找到匹配(最低的设为1)。可以使用这种方法降低匹配的运行时间,但是这种模式下位置精度是比正常模式下低的,所谓正常模式是在金字塔最底层匹配。因此如果需要较高的精度,应该设置SubPixel至少为'least_squares'。如果金字塔最底层设置的过大,可能不会达到期望的精度,或者找到一个不正确的匹配区域。在这种情况下最低金字塔层数应设为最小值

Greediness:贪婪度,一般设为0.9。越高速度快,但容易出现找不到的情况()

Row,ColumnAngleScore:输出匹配位置的行和列坐标、角度、得分

猜你喜欢

转载自blog.csdn.net/Kevin_Sun777/article/details/108936080