31.2、几何定位---不支持缩放(1)

一、    创建模板    1

1create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast,    1

⑴、Template    1

⑵、NumLevels    1

⑶、AngleStart, AngleExtent, AngleStep    2

⑷、Optimization    3

⑸、Metric    4

⑹、Contrast    5

⑺、MinContrast    7

2create_shape_model_xld(Contours : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, MinContrast :    7

二、    查找模板    8

1find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel,    8

(1)AngleStart, AngleExtent    8

(2)MinScore    9

(3)NumMatches    9

(4)MaxOverlap    9

(5)SubPixel    9

(6)NumLevels    11

(7)Greediness    11

(8)Row, Column, Angle    12

(9)Score    12

2find_shape_models(Image : : ModelIDs, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel,    12

3、出边界计算方式    13

4、设置超时    13

三、    释放模板资源    13

1clear_shape_model( : : ModelID: )    13

2clear_all_shape_models( : : : )    14

四、    参数关系优化匹配    14

 

  1. 创建模板

1、create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast,

                    MinContrast : ModelID)

    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设置不同的原点。

    ⑵、NumLevels

模板创建使用了多图像的金字塔级别,保存在内存中。如果选择了完整预创建模式,在每一级别生成多旋转角度的模板,NumLevels确定金字塔的级别,级别越大,匹配使用的时间就越少。另外必须保证最高金字塔的图像具有足够的信息(信息指的是模板的边缘点)(至少四个点),可以通过算子inspect_shape_model算子的输出结果来查看。如果最高层金字塔没有足够的信息,算法内部会自动较少金字塔的级别,知道找到足够点为止。如果最底层金字塔的信息太少,算子就会报错。如果NumLevels设置为'auto'(或0),create_shape_model会自动计算金字塔的级别(向后兼容,直到找到合适的边缘点为止)。如果金字塔的级别太大,模板不容易匹配出来,这时需要将find_shape_model算子中的MinScore和Greediness参数设置低一些。如果金字塔的级别太小,find_shape_model算子找到的模板时间会增加。这种情况下,可以使用inspect_shape_model输出结果来选择一个合适的金字塔级别、

    ⑶、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

参数Optimization设置为不等于'auto'的数字,可以有效的减少模板(边缘)点数(对于对于特别大的模板

尤为有用)。如果Optimization= 'none' ,这要存储所有的模板点。在其他情况下,按照Optimization的值来减少模板点数。如果模板点数减少了,需要在find_shape_model算在中将参数Greediness设置一个比较小的值,比如0.7或0.8,。对于比较小的模板,减少模板点数并不能提高搜索速度,因为这种情况下必须检查更多的潜在的模板实例。

如果Optimization设置为'auto',算子create_shape_model自动确定较少模板点数。

Optimization有可选的第二个值。Optimization第二个值定义了模板是否进行完整预定义生成是通过选择

'pregeneration'或者'no_ pregeneration'来设置。可以通过set_system'pregenerate_shape_models' , 'true'/'false')默认值为'no_ pregeneration'即没有完整预定义生成。模板完整预定义生成通常会导致比较低的运行时间,因为模板不需要在运行时(find_shape_model)进行转换。但是在这种情况下,创建模板需要很大的内存和时间。

还应该指出,不能指望两个模板返回完全相同的结果,因为在运行时变换模板一定会导致变换模板和预生

成的变换模板之间产生不同的内部数据。比如,如果模板没有完整预生成,在find_shape_model算子中通常会返回一个较低的scores,这可能需要将MinScore设置成一个较低的值(比进行了完整预生成的模板的MinScore低)。此外,在两个模板中的差值算法获得的姿位可能略有不同。如果希望是高精度,应该使用最小二乘调整得到的模板位姿。

    ⑸、Metric

        参数Metric定义了在图像中匹配模板的条件。如果Metric = 'use_polarity',图像中的目标必须与模板具有一

            样的对比度。例如,如果模板是一个亮的目标在一个暗的背景上,那么只有那些比背景亮的目标才能被

            找到。

如果Metric = 'ignore_global_polarity',在两者(目标和背景)对比度完全相反也能找到目标。在上面例子中,如果目标是比背景暗的也能找到。find_shape_model在这种情况下运行时间稍微增加。

如果Metric = 'ignore_local_polarity',及时局部对比度改变也能走到模板。例如当目标包含一部分中等灰度,

并且其中部分是比较亮部分和比较暗部分,使用这种模式是非常有用的。。find_shape_model在这种情况下运行时间显著增加。最好的方法是使用create_shape_model创建几个反映目标可能的对比度变化的模板,然后同时使用find_shape_model去匹配它们。

上面三个Metric仅仅使用与单通道图像。如果是多通道图像作为模板或搜索图像,仅仅第一通道被使用(并且不会返回错误信息)

如果Metric = 'ignore_color_polarity',及时局部颜色对比度变化也能找到模板。例如,当目标的部分区域颜

色发生变化(从红到绿)的情况。如果不能提前知道哦目标在那一通道时可是的,这种模式非常有用。在这种情况下find_shape_model在这种情况下运行时间急剧增加。'ignore_color_polarity'可以使用于具有任意通道数目的图像中。如果使用于单通道,它的效果和'ignore_local_polarity'是完全相同的。需要注意的是,如果Metric = 'ignore_color_polarity'create_shape_model创建的模板的通道数目和find_shape_model中的图像通道数目可以使不同的。例如,可以使用综合生成的单通道图像创建模板。另外,这些通道不需要时通过光谱细分(像RGB图像)的,这些通道还可以包括具有不同方向照亮同一个目标所获得的图像。

    ⑹、Contrast

    参数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],最小尺寸自动设置,迟滞阈值分别被设置为2030.

有时候对比度阈值自动设置的结果并不满意,例如,由于一些具体应用的原因当某一个模板组件被包含或

是被抑制时,目标包含几种不同的对比度是,手动设置的效果会更好。因此对比度阈值可以使用determine_shape_model_params算子自动确定,也可以在调用create_shape_model之前使用

⑺、MinContrast

        MinContras决定模板的最小对比度,即这个参数从图像中吧模板和噪声分离。因此,MinContras一个

好的取值选择是:图像中的噪声灰度值的变换范围。路噪声灰度值的波动范围是10个灰度级,那么MinContras应该设置为10.如果模板图像和搜索图像时多通道图像,MinContra就应该设置为10的开立方。

MinContras必须必Contras小。

如果要在一幅对比度非常低的图像中匹配模板,MinContras要设置成一个很小的值。

如果在噪声严重的图像中匹配模板,为了保证算在find_shape_model提取的模板的位置和角度的鲁棒性和

准确性,MinContras应该比噪声灰度值的范围要稍大。

如果MinContras设置为'auto',则create_shape_model 据模板图像自动确定。

如果匹配图像中的噪声和模板中的噪声相类似,自动确定MinContras才有意义。

此外,在一些情况下,为了增大(针对被遮挡的物体)鲁棒性,建议增大自动确定的值。自动计算的最小

    对比度可以使用get_shape_model_params算子来查看。

2create_shape_model_xld(Contours : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, MinContrast :

                        ModelID)

    功能:根据输入的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,消除短的轮廓。

posted @ 2022-05-10 22:59  ihh2021  阅读(298)  评论(0编辑  收藏  举报