一、概述
模板匹配是一种用于在源图像S中寻找定位给定目标图像T(即模板图像)的技术。其原理很简单,就是通过一些相似度准则来衡量两个图像块之间的相似度Similarity(S,T)。
它的用途:模板匹配方法常用于一些平面图像处理中,例如印刷中的数字、工业零器件等小尺寸目标图像识别分类。模板匹配中,源图像和模板图像可以是二值图像、灰度图像、彩色图像。
模板匹配有两种使用场景:1)如果源图像S与模板图像T大小(高和宽)一致,则直接使用相似度计算公式对这两个图像进行相似度计算。2)如果源图像S的size大于模板图像T,则在S中匹配T时,需要滑动匹配窗口(即模板图像的大小),计算模板图像与该窗口对应的图像区域之间的相似度。对整张S图像滑动完后,得到多个匹配结果。这里,有两种方式获取匹配结果。一种是返回所有匹配结果中的最佳匹配结果(最小值或最大值,依相似度计算方式而定)。另一种,是设定一个阈值,大于或小于该阈值的匹配结果都认为是有效的匹配。
二、函数
void cvMatchTemplate(const CvArr* image, const CvArr* templ,
CvArr* result, int method );
函数 cvMatchTemplate 与函数 cvCalcBackProjectPatch 类似。它滑动过整个图像 image, 用指定方法比较 templ 与图像尺寸为 w×h 的重叠区域,并且将比较结果存到 result 中。 下面是不同的比较方法,可以使用其中的一种 (I 表示图像,T - 模板, R - 结果. 模板与图像重叠区域 x'=0..w-1, y'=0..h-1 之间求和):
平方差匹配法 method=CV_TM_SQDIFF:
归一化平方差匹配法 method=CV_TM_SQDIFF_NORMED:
这类方法利用平方差来进行匹配,最好的匹配为0。匹配越差,匹配值越大。
相关匹配法 method=CV_TM_CCORR:
归一化相关匹配法 method=CV_TM_CCORR_NORMED:
这类方法采用模板和图像之间的乘法操作,所以较大的数表示匹配程度越高,0表示最坏的匹配效果。
相关匹配法 method=CV_TM_CCOEFF:
归一化相关匹配法 method=CV_TM_CCOEFF_NORMED:
这类方法将模板对其均值的相对值与图像对其均值的相对值进行匹配,1表示完美的匹配,-1表示最糟糕的匹配,0表示没有任何相关性(随机序列)
一旦我们利用函数cvMatchTemplate( )获得一个匹配的结果图像,便可以利用函数cvMinMaxLoc( )找到最匹配的位置。