在这一篇文章中,我们将会了解数字图像处理中重要的组成部分之一的模板匹配。
一:什么是模板匹配?
在OpenCV教程中这样解释模板匹配:
模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术.
这里说的模板是我们已知的小图像,模板匹配就是在一副大图像中搜寻目标。模板就是我们已知的在图中要找的目标,且该目标同模板有相同的尺寸、方向和图像,通过一定的算法可以在图中找到目标,确定其坐标位置。
二:模板匹配的原理
用通俗的语言来解释模板的匹配原理:
在要检测的图像上,从左到右,从上到下遍历这一幅图像,从上到下计算模板与重叠子图像的像素匹配度,如果匹配的程度越大,这说明相同的可能性越大。
实现过程:
①:准备两幅图像:
图像 (I): 在这幅图像里,我们希望找到一块和模板匹配的区域
模板 (T): 将和原图像比照的图像块
②:为了确定匹配区域, 我们滑动模板图像和原图像进行比较
③:使用模板遍历图像
通过滑动, 从左往右,从上往下. 在每一个位置, 都进行一次度量计算来表明模板和原图像的特定区域的相似性。
对于 T 覆盖在 I 上的每个位置,你把度量值保存到结果图像矩阵(R) 中. 在R中的每个位置 (x,y) 都包含匹配度量值:
上图是使用标准相关匹配方法处理后的结果图像 R . 最白的位置代表最高的匹配. 红色椭圆框住的位置很可能是结果图像矩阵中的最大数值, 所以这个区域被认为是匹配的.
三:使用OpenCV实现
我们调用OpenCV中的函数 matchTemplate 实现了模板匹配算法:
①:平方差匹配 method=CV_TM_SQDIFF
这类方法利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大.
②:标准平方差匹配 method=CV_TM_SQDIFF_NORMED
③:相关匹配 method=CV_TM_CCORR
这类方法采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果.
④:标准相关匹配 method=CV_TM_CCORR_NORMED
⑤:相关匹配 method=CV_TM_CCOEFF
这类方法将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示匹配很差,0表示没有任何相关性(随机序列).
在这里
⑥:标准相关匹配 method=CV_TM_CCOEFF_NORMED
代码实现:
在这次匹配中我们主要使用了matchTemplate和minMaxLoc这两个函数:
matchTemplate:函数的完整表达:
matchTemplate(image, templ, method[, result[, mask]])
Image:参数表示待搜索源图像,必须是8位整数或32位浮点。
Templ:参数表示模板图像,必须不大于源图像并具有相同的数据类型。
Method:参数表示计算匹配程度的方法。
Result:参数表示匹配结果图像,必须是单通道32位浮点。如果image的尺寸为W x H,templ的尺寸为w x h,则result的尺寸为(W-w+1)x(H-h+1)。
minMaxLoc函数的完整表达:
minMaxLoc(src[, mask],minVal, maxVal, minLoc, maxLoc)
src参数表示输入单通道图像。
mask参数表示用于选择子数组的可选掩码。
minVal参数表示返回的最小值,如果不需要,则使用NULL。
maxVal参数表示返回的最大值,如果不需要,则使用NULL。
minLoc参数表示返回的最小位置的指针(在2D情况下); 如果不需要,则使用NULL。
maxLoc参数表示返回的最大位置的指针(在2D情况下); 如果不需要,则使用NULL。
四:实现结果:
效果如下:
五:参考文献
【1】:OpenCV documentation
模板匹配 - OpenCV 2.3.2 documentationwww.opencv.org.cn
【2】:
CSDN-专业IT技术社区-登录blog.csdn.net
【3】:
CSDN-专业IT技术社区-登录blog.csdn.net