模板匹配详解的.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
模板匹配详解的

模板匹配? 目标? 在这节教程中您将学到: 使用OpenCV函数 matchTemplate 在模板块和输入图像之间寻找匹配,获得匹配结果图像 使用OpenCV函数 minMaxLoc 在给定的矩阵中寻找最大和最小值(包括它们的位置). 原理? 什么是模板匹配?? 模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术. 它是怎么实现的?? 我们需要2幅图像: 原图像 (I): 在这幅图像里,我们希望找到一块和模板匹配的区域 模板 (T): 将和原图像比照的图像块 我们的目标是检测最匹配的区域: 为了确定匹配区域, 我们不得不滑动模板图像和原图像进行 比较 : 通过 滑动, 我们的意思是图像块一次移动一个像素 (从左往右,从上往下). 在每一个位置, 都进行一次度量计算来表明它是 “好” 或 “坏” 地与那个位置匹配 (或者说块图像和原图像的特定区域有多么相似). 对于 T 覆盖在 I 上的每个位置,你把度量值 保存 到 结果图像矩阵 (R) 中. 在 R 中的每个位置 都包含匹配度量值: 上图就是 TM_CCORR_NORMED 方法处理后的结果图像 R . 最白的位置代表最高的匹配. 正如您所见, 红色椭圆框住的位置很可能是结果图像矩阵中的最大数值, 所以这个区域 (以这个点为顶点,长宽和模板图像一样大小的矩阵) 被认为是匹配的. 实际上, 我们使用函数 minMaxLoc 来定位在矩阵 R 中的最大值点 (或者最小值, 根据函数输入的匹配参数) . OpenCV中支持哪些匹配算法?? 问得好. OpenCV通过函数 matchTemplate 实现了模板匹配算法. 可用的方法有6个: 平方差匹配 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 通常,随着从简单的测量(平方差)到更复杂的测量(相关系数),我们可获得越来越准确的匹配(同时也意味着越来越大的计算代价). 最好的办法是对所有这些设置多做一些测试实验,以便为自己的应用选择同时兼顾速度和精度的最佳方案. 代码? 在这程序实现了什么? 载入一幅输入图像和一幅模板图像块 (template) 通过使用函数 matchTemplate 实现之前所述的6种匹配方法的任一个. 用户可以通过滑动条选取任何一种方法. 归一化匹配后的输出结果 定位最匹配的区域 用矩形标注最匹配的区域 下载代码: 单击 这里 看一下代码: #include opencv2/highgui/highgui.hpp #include opencv2/imgproc/imgproc.hpp #include iostream #include stdio.h using namespace std; using namespace cv; /// 全局变量 Mat img; Mat templ; Mat result; char* image_window = Source Image; char* result_window = Result window; int match_method; int max_Trackbar = 5; /// 函数声明 void MatchingMethod( int, void* ); /** @主函数 */ int main( int argc, char** argv ) { /// 载入原图像和模板块 img = imread( argv[1], 1 ); templ = imread( argv[2], 1 ); /// 创建窗口 namedWindow( image_window, CV_WINDOW_AUTOSIZE ); namedWindow( result_window, CV_WINDOW_AUTOSIZE ); /// 创建滑动条 char* trackbar_label = Method: \n 0: SQDIFF \n 1: SQDIFF NORMED \n 2: TM CCORR \n 3

文档评论(0)

ayangjiayu1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档