VM模板匹配使用秘诀
高精度模板匹配的功能在于在一幅图像中用矩形框围住某个区域,以此区域图像特征离线建立模板,在后续待匹配图像中,如果包含上述离线建立模板的区域图像,可以定位到该区域,并输出像素坐标和角度。该算法一般用于图像中刚性物体的定位。




1.     功能介绍

    高精度模板匹配的功能在于在一幅图像中用矩形框围住某个区域,以此区域图像特征离线建立模板,在后续待匹配图像中,如果包含上述离线建立模板的区域图像,可以定位到该区域,并输出像素坐标和角度。该算法一般用于图像中刚性物体的定位。如下图所示:

(a)                                        (b)

1.1模板匹配模板图和匹配图示例(a)模板图(b)匹配图

2.     名词解释

2.1 名词解释

Noun

Description

特征点

对模板图像的描述

对称程度

指图像绕某中心旋转一定角度后与原图的相似性

边缘强度

边缘梯度幅值,被归一化到[0-255]

 

3.     参数说明

    在大多数情况下,建模和匹配只需要使用默认参数即可较快的正确匹配到结果,但是当默认参数失效时,可以通过手动调节参数来获取更快更准的结果。手动调参可以分为两个部分,一是在建模时调节参数,可以获取一个更为稳健的模型;二是在匹配中调节参数,结合建模调参可以更快更准的获取到所需结果。下面通过参数说明、建模调参、匹配调参三个方面进行详细介绍。

3.1 参数说明

   根据前述,参数分为建模参数和匹配参数。其中建模参数较少,主要有速度尺度、特征尺度和边缘阈值三个。匹配参数较多,根据使用频率将其分为基本参数和高级参数,其中基本参数使用较为频繁,主要包括匹配分数阈值、匹配尺度和角度范围等,高级参数使用较少,主要是针对特殊场景调节特定参数才会有效,如最大重叠率只有模板在匹配图中出现重叠时才有效,延拓阈值只有模板超过图像边界才有效等。因此,在调节参数时,可以按照如下流程图来进行系统性的调节参数。

3.1 参数调整流程图

主要分为建模和匹配两个过程,首先选择自动建模和自动匹配,如果效果不佳,可以使用手动调节参数。下面使用表格3.13.2罗列高精度模板匹配中的所有参数。

3.1 高精度模板匹配参数说明

高精度特征匹配

运行参数

说明

取值范围

步长

默认值

基本参数

MinScore

最小匹配分数:指特征模板与搜索图像中目标的相似程度,即相似度阈值;搜索到的目标在相似度达到该阈值时才会被检出;最大是1,表示完全契合。

[0,1]

0.01

0.5

MaxMatchNum

最大匹配个数:允许查找的最大目标个数

[1,1000]

1

1

Polarity

匹配基线:不考虑极性,考虑极性。极性表示特征图形到背景的灰度过渡情况。当查找目标的边缘极性和特征模板的极性不一致时,仍要保证目标被查找到,则匹配极性需设置成不考虑极性,如不需要,则可设置成考虑极性,能够缩短查找时间。

{不考虑极性,考虑极性}

-

考虑极性

AngleStart

起始角度:搜索的起始角度

[-180,180]

1

-180

AngleEnd

终止角度:搜索的终止角度

[-180,180]

1

180

ScaleStart

起始尺度:搜索的起始尺度

[0.1,10]

0.01

1

ScaleEnd

终止尺度:搜索的终止尺度

[0.1,10]

0.01

1

高级参数

SpotterFlag

是否考虑噪点:勾选后算法会考虑噪点特征,若特征存在噪点/异物,则评分降低

{0,1}

1

0

MaxOverlap

最大重叠率:当搜索多个目标时,两个被检出目标彼此重合时,两者匹配框所被允许的最大重叠比例。该值越大则允许两目标重叠的程度就越大。

[0,100]

1

50

ScaleXStart

X方向起始尺度:搜索的X方向起始尺度

[0.1,10]

0.01

1

ScaleXEnd

X方向终止尺度:搜索的X方向终止尺度

[0.1,10]

0.01

1

ScaleYStart

Y方向起始尺度:搜索的Y方向起始尺度

[0.1,10]

0.01

1

ScaleYEnd

Y方向终止尺度:搜索的Y方向终止尺度

[0.1,10]

0.01

1

MatchExtentRate

延拓阈值:当特征超出图像边界时,超出的特征部分相对于完整的特征的比例。此时,通过调整延拓阈值,可以找到目标。

[0,90]

1

0

SortType

匹配信息的排序类型:按分数降序排序,按角度降序排序,按X由小到大排序、按Y由小到大排序,先按X由小到大排序,再按Y由小到大排序、先按Y由小到大排序,再按X由小到大排序。匹配完成以后会在当前结果里面显示匹配到的图像信息,当匹配到的模板不止一个时则按照排序类型里面的设置进行排序。

-按分数降序排序:按照特征匹配的得分降序排列

Score

Score

-按角度降序排序:按照当前结果里面相对较低偏移降序排列。

Angle

-X由小到大排序:当前结果里面有匹配框中心x坐标,按照X坐标,由小到大排序。按Y由小到大排序的操作方式类同,不再赘述。

XY

-X由小到大,Y由小到大排序:当前结果里面有匹配框中心x坐标,按照X坐标,由小到大排序;当X坐标相同时再按照Y从小到大排序。Y由小到大,X由小到大排序的操作方式类同,不再赘述。

XYYX

TimeOut

超时控制:规定搜索时间,当时间超过超时控制所设置时间就会停止搜索,不返回任何搜索结果,单位ms0表示关闭超时控制功能。

[0,10000]

1

0

MatchThresholdFlag

匹配时的边缘阈值类型:自动阈值、模板阈值、手动阈值;

-自动阈值:根据目标图像自动决定阈值参数,自动适应;

-模板阈值:以模板的边缘阈值作为匹配阶段的边缘阈值;

-手动阈值:以用户设定的阈值作为查找的阈值参数;

{AutoModelManual}

-

Auto

MatchThreshold

匹配时的手动边缘阈值,当匹配时的边缘阈值类型为手动阈值时有效;

[0,255]

1

40

建模参数

说明

取值范围

步长

默认值

基本参数

PyramidScaleFlag

尺度模式:自动/手动。原则上自动模式能够满足需求则不进行调节,自动模式不能满足要求再切换至手动模式

{自动、手动}

-

自动

PyramidScaleFine

特征尺度:提取特征的精细程度。当取值为1时,特征最精细,一般调节后会使边缘轮廓点数量发生比较大的变化。

[1,20]

0.1

3

PyramidScaleRough

速度尺度:该值越大,表示金字塔层数越深,最小图像分辨率越小,相应速度越快;

[1,20]

0.1

3

EdgeThresholdFlag

边缘阈值类型:自动/手动

{自动、手动}

-

自动

EdgeThreshold

边缘阈值:该值表示边缘对比度大小,主要与特征点和周围背景的灰度值差有关;该值越大被淘汰的特征点越多;

[0,255]

1

40

 

3.2 建模中的参数调节

      在建模时经常使用的参数为速度/特征尺度和掩膜,只有在选择的模板特征对比度不高时才会考虑使用边缘阈值。

3.2.1       案例一:关于速度/特征尺度的设置

其中尺度的含义为原图下采样的步长,尺度值越大,下采样的幅度越大,图像的分辨率相对越低,图像细节越少。PyramidScaleFinePyramidScaleRough分别表示特征尺度和速度尺度,其中速度尺度用于初搜模板目标,特征尺度用于对初搜的结果进行位置修正。因此,当速度尺度值越大,搜索速度越快,但同时搜索出错的概率也会越大。特征尺度的值越大,修正速度越快,但同时搜索精度随之下降。大多数情况下,可以将PyramidScaleFlag设置为1,即自动模式。在这种模式下算法会根据图像特点自动计算尺度参数,无需调节。

建模时与尺度相关的参数为PyramidScaleFlagPyramidScaleFinePyramidScaleRough。需要的注意的是:只有把PyramidScaleFlag==0PyramidScaleFine/PyramidScaleRough 设置的值才可以生效。即PyramidScaleFlag表示手动设置尺度参数的开关,当值等于零时表示手动设置尺度参数。

该参数需要调节的情况一般比较固定,当使用自动模式出现搜索结果与实际目标位置偏差较大,此时需要手动降低粗糙和特征尺度。当出现耗时较长,搜索结果精准的情况下,此时可以通过手动提高粗糙和特征尺度。

一种比较典型的场景为模板的对称性较高,与整个模板相比,只有较小的图像特征可以表征模板角度。需要注意的是,我们在实际应用时应该尽量避免高对称型的图像作为模板,但是如果限于实际需求,必须使用此类模板进行建模,依然可以通过手动设置尺度参数的方式来获取准确结果。如下图所示,该物品为一个大圆加上一个“尾巴”,正常情况下我们选ROI_1作为模板区域进行建模,因为相对于ROI_2ROI_1的边缘在方向上表现出相异性,而ROI_2则是对称性较高,在实际匹配时有可能会因为大圆的边缘点较多,而尾巴的边缘点较少导致角度特征不足,从而使得匹配角度出错。

3.2 颗粒度建模示例

但是如果限于实际要求,必须选择ROI_2区域进行建模,如果使用默认参数建模,发现匹配时出现了匹配结果中角度出错的情况,需要重新建模,且在建模时降低速度尺度值的大小。

3.2.2       案例二:关于边缘阈值设置

建模时与边缘阈值相关的参数为EdgeThresholdFlagEdgeThreshold。与上述尺度问题相似,EdgeThresholdFlag表示手动/自动设置边缘阈值的开关,当其值为0时,表示手动设置,当其值为1时表示自动设置。只有把EdgeThresholdFlag设置为0时,EdgeThreshold所设置的值才可以生效。一般情况下我们将该参数设置为自动模式,只有当模板中的边缘特征强度过低时,使用自动参数时会将模板中重要的边缘特征忽略掉,从而导致在匹配时无法匹配到模板目标。此时可以通过手动设置一个比较低的边缘阈值来凸显模板图中的边缘特征。如下图所示: