Shape模板创建
create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID)
参数说明:
NumLevels: 金字塔层数,可以理解为金字塔最顶层最小,储存的信息最少,相对的读取速度就越快。(金字塔)金字塔层数太大了的话,搜索到的物体的信息就会很少,可以适当的减小金字塔层数,如果金字塔层数处于合适的状态,但是匹配速度还比较慢的话,可以试一试增大金字塔数,并且进行图像增强、平滑和去噪等处理。
AngleStart,AngleExtent,AngleStep: 对于这三个参数并且对于shape来说可以设置成推荐之或者’auto’,因为shape匹配本身就很快,这三个参数的具体说法会在下一篇文章互相关中具体介绍。
Optimization: 模板点储存,有两个参数,第一个是是否减少模板点数,第二个是是否进行预处理。
参数一:【 ‘auto’, ‘none’, ‘point_reduction_high’, ‘point_reduction_low’,
‘point_reduction_medium’】'none’就是把所有的点都存起来,和金字塔差不多,全点储存的话就导致运行的比较慢,占用更大的内存,而相对的较少的储存的话匹配分值可能会比较低。
参数二:【‘pregeneration’,‘no_pregeneration’ 】如果不使用第二个值(例如:仅仅设置了第一个值), 默认的是系统中的设置,是通过set_system (‘pregenerate _shape_models’…)来设置的,对于默认值是 (‘pregenerate_shape_models’ =‘false’), 模型没有进行预处理. 模型的预处理设置通常会导致比较低的运行时间。【一般不会用pregeneration,占内存太多】。
Metric: 定义了在图像中匹配模板的条件。
如果Metric= ‘use_ polarity’图像中的目标必须和模型具有一样的对比度。例如,如果模型是一个亮的目标在一个暗的背景上,那么仅仅那些比背景亮的目标可以找到。
如果Metric= ‘ignore_global_polarity’,在两者对比度完全相反时也能找到目标。在上面的例子中,如果目标是比背景暗的也能将目标找到。(明暗不同)find_shape_model函数的运行时间在这种情况下将会略微增加。
如果Metric= ignore_local_polarity’,(对比度不同) 即使局部对比度改变也能找到模型。例如,当目标包含一部分中等灰度,并且其中部分比较亮部分比较暗时,这种模式是非常有用的。由于这种模式下find_shape_model函数的运行时间显著增加,最好的方法是使用create_shape_model创建几个反映目标可能的对比度变化的模型,同时使用find_shape_models去匹配它们。上
面三个metrics仅仅适用于单通道图像。如果是多通道图像作为模板图像或搜索图像,仅仅第一个通道被使用。如果Metric=‘ignore_color_polarity’, 即使颜色对比度局部变化也能找到模型。例如,当目标的部分区域颜色发生变化(e.g.从红到绿)的情况。如果不能提前知道目标在哪一个通道是可见的,这种模式将非常有用。在这种情况下find_shape_model函数的运行时间也会急剧增。‘ignore_color_polarity’可以用于具有任意通道数目的图像中。如果使用于单通道图像,他的效果和’ignore_local_polarity’是完全相同的。【取值 :‘ignore_color_polarity’, ‘ignore_global_polarity’, ‘ignore_local_polarity’, ‘use_polarity’】。
Contrast : 决定着模型点的对比度。环境对比不是很高的情况下可以设置成自动的。
由于一些具体应用的原因当某一个模型组件是被包含或是被抑制时,或是目标包含几种不同的对比度时,手动设置这些参数效果会更好。因此对比度阈值可以使用determine_shape_model_params函数自动确定,也可以在调用create_shape_model之前使用inspect_shape_mode函数检查效果。
MinContrast : 模型搜索的最小对比度,小于该对比度不考虑。MinConstrast将模板从图像的噪声中分离出来,如果灰度值的波动范围是10,则MinConstrast应当设为10。
find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels,
Greediness : Row, Column, Angle, Score)
参数说明:
AngleStart, AngleExtent: 可以理解成给一个image从中间分成四个象限,一般AE是AS绝对值的二倍,也可以不是,但是要保证一般是整数倍。AS就是0-360对应的象限里面的的角度。举个例子AS设置成-40,AE设置成80,就是图像在第四象限-40到第一象限的40进项搜索匹配。也可以设置成auto。
MinScore: 定义模板匹配时至少有个什么样的质量系数才算是在图像中找到模板。MinScore设置的越大,搜索的就越快。如果模板在图像中没有被遮挡,MinScore可以设置为0.8这么高甚至0.9。
NumMatches: 定义了在图像上找到模板的最大的个数。如果匹配时的质量系数大于MinScore的目标个数多于NumMatches,仅仅返回质量系数最好的NumMatches个目标位置。如果找的匹配目标不足NumMatches,那么就只返回找到的这几个。参数MinScore优于NumMatches。
MaxOverlap: 如果模型具有对称性,会在搜索图像的同一位置和不同角度上找到多个与目标匹配的区域。参数MaxOverlap是0到1之间的,定义了找到的两个目标区域最多重叠的系数,以便于把他们作为两个不同的目标区域分别返回。如果找到的两个目标区域彼此重叠并且大于MaxOverlap,仅仅返回效果最好的一个。重叠的计算方法是基于找到的目标区域的任意方向的最小外接矩形(看smallest_rectangle2)。如果MaxOverlap=0, 找到的目标区域不能存在重叠, 如果MaxOverla p=1,所有找到的目标区域都要返回。(对称的话就是0.5,只查一半)
SubPixel: 确定找到的目标是否使用亚像素精度提取。如果SubPixel设置为’none’(或者’false’ 背景兼容),模型的位置仅仅是一个像素精度和在create_shape_model中定义的角度分辨率。如果SubPixel设置为’interpolation’(或’true’),位置和角度都是亚像素精度的。在这种模式下模型的位置是在质量系数函数中插入的,这种模式几乎不花费计算时间,并且能达到足够高的精度,被广泛使用。
NumLevels: 搜索时使用的金字塔层数,如有必要,层数截成创建模型时的范围。当NumLevels=0时,使用创建模板时的金字塔级别。
Greediness: 确定在搜索时的“贪婪程度”。如果Greediness=0,使用一个安全的搜索启发式,只要模板在图像中存在就一定能找到模板,然而这种方式下搜索是相对浪费时间的。如果Greediness=1,使用不安全的搜索启发式,这样即使模板存在于图像中,也有可能找不到模板,但只是少数情况。如果设置Greediness=0.9,在几乎所有的情况下,总能找到模型的匹配。
参考超级无敌大泡泡的halcon模板匹配之shape/ncc模板匹配参数详解
原文链接附上:https://blog.csdn.net/baidu_36363174/article/details/105846684