31.2、几何定位---不支持缩放(1)
⑶、AngleStart, AngleExtent, AngleStep 2
1、clear_shape_model( : : ModelID: ) 13
2、clear_all_shape_models( : : : ) 14
- 创建模板
1、create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast,
Template:输入要创建模板的图像
NumLevels:输入最大图像金字塔级别,默认值为'auto'
AngleStart:输入模板旋转的起始角度(单位:弧度)
AngleExtent:输入模板旋转角度的范围(单位:弧度),等于最大旋转角度于最小旋转角度的的差值的绝对值。假
设旋转角度为-10到+10,那么AngleStar = rad(-10),AngleExtent = rad(+10) - (-10)
AngleStep:输入角度步长。默认值为'auto'
Optimization:输入模板优化和模板创建的方法,默认值为'auto'
Metric:极性。默认值'use_polarity'
Contrast:模板图像的模板边缘对比度的阈值或滞后阈值,以及可选的最小组件(最小边缘轮廓信息),默认值'auto'
MinContrast:搜索图像边缘的最小对比度。默认值为'auto'
ModelID:模板句柄,用于算子find_shape_model
⑴、Template
算子create_shape_model根据输入图像Template创建模板,用于形状匹配。模板的ROI通过Template的定义
域传递,即如果对全图创建模板,直接传递原图,如果对非全图创建模板,需要用reduce_domain算子来减少
定义域。模板图像Template的定义域(区域)的质心(即模板区域的质心)用作模板的原点(参考点),可以
使用算子set_shape_model_origin设置不同的原点。
⑶、AngleStart, AngleExtent, AngleStep
①定义了模板旋转角度的范围,参数AngleStep定义了在旋转角度范围类的步长。如果在find_shape_model
算子中没有指定亚像素精度,这个参数制定了find_shape_model的角度所达到的精度。参数AngleSetp的选择基于目标的大小。如果模板太小,不能产生许多不同离散角度的图像,因此对于较小的模板,AngleStep应该设置的比较大。由于find_shape_model算子中的角度可以使用亚像素,一个直径小于200个像素可以选择AngleStep>=1。如果选择AngleStep = 'auto',算子create_shape_model将会基于模板大小自定义一个合适的角度步长。可以使用get_shape_model_params来查询自动计算出来的AngleStep。如果AngleExtent不是AngleStep的整数倍,将会相应的修改AngleStep。
②如果选择模板的完整预生成(complete pregeneration)模式,不同角度的模板将预生成并保存到内存中。
用来存储模板的内存与角度步长的数量(等于AngleExtent除以AngleStep)和模板的点数成正比。因此,如果AngleStep太小或是AngleExtent太大,将会出现该模板不再合适(虚拟)内存的情况。在这种情况下,应该加大角度步长AngleStep或较少角度范围AngleExtent。在任何情况下,希望模板是完全合适主存储器的,因为这避免了操作系统的内存分页,较少模板匹配时间。
③如果没有选择完成预生成模式(complete pregeneration),基于金字塔的每一层参考姿势创建模板。这
样在使用find_shape_model算子时,该模板在运行时必须转换为不同的角度和尺度。正因为如此,模板匹配可能需要更多时间。
①参数Optimization设置为不等于'auto'的数字,可以有效的减少模板(边缘)点数(对于对于特别大的模板
尤为有用)。如果Optimization= 'none' ,这要存储所有的模板点。在其他情况下,按照Optimization的值来减少模板点数。如果模板点数减少了,需要在find_shape_model算在中将参数Greediness设置一个比较小的值,比如0.7或0.8,。对于比较小的模板,减少模板点数并不能提高搜索速度,因为这种情况下必须检查更多的潜在的模板实例。
②如果Optimization设置为'auto',算子create_shape_model自动确定较少模板点数。
③Optimization有可选的第二个值。Optimization第二个值定义了模板是否进行完整预定义生成是通过选择
④还应该指出,不能指望两个模板返回完全相同的结果,因为在运行时变换模板一定会导致变换模板和预生
①参数Metric定义了在图像中匹配模板的条件。如果Metric = 'use_polarity',图像中的目标必须与模板具有一
样的对比度。例如,如果模板是一个亮的目标在一个暗的背景上,那么只有那些比背景亮的目标才能被
③如果Metric = 'ignore_local_polarity',及时局部对比度改变也能走到模板。例如当目标包含一部分中等灰度,
上面三个Metric仅仅使用与单通道图像。如果是多通道图像作为模板或搜索图像,仅仅第一通道被使用(并且不会返回错误信息)
④如果Metric = 'ignore_color_polarity',及时局部颜色对比度变化也能找到模板。例如,当目标的部分区域颜
①参数Contrast决定模板的对比度。对比度是用来测量目标与背景之间和目标不同部分之间局部的灰度
差异Contrast的选择应该确保用于创建模板的主要特征。Contrast可以是两个数值,这时模板使用近似edges_image算子中的滞后阈值方式来进行分割。这里的第一个数值是比较低的阈值,第二个是比较高的阈值。较低的阈值,能够检测出的边线越多,结果也就越容易受到图片噪声的影响,并且越容易从图像中挑出不相关的特性。与此相反,一个高的阈值将会遗失细的或者短的线段。为了取得比较好的结果,这里使用了双阈值(迟滞阈值)的方法,综合它们结果,取各其优点去其缺点。方法如下:首先使用一个高阈值去寻找边线开始的地方。一旦找到了一个开始点,我们在图像上逐点跟踪边缘路径,当大于低阈值数值时一直纪录边缘位置,直到数值小于低阈值数值之后才停止纪录。这种方法假设边缘是连续的界线,并且我们能够跟踪前面所看到的边缘的模糊部分,而不会将图像中的噪声点标记为边缘。
②Contrast有第三个可选参数,这个数值决定了选择重要模板边缘最小长度。即如果按照指定的对比度查
找出来的边缘长度小于这个参数,则这个边缘边则被忽略。
③三个参数的参数设置方式(具体设置方式不用深究,在匹配助手中调好后会自动插入):
▲如果Contrast设置为'auto',则create_shape_model会自动确定上面三个阈值。
▲如果要设置第三个可选参数(模板最小长度),而不是用迟滞阈值(只使用一个阈值)。在
Contrast中必须指定三个数值,前面两个数值设置为相等即可。[20,20,5]
▲仅仅自动设置对比度('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之前使用
①MinContras决定模板的最小对比度,即这个参数从图像中吧模板和噪声分离。因此,MinContras一个
②如果要在一幅对比度非常低的图像中匹配模板,MinContras要设置成一个很小的值。
③如果在噪声严重的图像中匹配模板,为了保证算在find_shape_model提取的模板的位置和角度的鲁棒性和
④如果MinContras设置为'auto',则create_shape_model根 据模板图像自动确定。
⑤如果匹配图像中的噪声和模板中的噪声相类似,自动确定MinContras才有意义。
⑥此外,在一些情况下,为了增大(针对被遮挡的物体)鲁棒性,建议增大自动确定的值。自动计算的最小
对比度可以使用get_shape_model_params算子来查看。
2、create_shape_model_xld(Contours : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, MinContrast :
功能:根据输入的XLD创建几何形状模板
Contours:输入XLD轮廓
NumLevels:输入最大图像金字塔级别,默认值为'auto'
AngleStart:输入模板旋转的起始角度(单位:弧度)
AngleExtent:输入模板旋转角度的范围(单位:弧度),等于最大旋转角度于最小旋转角度的的差值的绝对值。假
设旋转角度为-10到+10,那么AngleStar = rad(-10),AngleExtent = rad(+10) - (-10)
AngleStep:输入角度步长。默认值为'auto'
Optimization:输入模板优化和模板创建的方法,默认值为'auto'
Metric:极性。默认值'use_polarity'
MinContrast:搜索图像边缘的最小对比度。默认值为5
ModelID:模板句柄,用于算子find_shape_model
(1)、create_shape_model_xld创建模板算子和 create_shape_model的参数类似,create_shape_model_xld比
create_shape_model少了Contrast,因为输入的轮廓(xld-contours)是没有对比度的。其余参数描述看
create_shape_model
(2)、如果Contours提供了属性'edge_direction'(定义了边缘极性),Metric参数的值只能选'use_polarity'和
'ignore_global_polarity'。创建的轮廓具有该属性,例如使用算子edges_sub_pix(例如参数模式设置为'canny')创建的边缘。否则,可以通过set_shape_model_metric(这个算子确定图像边缘极性)来选择两个极性。
注:
与算子create_shape_model相比,算子create_shape_model_xld不能指定模板组件最小尺寸(最小边缘长度)。为了消除模板的最小组件,在调用create_shape_model_xld前,应该先调用select_contours_xld,消除短的轮廓。