模板匹配笔记

  • Post author:
  • Post category:其他


模板匹配是一种最基本、最原始的模式识别的方法。通过对比某一特定物体的图案位于图像的什么地方,进而识别出物体。它是图像处理中最基本、最常用的匹配方法。它的局限性主要是它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。

模板匹配流程

1. 准备两幅图,一副为模板图,另一幅图是要进行模板匹配的图像(原图)。

下图的例子中,左图表示模板图,右图是原图。

2. 模板匹配:在原图中滑动模板窗口并计算每个窗口的匹配度。

模板图窗口每次移动一个像素(从上到下,从左到右),每一个窗口位置上都计算出一个匹配度(相似度)。

每一个计算出来的相似度,记录到一个矩阵R中。如果模板图的大小为[w,h],原图大小为[W,H],则R的大小为[W – w + 1, H – h + 1]。

3. 找出最大匹配结果:得到R后,在R中找到最大值所在位置,此位置为顶点,对应的模板图大小的区域就是最佳匹配区域。

OpenCV中匹配算法

匹配算法 说明
平方差匹配


CV_TM_SQDIFF,

利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大。

归一化平方差


CV_TM_SQDIFF_NORMED

相关匹配


CV_TM_CCORR,

模板和图像之间的乘法操作,所以较大的数表示匹配程度较高,0表示最坏的匹配效果

注意:如果图片有全白区域,使用这种方法效果较差。因为这种算法使用的是简单地相乘,亮度值较大的区域结果会更大。

归一化相关匹配法


CV_TM_CCORR_NORMED

相关系数匹配


CV_TM_CCOEFF

,将模板对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕匹配,而0表示没有任何相关性

归一化相关系数匹配


CV_TM_CCOEFF_NORMED

在具体使用过程中,R矩阵里找的是最大值还是最小值,要根据所选用的算法而定。模板匹配作为最基础最原始的模式识别方法,其缺点也很明显:属于暴力搜索,无法应对尺度变化(大小变化),旋转变化,视角变化和光照变化。

在实际应用中,模板匹配在用于一些视角、尺度、光照等基本不会发生变化的场景中比较合适。当这些条件经常发生变化时,模板匹配就无法适用了,此时一般会使用关键点匹配算法,比如SIFT、SURF等算法,此类算法先使用关键点检测算法检测出模板图片和原图的关键点,然后使用关键点匹配算法来进行处理。关键点匹配算法能较好地应对尺度变化、视角变化、旋转变化和光照变化一类的场景。



版权声明:本文为vivo01原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。