模板匹配

模板匹配包含快速匹配高精度匹配轮廓匹配灰度匹配四个模块。可通过该四个模块选取特定的图像特征作为模板,并预设参数确定搜索空间,在图像中搜索与模板相似的目标,实现定位、计数和判断有无等业务需求。

本章节包含如下内容:

模块原理

快速匹配高精度匹配轮廓匹配灰度匹配模块都基于模板匹配算法处理图像数据。

说明:

强烈建议在进行模块配置前,了解模块原理,进而更好地理解模块相关配置与操作。

根据匹配所依据的数据差异,模板匹配算法分为“基于边缘点”和“基于灰度值”两种类型。

基于轮廓点

快速匹配高精度匹配、和轮廓匹配模块的特征匹配,基于边缘轮廓点。

算法工作流

基于边缘点的模板匹配算法通常包含如下2大数据处理步骤:

  1. 基于特定的图像特征创建模板。

  2. 通过模板在图像中搜索与模板匹配的目标。

算法工作流的详情见下图:

图 1 模板匹配工作流
算法公式

基于边缘点的模板匹配的基础原理可用如下公式表示:

图 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)可分别做如下简化理解:
  • Fm:模板图像中的显著边缘轮廓点(绿色的点)

  • Fs:匹配图像对应区域的显著边缘轮廓点

  • S=(Fm , Fs):模板上的特征轮廓点经过特定的拉伸、旋转、平移后,与目标图像中的边缘轮廓点相匹配的比例。比例越高,相似度得分越高

    以下表的图像为例,高相似度图像中,所有的模板特征点均在匹配目标中找到了对应边缘特征点,故其得分为1分;较低相似度图像中,模板特征点中约有30%未在匹配目标中找到对应边缘特征点,故其得分为0.71分。

    表 1 相似度得分示例

    模板图像

    高相似度图像(得分:1)

    较低相似度图像(得分:0.71)

匹配加速机制

为了加速匹配过程,算法会对待匹配的图像做如下处理:

  1. 对待匹配图像建立图像金字塔。

  2. 在图像金字塔中,至顶向下逐层进行目标搜索,直至找到满足条件的目标。

该处理过程的示例见下图。

图 3 图像金字塔的示例

上图展示了在含有R和P字样的图像中搜索字母R的过程:

  1. 建立图像金字塔。

  2. 在图像金字塔的顶层找到了R和P这两个候选目标。

  3. 在图像金字塔的下一层中对R和P进行进一步的判定并调整其位姿。

  4. 删除错误的候选目标P。

  5. 在图像金字塔的底层对候选结果R进行最终的位姿调整,并输出查找结果。

模板匹配算法在创建模板的过程中,存在两个与图像金字塔相关的参数—速度尺度特征尺度

  • 速度尺度:定义图像金字塔顶层的大小,用于调节匹配搜索的速率。可在配置特征模板时调整该参数取值。具体参数定义参见下文特征/灰度模板中提及的速度尺度

  • 特征尺度:定义图像金字塔底层的大小,用于调节匹配算法的抗形变能力。可在配置特征模板时调整该参数取值。具体参数定义参见下文特征/灰度模板中提及的特征尺度

基于灰度值

灰度匹配模块的特征匹配基于目标在图像中的灰度值分布。

算法工作流

基于灰度值的模板匹配的算法工作流与基于边缘点的基本相同。简言之,即计算模板图像所有可能的旋转平移结果与待匹配图像的相似性,取相似度分数达到阈值且最高的n个结果作为输出。

不同之处在于两者提取的特征。基于灰度值时,以模板图像和待匹配图像的灰度值分布作为特征,使用“归一化互相关性”(Normalized Cross Correlation,NCC)来评价两者灰度值分布的相似性。

算法公式
图 4 算法公式(基于边缘点)
  • r 和c:分别代表模板图像的平移量,等同于上文基于轮廓点中的x和y

  • t:模板图像

  • i:待匹配图像

  • mt:mi(r, c):模板图像的灰度均值

  • mi(r, c):待匹配图像特定区域的灰度均值

  • s2t:模板图像的灰度值方差

  • s2i(r, c):待匹配图像在特定区域的灰度值方差

如果当前模板图像和待匹配图像某个局部的灰度值线性正相关(两者灰度分布的趋势相同,仅存在整体上的数值偏移或者存在某种比例关系),则NCC值为1;

如果线性无关,则NCC值为0;

如果线性负相关,则NCC值为-1。

匹配加速机制

基于灰度值的模板匹配也同样借助图像金字塔加速匹配过程,同样具有两个与图像金字塔相关的参数—金字塔层数匹配结束层,但参数定义有所差异。

  • 金字塔层数:相当于上文“基于轮廓点的匹配算法”的匹配加速机制中的速度尺度。可在配置灰度模板时配置该参数,具体定义参见下文特征/灰度模板中提及的金字塔层数

  • 匹配结束层:相当于上文“基于轮廓点的匹配算法”的匹配加速机制中的特征尺度。可在灰度匹配模块的运行参数页签配置该参数,具体定义参见下文灰度匹配中提及的匹配结束层

使用场景与模块选用

快速匹配高精度匹配轮廓匹配灰度匹配这四个模块的选用,取决于具体的业务场景。

表 2 模块适用场景

模块

特点

适用场景

灰度匹配

建模时提取物体在图像中的灰度值分布

图像中的待匹配目标无明显且稳定的轮廓点,但灰度值分布相对稳定。例如对比度较低和受随机噪声干扰的场景

快速匹配

建模时提取物体的粗糙轮廓,定位精度较低。对存在形变的目标,匹配效果更好

  • 图像中待匹配目标的轮廓点数量较充足且稳定

  • 匹配目标存在一定形变

  • 对定位精度要求不高

例如有无判断、方向判断、产品计数等场景

轮廓匹配

建模时提取物体的较精细轮廓,匹配效率与定位精度均较好

  • 图像中待匹配目标的轮廓点数量较充足且稳定

  • 对定位精度和匹配效率要求均较高

说明:

轮廓匹配可认为是高精度匹配的升级版。相比高精度匹配快速匹配轮廓匹配兼具匹配效率与定位精度。大部分应用场景下推荐使用轮廓匹配

高精度匹配

建模时提取物体的精细轮廓,定位精度较高,但匹配效率较低

  • 图像中待匹配目标的轮廓点数量充足且稳定

  • 对定位精度要求较高但对匹配效率要求不高

具体模块

根据上述的模块选用方法,从该四个模块中选择最适配使用场景的模块进行模板匹配。

快速匹配

快速匹配模块相较于高精度匹配轮廓匹配,通常拥有更快的匹配速度,且对存在形变的目标有着更好的匹配效果,但匹配精度不如后两个模块。

本节内容包含:

使用场景

该模块适用于基于定位且对定位精度要求不高的业务场景,例如物体的有无判断、方向判断、计数等。下图为使用该模块对产品进行计数的效果示例。

表 3 产品计数示例

结果图像

计数数据

使用方法

在流程中,快速匹配模块通常需要和位置修正条件检测脚本测量相关模块等其他模块配合使用。配合使用的目的是将快速匹配输出的物体位置和目标数量信息传递给需要这些数据的模块。

使用示例

缺针检测场景下,可在流程中调用快速匹配模块和其他模块,检测物理接口的针脚缺失问题。

搭建流程的核心思路为——当针脚缺失的时候,图像对应的位置就不会出现亮斑。基于此,具体思路如下:

  • 通过快速匹配匹配针脚特征。

  • 通过位置修正规避产品位置变化对检测的影响。

  • 通过亮度测量测量ROI范围内图像的亮度值。

  • 通过条件检测判断亮度值符合要求(OK)或不符合要求(NG)。

  • 通过格式化将OK和NG数据格式化。

  • 通过发送数据将格式化后的数据发送出去。

根据以上思路搭建的流程见下图。

图 5 断针检测示例流程
表 4 检测效果

产品图

检测效果图

参数配置

以下仅介绍该模块的运行参数详情。通过配置运行参数,可定义当前模块如何处理输入的数据。

说明:
全部搜索模式

开启后,算法将逐个使用所有模板对目标进行匹配,输出最优的匹配结果。该参数默认关闭。

最小匹配分数

设置模板与待匹配图像中目标的相似度阈值。算法仅在相似度达到该阈值时,才会将该搜索到的目标判定为有效匹配结果。该参数最大可设置为1,表示模板的轮廓点与待匹配图像的完全契合。默认为0.5。

最大匹配个数

设置允许查找到的最大目标数量,默认值为1,有效取值范围为1~1000。

匹配极性

设置极性表示图形边缘到背景的颜色过渡情况(从黑到白或者从白到黑)。

如果查找目标的极性和模板的极性不一致时,仍要保证目标被查找到,则需将该参数设置为不考虑极性。如不需要则可设置为考虑极性,缩短查找时间。

角度范围

设置模板图像可相较水平方向的旋转角度范围(顺时针为正,逆时针为负)。默认值为-45~45,表示旋转角度范围为-45至45

搜索有旋转变化的目标时,需根据目标的旋转角度范围设置该参数(取值范围-180~180),否则可能导致匹配失败。

图 6 效果示例
尺度范围

设置待匹配目标相对于已创建模板的缩放尺度范围。搜索存在尺度缩放的目标时,需设置该参数,有效值范围为0.1~10.0。

说明:

默认的尺度范围为1.00~1.00(即仅搜索无尺度缩放的目标)。因此搜索存在尺度缩放的目标时,请务必根据实际的缩放程度调整该参数取值,否则将导致匹配失败(如下图示例所示)。

图 7 匹配失败(目标存在缩放但尺度范围未调整)
图 8 匹配成功(尺度范围根据目标缩放做调整)
最大重叠率

设置搜索多个目标且其中两个匹配目标彼此重合时,两个匹配框的最大重叠比例。该参数取值越大表示两个目标可重叠的程度越大。取值范围0~100,默认50。当两个目标的重叠率大于所设置的参数值时,算法将舍弃相似度得分较低的目标,保留得分较高的目标。

图 9 效果示例
排序类型

设置匹配结果的排序依据,如按分数降序排序、按角度降序排序、按X由小到大排序等。

下图为按分数降序排序的示例。

图 10 排序示例
按分数降序排序

按照特征匹配的得分降序排列。

按角度降序排序

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

按X由小到大排序

按照匹配框中心的X轴坐标由小到大排序。

按Y由小到大排序

按照匹配框中心的Y轴坐标由小到大排序。

X由小到大,Y由小到大

按照匹配框中心点X轴坐标由小到大排序,当X坐标整数化后值相同时再按照Y轴坐标从小到大排序。

Y由小到大,X由小到大

按照匹配框中心点Y轴坐标由小到大排序,当Y坐标整数化后值相同时再按照X轴坐标从小到大排序。

阈值类型
自动阈值

根据目标图像自动生成边缘对比度阈值参数进行边缘轮廓点提取。

模板阈值

将模板的边缘对比度阈值经过内部转换后,作为匹配阶段的边缘对比度阈值进行边缘轮廓点的提取。

手动阈值

以设定的边缘对比度阈值提取边缘轮廓点。

是否考虑噪点

噪点是指匹配图中不在边缘链上的特征点。开启该参数后,算法会考虑噪点特征,若特征存在毛刺,则评分降低。默认关闭。

如下图所示,是否考虑噪点会对匹配分值产生影响。(左:匹配模板,中:考虑噪点,右:不考虑噪点)。

图 11 效果示例
延拓阈值

该参数取值表示“目标物体的特征在图像边缘显示不全时,缺失特征相对于完整特征的比例”。当目标物体被图像边缘截断时,设置延拓阈值可保证目标物体被查找到。

下图示例中,延拓阈值大于40,即可保证被图像右侧边缘截断的目标物体被查找到。

图 12 效果示例
超时控制

设置搜索超时的时长。搜索时间达到超时时长算法将停止搜索,不返回任何搜索结果。取值范围:0~10000,单位:ms。如设置为0,则关闭超时控制功能。

轮廓使能

勾选后显示模板轮廓特征点。

不勾选则不显示特征点,只显示匹配框,可降低匹配耗时。

模块结果

快速匹配模块的输出结果中的各项参数说明,请参见快速匹配的模块结果

高精度匹配

高精度匹配模块适用于需要定位目标、识别目标方向、检测目标偏移角度等对定位精度有较高要求的业务场景。

本节内容包含:

功能优势

高精度匹配模块相比快速匹配模块在匹配精度上有所提升。前者在执行基于图像金字塔的匹配加速时使用了图像金字塔中的多层图像搜索目标,而后者仅在图像金字塔的顶层搜索目标。

使用方法

在流程中,高精度匹配模块需要和位置修正N点标定测量相关模块等其他模块配合使用。配合使用的目的是将高精度匹配输出的物体位置等信息传递至其他模块。

使用示例

在二维码识别场景中,可根据以下思路搭建流程:

  1. 通过高精度匹配将二维码位置信息传递至位置修正

  2. 位置修正将修正的二维码位置信息传递至二维码识别,进而保证二维码识别的ROI随部件位置变化而变化。

图 13 高精度匹配应用示例

参数配置

模块结果

高精度匹配模块的输出结果中的各项参数说明,请参见轮廓匹配/高精度匹配的输出结果

轮廓匹配

如果部件具有较清晰的边缘轮廓且仅需查找单个目标,可优先使用轮廓匹配。该模块适用于部件定位、方向识别、角度检测等检测场景。

本节内容包含:

使用方法

在流程中,轮廓匹配通常需要和位置修正条件检测脚本测量相关模块等其他模块配合使用。配合使用的目的是将轮廓匹配输出的物体位置和个数信息传递给需要这些数据的模块。

使用示例

使用轮廓匹配,采样12个点信息(9次平移,3次旋转),进行N点标定,如下图所示。

图 14 基于轮廓匹配进行N点标定

参数配置

模块结果

轮廓匹配模块的输出结果中的各项参数说明,请参见轮廓匹配/高精度匹配的输出结果

灰度匹配

灰度匹配模块基于物体灰度特征进行特征匹配。由于不使用边缘点作为特征,该模块适用于在边缘点不明显的场景中进行物体定位、物体方向识别、物体角度检测等检测工作。

本节内容包含:

功能优势

灰度匹配相较于“基于轮廓点信息”的高精度匹配快速匹配轮廓匹配,在光源发生变化或者相机曝光时间发生变化的情况下,依然可以匹配到目标物体(见下图)。

表 5 抗曝光时长变化

较充足曝光时长

曝光时长过短

使用方法

在流程中,灰度匹配通常需要和位置修正条件检测脚本测量相关模块等其他模块配合使用。配合使用的目的是将灰度匹配输出的物体位置和个数信息传递给其他需要这些数据的模块。

使用示例

可通过灰度匹配对包装盒进行计数,并在脚本中订阅灰度匹配到个数,然后进行数据收发逻辑处理。

表 6 灰度匹配计数示例

匹配效果

输出计数数据

该示例中使用灰度匹配,而非高精度匹配快速匹配,是由于包装表面的轮廓信息不明显、轮廓一致性欠佳,使用高精度匹配快速匹配都存在匹配遗漏或匹配错误的风险。

参数配置

以下仅介绍该模块的运行参数详情。通过配置运行参数,可定义当前模块如何处理输入的数据。

说明:
最小匹配分数

参数定义与快速匹配模块的对应参数相同,详情参见上文提及的最小匹配分数

最大匹配个数

参数定义与快速匹配模块的对应参数相同,详情参见上文提及的最大匹配个数

角度范围

参数定义与快速匹配模块的对应参数相同,详情参见上文提及的角度范围

最大重叠率

参数定义与快速匹配模块的对应参数相同,详情参见上文提及的最大重叠率

排序类型

参数定义与快速匹配模块的对应参数相同,详情参见上文提及的排序类型

匹配极性

参数定义与快速匹配模块的对应参数相同,详情参见上文提及的匹配极性

超时控制

定义搜索匹配的超时时长,取值范围0~10000,单位ms。当实际搜索时间达到该时长,搜索停止,且不返回任何搜索结果。默认值为0,表示关闭超时控制功能。

匹配结束层

结束匹配时所用的金字塔层数,默认值为0。该参数取值越大,匹配速度越快,且对匹配目标的抗变形能力越强,但定位精度可能降低。

模块结果

灰度匹配模块的输出结果中的各项参数说明,请参见灰度匹配的输出结果

特征/灰度模板

快速匹配高精度匹配轮廓匹配模块运行过程中的特征提取基于特征模板进行。而灰度匹配模块则基于灰度模板。该四个模块的模板配置步骤基本相同,但配置项有所差异。

请参照如下步骤配置特征/灰度模板。

  1. 在流程中双击模块打开模块配置窗口,并选择模板配置页签。
    • 如果模块为快速匹配/高精度匹配/轮廓匹配,选择特征模板页签。

    • 如果模块为灰度匹配,选择灰度匹配页签。

    特征模板页签

    灰度模板页签

  2. 单击创建打开模板配置窗口。

    如果图像源模块已正常运行,则该窗口默认显示当前图像源模块采集的图像。如需基于其他图像进行模板配置,可单击选择其他图像

    模板配置(快速/高精度/轮廓匹配)

    模板配置(灰度匹配)

  3. 在图像上特征明显的区域绘制掩膜。算法将在掩膜区域内提取图像特征。
    选项 描述

    绘制矩形掩膜

    单击,并在图像上拖动光标绘制矩形掩膜。

    绘制扇形掩膜

    灰度匹配模块不支持)

    单击,并在图像上拖动光标绘制扇形掩膜。

    绘制圆形掩膜

    灰度匹配模块不支持)

    单击,并在图像上拖动光标绘制圆形掩膜。

    绘制多边形掩膜

    灰度匹配模块不支持)

    单击,可在图像上任意位置单击可设置多边形的顶点,双击结束绘制(详细操作参见)。

    说明:
    • 快速匹配高精度匹配轮廓匹配的模板图像上,可绘制多个掩膜,且可绘制不同形状的掩膜。

    • 灰度匹配的模板图像上,仅能绘制单个矩形掩膜。

  4. 可选操作: 进行如下可选操作。
    选项 描述

    删除掩膜

    右击掩膜,并在弹出的右键菜单上单击删除

    复制掩膜

    右击掩膜,并在弹出的右键菜单上单击复制

    调整掩膜位置

    单击选中掩膜,并拖拽调整其位置。

    选择匹配中心

    单击,并在图像上的合适位置单击,将其设置为模板的匹配中心。

    锁定匹配中心

    选择匹配中心后,可在模板配置窗口的下方勾选锁定,锁定匹配中心。锁定后,该窗口工具栏上不再显示“选择匹配中心”图标

    移动图像

    单击后,将光标移动至图像上并拖拽图像进行移动。

    缩放图像

    单击/缩放图像;或将光标置于图像区域,并滚动鼠标滚轴缩放图像。

    清空掩膜

    单击清空掩膜。

    撤销上一步操作

    单击撤销上一步操作。

    恢复至撤销前

    单击取消撤销,恢复至撤销前的状态。

    图像自适应

    单击将图像大小设置为自适应模式。

    全屏显示

    单击将图像全屏显示。

    绘制ROI

    开启全部屏蔽,将已绘制的掩膜全部屏蔽和匹配中心。此时可单击,并在图像通过“刷”的方式绘制ROI(具体见下图)。

    图 15 刷出ROI
  5. 单击生成模板。
    图 16 模板效果示例(以高精度匹配为例)
  6. 可选操作: 如果模板中提取了不必要的轮廓点,单击,并将光标悬浮至这些轮廓点将其擦除。

    可单击右下角的三角形图标,并在弹出的浮窗滑动滑块调整“橡皮擦”的大小。

    图 17 调整“橡皮擦”大小
  7. 可选操作: 调整模板的配置参数,并重新生成模板,直至模板效果满足需求。
    快速匹配的模板配置参数
    尺度模式

    详见下文的尺度模式

    特征尺度

    详见下文的特征尺度

    阈值模式

    设置对比度调整模式,可选自动手动,默认为自动。如果自动模式能满足需求则无需手动调整对比度;如果不能满足,可切换至手动模式并调整对比度阈值

    对比度阈值

    此处“对比度”指特征点和背景的灰度值差距。对比度阈值越大,被淘汰的特征点越多。取值范围为1~255。

    图 18 对比度阈值配置效果
    高精度/轮廓匹配的模板配置参数
    尺度模式

    设置特征尺度的配置模式,可选自动手动模式。默认为自动。如果自动模式能满足特征提取需求则无需调节;如果不能满足要求,可切换为手动模式并手动调整特征尺度

    速度尺度

    设置特征匹配速度。该值越大表示图像金字塔顶层的图像越小,相应提取的边缘点就越稀疏,进而加快特征匹配速度,但是过大的取值可能会导致漏检。取值范围为1~20。

    特征尺度

    表示图像金字塔底层的大小,调整该值可调节匹配算法的抗形变能力。“抗形变能力”指算法在匹配目标存在一定形变的情况下也能匹配到目标的能力。

    该值越大表示图像金字塔底层的搜索图像越小,提取的特征点越稀疏,但抗形变能力越强,匹配速度越快。取值过大可能导致误检,定位精度也会有一定程度下降。

    说明:

    该参数取值不能大于速度尺度取值。

    当取值为1时最精细,一般调节后会使轮廓点数量发生较大变化,如下图所示

    图 19 特征尺度配置效果
    阈值模式

    快速匹配中对应参数定义相同,详情参见上文提及的阈值模式

    对比度阈值

    快速匹配中对应参数定义相同,详情参见上文提及的对比度阈值

    链长模式

    可选自动和手动两种模式,主要是对最小链长进行调整。 原则是自动模式能满足需求则不进行调节,自动模式不能满足要求再切换至手动模式并调整最小链长。

    最小链长

    设置建模时,由特征点组成的特征链的最小长度。只有链长超过最小链长值时,特征链才会被保留。

    图 20 最小链长配置效果
    灰度匹配的模板配置参数
    金字塔层数

    设置图像金字塔的最大层数(在必要情况下,算法将根据输入的模板图像适当减少层数)。金字塔层数越多则匹配效率越高,但匹配精度可能下降;越少则匹配效率越低,但匹配精度更高。

    起始角度
    终止角度

    建模过程中,模板图像可旋转的角度范围。

    角度步长

    模板图像旋转的角度间隔。角度步长越小则匹配结果的角度越精确,但耗时越长,且模型容量越大;角度步长越小则匹配结果的角度精度越低,但匹配效率越高,且模型容量越小。

  8. 可选操作: 在掩膜列表进行如下可选操作。
    选项 描述

    隐藏/显示掩膜

    单击/隐藏或显示掩膜。

    屏蔽掩膜

    灰度匹配不支持)

    单击右下角的三角形图标,并单击屏蔽对应掩膜,再单击重新生成模板,可屏蔽该掩膜中的特征点提取。

    增强匹配

    (仅高精度匹配支持)

    如果对特定掩膜内的匹配精度有较高要求,可单击右下角的三角形图标,并单击开启增强匹配。在相同的最小匹配分数下,

    开启增强匹配的掩膜对于模板和检测目标的相似度要求更高,因此具备更高的匹配精度。

    删除掩膜

    单击删除对应的掩膜。

    图 21 掩膜列表(仅以高精度匹配为例)
  9. 单击将模板保存至本地路径。

    模板图像默认保存至模板文件中。如无需保存,可关闭模板存图

  10. 单击模板配置窗口右下角的确定,完成模板配置,并返回特征模板/灰度模板页签。
  11. 可选操作: 特征模板/灰度模板页签进行如下可选操作。
    选项 描述

    模板排序

    单击/对模板进行排序。

    在未开启全部搜索模式时,算法将优先采用排序更靠前的模板与目标图像进行匹配。如果找到符合最小匹配分数要求的目标,则停止匹配。

    编辑模板

    单击编辑模板继续编辑模板。

    清空模板

    单击删除所有模板清空模板。

    载入模板

    单击载入从本地路径载入模板。

    特征模板列表

    灰度模板列表