模板匹配

前言
    模板匹配是在图像中寻找目标的方法之一。Come On, Boy.我们一起来看看模板匹配到底是怎么回事。

 

模板匹配的工作方式
    模板匹配的工作方式跟直方图的反向投影基本一样,大致过程是这样的:通过在输入图像上滑动图像块对实际的图像块和输入图像进行匹配。
    假设我们有一张100x100的输入图像,有一张10x10的模板图像,查找的过程是这样的:
  (1)从输入图像的左上角(0,0)开始,切割一块(0,0)至(10,10)的临时图像;
  (2)用临时图像和模板图像进行对比,对比结果记为c;
  (3)对比结果c,就是结果图像(0,0)处的像素值;
  (4)切割输入图像从(0,1)至(10,11)的临时图像,对比,并记录到结果图像;
  (5)重复(1)~(4)步直到输入图像的右下角。
    大家可以看到,直方图反向投影对比的是直方图,而模板匹配对比的是图像的像素值;模板匹配比直方图反向投影速度要快一些,但是我个人认为直方图反向投影的鲁棒性会更好。

 

模板匹配的匹配方式
    在OpenCv和EmguCv中支持以下6种对比方式:
    CV_TM_SQDIFF 平方差匹配法:该方法采用平方差来进行匹配;最好的匹配值为0;匹配越差,匹配值越大。
    CV_TM_CCORR 相关匹配法:该方法采用乘法操作;数值越大表明匹配程度越好。
    CV_TM_CCOEFF 相关系数匹配法:1表示完美的匹配;-1表示最差的匹配。
    CV_TM_SQDIFF_NORMED 归一化平方差匹配法
    CV_TM_CCORR_NORMED 归一化相关匹配法
    CV_TM_CCOEFF_NORMED 归一化相关系数匹配法
    根据我的测试结果来看,上述几种匹配方式需要的计算时间比较接近(跟《学习OpenCv》书上说的不同),我们可以选择一个能适应场景的匹配方式。

  模板匹配(TemplateMatching)就是在一幅图像中寻找和模板图像(template)最相似的区域,该方法原理简单计算速度快,能够应用于目标识别,目标跟踪等多个领域。OpenCV中对应的函数为matchTemplate或cvMatchTemplate(参考opencvdoc),简单介绍下:

1、函数原型

[cpp]  view plain  copy
  1. C++: void matchTemplate(InputArray image, InputArray templ, OutputArray result, int method);  
  2. C: void cvMatchTemplate(const CvArr* image, const CvArr* templ, CvArr* result, int method);  

2、参数解释

-image:输入图像。必须为8位或者32位的浮点型。

-templ:用于搜索的模板图像。必须小于输入图像并且是一样的数据类型。

-result:匹配结果图像。必须是单通道32位浮点型,且大小是(W-w+1)*(H-h+1),其中W,H分别为输入图像的宽和高,w,h分别为模板图像的宽和高。

-method:相似度衡量的方法。具体如下(这里T是templ,I是image,R是result,x’是从0到w-1,y’是从0到h-1):

(1)method=CV_TM_SQDIFF(Sum of SquaredDifference)

平方差匹配法,最好的匹配为0,值越大匹配越差;

(2)method=CV_TM_SQDIFF_NORMED

归一化平方差匹配法,第一种方法的归一化形式;

(3)method=CV_TM_CCORR(Cross Correlation)

相关匹配法,采用乘法操作,数值越大表明匹配越好;

(4)method=CV_TM_CCORR_NORMED

归一化相关匹配法,第三种方法的归一化形式;

(5)method=CV_TM_CCOEFF

,其中:

相关系数匹配法,最好的匹配为1,-1表示最差的匹配;

(6)method=CV_TM_CCOEFF_NORMED 

归一化相关系数匹配法,第五种方法的归一化形式;

最后需要注意:

(1)前面两种方法为越小的值表示越匹配,后四种方法值越大越匹配。原因在于我们把第一种方法CV_TM_SQDIFF的计算公式展开可以得到:


上式的第一项(模板图像T的能量)是一个常数,第三项(图像I局部的能量)也可以近似一个常数,剩下的第二项与第三种方法CV_TM_CCORR的计算公式一样。而我们知道互相关系数(Cross Correlation)越大相似度越大,所以第一、二种方法的数值越小相似度越高,而第三、四种方法的数值越大相似度越高,第五、六种方法的计算公式与第三、四种方法的类似,所以也是数值越大相似度越高。
(2)如果输入图像和模板图像都是彩色图像,则三个通道分别计算上述相似度,然后求平均值。


3、功能描述

        函数通过在输入图像image中滑动(从左到右,从上到下),寻找各个位置的区块(搜索窗口)与模板图像templ的相似度,并将结果保存在结果图像result中。该图像中的每一个点的亮度表示该处的输入图像与模板图像的匹配程度,然后可以通过某方法(一般使用函数minMaxLoc)定位result中的最大值或者最小值得到最佳匹配点,最后根据匹配点和模板图像的矩形框标出匹配区域。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值