模板匹配包含快速匹配、高精度匹配、轮廓匹配和灰度匹配四个模块。可通过该四个模块选取特定的图像特征作为模板,并预设参数确定搜索空间,在图像中搜索与模板相似的目标,实现定位、计数和判断有无等业务需求。
本章节包含如下内容:
快速匹配、高精度匹配、轮廓匹配和灰度匹配模块都基于模板匹配算法处理图像数据。
强烈建议在进行模块配置前,了解模块原理,进而更好地理解模块相关配置与操作。
根据匹配所依据的数据差异,模板匹配算法分为“基于边缘点”和“基于灰度值”两种类型。
快速匹配、高精度匹配、和轮廓匹配模块的特征匹配,基于边缘轮廓点。
基于边缘点的模板匹配算法通常包含如下2大数据处理步骤:
基于特定的图像特征创建模板。
通过模板在图像中搜索与模板匹配的目标。
算法工作流的详情见下图:
基于边缘点的模板匹配的基础原理可用如下公式表示:
其中:
x:模板在x轴的平移量
y:模板在y轴的平移量
θ:模板的旋转角度
scaleX:模板在x轴的伸缩尺度
scaleY:模板在y轴的伸缩尺度
在上述五个参数的共同作用下,模板会缩放、旋转并移动至待匹配图像的位置。
此时,待匹配图像的特征为Fs,模板特征为Fm,而函数S=(Fm , Fs)则度量了模板特征与待匹配图像特征的相似度得分。算法通过每一组特定的(x , y , θ , scaleX , scaleY)均能计算出一个相似度得分。遍历(x , y , θ , scaleX,scaleY)的所有取值后,算法会取相似度分数达到阈值且最高的n个结果作为输出。
“n”即为下文参数配置中提及的最大匹配数量。
Fm:模板图像中的显著边缘轮廓点(绿色的点)
Fs:匹配图像对应区域的显著边缘轮廓点
S=(Fm , Fs):模板上的特征轮廓点经过特定的拉伸、旋转、平移后,与目标图像中的边缘轮廓点相匹配的比例。比例越高,相似度得分越高
以下表的图像为例,高相似度图像中,所有的模板特征点均在匹配目标中找到了对应边缘特征点,故其得分为1分;较低相似度图像中,模板特征点中约有30%未在匹配目标中找到对应边缘特征点,故其得分为0.71分。
模板图像 |
高相似度图像(得分:1) |
较低相似度图像(得分:0.71) |
---|---|---|
![]() |
![]() |
![]() |
为了加速匹配过程,算法会对待匹配的图像做如下处理:
对待匹配图像建立图像金字塔。
在图像金字塔中,至顶向下逐层进行目标搜索,直至找到满足条件的目标。
该处理过程的示例见下图。
上图展示了在含有R和P字样的图像中搜索字母R的过程:
建立图像金字塔。
在图像金字塔的顶层找到了R和P这两个候选目标。
在图像金字塔的下一层中对R和P进行进一步的判定并调整其位姿。
删除错误的候选目标P。
在图像金字塔的底层对候选结果R进行最终的位姿调整,并输出查找结果。
模板匹配算法在创建模板的过程中,存在两个与图像金字塔相关的参数—速度尺度和特征尺度。
灰度匹配模块的特征匹配基于目标在图像中的灰度值分布。
基于灰度值的模板匹配的算法工作流与基于边缘点的基本相同。简言之,即计算模板图像所有可能的旋转平移结果与待匹配图像的相似性,取相似度分数达到阈值且最高的n个结果作为输出。
不同之处在于两者提取的特征。基于灰度值时,以模板图像和待匹配图像的灰度值分布作为特征,使用“归一化互相关性”(Normalized Cross Correlation,NCC)来评价两者灰度值分布的相似性。
r 和c:分别代表模板图像的平移量,等同于上文基于轮廓点中的x和y
t:模板图像
i:待匹配图像
mt:mi(r, c):模板图像的灰度均值
mi(r, c):待匹配图像特定区域的灰度均值
s2t:模板图像的灰度值方差
s2i(r, c):待匹配图像在特定区域的灰度值方差
如果当前模板图像和待匹配图像某个局部的灰度值线性正相关(两者灰度分布的趋势相同,仅存在整体上的数值偏移或者存在某种比例关系),则NCC值为1;
如果线性无关,则NCC值为0;
如果线性负相关,则NCC值为-1。
基于灰度值的模板匹配也同样借助图像金字塔加速匹配过程,同样具有两个与图像金字塔相关的参数—金字塔层数和匹配结束层,但参数定义有所差异。
快速匹配、高精度匹配、轮廓匹配和灰度匹配这四个模块的选用,取决于具体的业务场景。
模块 |
特点 |
适用场景 |
---|---|---|
建模时提取物体在图像中的灰度值分布 |
图像中的待匹配目标无明显且稳定的轮廓点,但灰度值分布相对稳定。例如对比度较低和受随机噪声干扰的场景 |
|
建模时提取物体的粗糙轮廓,定位精度较低。对存在形变的目标,匹配效果更好 |
例如有无判断、方向判断、产品计数等场景 |
|
建模时提取物体的较精细轮廓,匹配效率与定位精度均较好 |
说明:
轮廓匹配可认为是高精度匹配的升级版。相比高精度匹配和快速匹配,轮廓匹配兼具匹配效率与定位精度。大部分应用场景下推荐使用轮廓匹配。 |
|
建模时提取物体的精细轮廓,定位精度较高,但匹配效率较低 |
|
根据上述的模块选用方法,从该四个模块中选择最适配使用场景的模块进行模板匹配。
快速匹配模块相较于高精度匹配和轮廓匹配,通常拥有更快的匹配速度,且对存在形变的目标有着更好的匹配效果,但匹配精度不如后两个模块。
本节内容包含:
该模块适用于基于定位且对定位精度要求不高的业务场景,例如物体的有无判断、方向判断、计数等。下图为使用该模块对产品进行计数的效果示例。
结果图像 |
计数数据 |
---|---|
![]() |
![]() |
缺针检测场景下,可在流程中调用快速匹配模块和其他模块,检测物理接口的针脚缺失问题。
搭建流程的核心思路为——当针脚缺失的时候,图像对应的位置就不会出现亮斑。基于此,具体思路如下:
通过快速匹配匹配针脚特征。
通过位置修正规避产品位置变化对检测的影响。
通过亮度测量测量ROI范围内图像的亮度值。
通过条件检测判断亮度值符合要求(OK)或不符合要求(NG)。
通过格式化将OK和NG数据格式化。
通过发送数据将格式化后的数据发送出去。
根据以上思路搭建的流程见下图。
产品图 |
检测效果图 |
---|---|
![]() |
![]() |
以下仅介绍该模块的运行参数详情。通过配置运行参数,可定义当前模块如何处理输入的数据。
基本参数详情,请参见基本参数。
特征模板参数详情,请参见快速匹配的模板配置参数。
结果显示参数详情,请参见结果显示。
开启后,算法将逐个使用所有模板对目标进行匹配,输出最优的匹配结果。该参数默认关闭。
设置模板与待匹配图像中目标的相似度阈值。算法仅在相似度达到该阈值时,才会将该搜索到的目标判定为有效匹配结果。该参数最大可设置为1,表示模板的轮廓点与待匹配图像的完全契合。默认为0.5。
设置允许查找到的最大目标数量,默认值为1,有效取值范围为1~1000。
设置极性表示图形边缘到背景的颜色过渡情况(从黑到白或者从白到黑)。
如果查找目标的极性和模板的极性不一致时,仍要保证目标被查找到,则需将该参数设置为不考虑极性。如不需要则可设置为考虑极性,缩短查找时间。
设置模板图像可相较水平方向的旋转角度范围(顺时针为正,逆时针为负)。默认值为-45~45,表示旋转角度范围为-45。至45。。
搜索有旋转变化的目标时,需根据目标的旋转角度范围设置该参数(取值范围-180~180),否则可能导致匹配失败。
设置待匹配目标相对于已创建模板的缩放尺度范围。搜索存在尺度缩放的目标时,需设置该参数,有效值范围为0.1~10.0。
默认的尺度范围为1.00~1.00(即仅搜索无尺度缩放的目标)。因此搜索存在尺度缩放的目标时,请务必根据实际的缩放程度调整该参数取值,否则将导致匹配失败(如下图示例所示)。
设置搜索多个目标且其中两个匹配目标彼此重合时,两个匹配框的最大重叠比例。该参数取值越大表示两个目标可重叠的程度越大。取值范围0~100,默认50。当两个目标的重叠率大于所设置的参数值时,算法将舍弃相似度得分较低的目标,保留得分较高的目标。
设置匹配结果的排序依据,如按分数降序排序、按角度降序排序、按X由小到大排序等。
下图为按分数降序排序的示例。
按照特征匹配的得分降序排列。
按照当前结果里面相对角度偏移降序排列。
按照匹配框中心的X轴坐标由小到大排序。
按照匹配框中心的Y轴坐标由小到大排序。
按照匹配框中心点X轴坐标由小到大排序,当X坐标整数化后值相同时再按照Y轴坐标从小到大排序。
按照匹配框中心点Y轴坐标由小到大排序,当Y坐标整数化后值相同时再按照X轴坐标从小到大排序。
噪点是指匹配图中不在边缘链上的特征点。开启该参数后,算法会考虑噪点特征,若特征存在毛刺,则评分降低。默认关闭。
如下图所示,是否考虑噪点会对匹配分值产生影响。(左:匹配模板,中:考虑噪点,右:不考虑噪点)。
该参数取值表示“目标物体的特征在图像边缘显示不全时,缺失特征相对于完整特征的比例”。当目标物体被图像边缘截断时,设置延拓阈值可保证目标物体被查找到。
下图示例中,延拓阈值大于40,即可保证被图像右侧边缘截断的目标物体被查找到。
设置搜索超时的时长。搜索时间达到超时时长算法将停止搜索,不返回任何搜索结果。取值范围:0~10000,单位:ms。如设置为0,则关闭超时控制功能。
勾选后显示模板轮廓特征点。
不勾选则不显示特征点,只显示匹配框,可降低匹配耗时。
快速匹配模块的输出结果中的各项参数说明,请参见快速匹配的模块结果。
高精度匹配模块适用于需要定位目标、识别目标方向、检测目标偏移角度等对定位精度有较高要求的业务场景。
本节内容包含:
高精度匹配模块相比快速匹配模块在匹配精度上有所提升。前者在执行基于图像金字塔的匹配加速时使用了图像金字塔中的多层图像搜索目标,而后者仅在图像金字塔的顶层搜索目标。
在二维码识别场景中,可根据以下思路搭建流程:
基本参数详情,请参见基本参数。
高精度匹配模块的运行参数与快速匹配一致,此处不再赘述,详情参见快速匹配模块的参数配置。
特征模板详情,请参见高精度匹配的模板配置参数。
结果显示参数详情,请参见结果显示。
高精度匹配模块的输出结果中的各项参数说明,请参见轮廓匹配/高精度匹配的输出结果。
如果部件具有较清晰的边缘轮廓且仅需查找单个目标,可优先使用轮廓匹配。该模块适用于部件定位、方向识别、角度检测等检测场景。
本节内容包含:
使用轮廓匹配,采样12个点信息(9次平移,3次旋转),进行N点标定,如下图所示。
基本参数详情,请参见基本参数。
轮廓匹配模块的运行参数与快速匹配一致,此处不再赘述,详情参见快速匹配模块的参数配置。
特征模块参数详情,请参见轮廓匹配的模板配置参数。
结果显示参数详情,请参见结果显示。
轮廓匹配模块的输出结果中的各项参数说明,请参见轮廓匹配/高精度匹配的输出结果。
灰度匹配模块基于物体灰度特征进行特征匹配。由于不使用边缘点作为特征,该模块适用于在边缘点不明显的场景中进行物体定位、物体方向识别、物体角度检测等检测工作。
本节内容包含:
灰度匹配相较于“基于轮廓点信息”的高精度匹配、快速匹配和轮廓匹配,在光源发生变化或者相机曝光时间发生变化的情况下,依然可以匹配到目标物体(见下图)。
较充足曝光时长 |
曝光时长过短 |
---|---|
![]() |
![]() |
可通过灰度匹配对包装盒进行计数,并在脚本中订阅灰度匹配到个数,然后进行数据收发逻辑处理。
匹配效果 |
输出计数数据 |
---|---|
![]() |
![]() |
该示例中使用灰度匹配,而非高精度匹配和快速匹配,是由于包装表面的轮廓信息不明显、轮廓一致性欠佳,使用高精度匹配和快速匹配都存在匹配遗漏或匹配错误的风险。
以下仅介绍该模块的运行参数详情。通过配置运行参数,可定义当前模块如何处理输入的数据。
基本参数详情,请参见基本参数。
灰度模板详情,请参见灰度匹配的模板配置参数。
结果显示参数详情,请参见结果显示。
参数定义与快速匹配模块的对应参数相同,详情参见上文提及的最小匹配分数
参数定义与快速匹配模块的对应参数相同,详情参见上文提及的最大匹配个数。
参数定义与快速匹配模块的对应参数相同,详情参见上文提及的角度范围。
参数定义与快速匹配模块的对应参数相同,详情参见上文提及的最大重叠率。
参数定义与快速匹配模块的对应参数相同,详情参见上文提及的排序类型。
参数定义与快速匹配模块的对应参数相同,详情参见上文提及的匹配极性。
定义搜索匹配的超时时长,取值范围0~10000,单位ms。当实际搜索时间达到该时长,搜索停止,且不返回任何搜索结果。默认值为0,表示关闭超时控制功能。
结束匹配时所用的金字塔层数,默认值为0。该参数取值越大,匹配速度越快,且对匹配目标的抗变形能力越强,但定位精度可能降低。
灰度匹配模块的输出结果中的各项参数说明,请参见灰度匹配的输出结果。
快速匹配、高精度匹配和轮廓匹配模块运行过程中的特征提取基于特征模板进行。而灰度匹配模块则基于灰度模板。该四个模块的模板配置步骤基本相同,但配置项有所差异。
请参照如下步骤配置特征/灰度模板。