图像匹配程序设计——模板匹配

合集下载

模板匹配实验报告

模板匹配实验报告

一、实验目的1. 理解模板匹配的基本原理和方法。

2. 掌握使用模板匹配进行图像处理的基本步骤。

3. 通过实验验证模板匹配在不同场景下的应用效果。

二、实验原理模板匹配是一种图像处理技术,通过对目标图像和模板图像进行相似度比较,找出目标图像中与模板图像相似的子图像。

模板匹配的基本原理是计算目标图像与模板图像的相似度,通常使用以下两种方法:1. 梯度法:计算目标图像和模板图像的灰度梯度,通过比较梯度方向和大小来评估相似度。

2. 累加和法:计算目标图像和模板图像的灰度值累加和,通过比较累加和的相似度来评估相似度。

三、实验环境1. 操作系统:Windows 102. 编程语言:Python3. 图像处理库:OpenCV四、实验步骤1. 导入实验所需的库```pythonimport cv2import numpy as np```2. 读取目标图像和模板图像```pythontarget_image = cv2.imread('target.jpg')template_image = cv2.imread('template.jpg')```3. 将图像转换为灰度图像```pythontarget_gray = cv2.cvtColor(target_image, cv2.COLOR_BGR2GRAY)template_gray = cv2.cvtColor(template_image, cv2.COLOR_BGR2GRAY)```4. 进行模板匹配```pythonresult = cv2.matchTemplate(target_gray, template_gray,cv2.TM_CCOEFF_NORMED)```5. 设置阈值,找出相似度大于阈值的区域```pythonthreshold = 0.8loc = np.where(result >= threshold)```6. 在目标图像上标记匹配区域```pythonfor pt in zip(loc[::-1]): # Switch columns and rowscv2.rectangle(target_image, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)```7. 显示结果```pythoncv2.imshow('Matched Image', target_image)cv2.waitKey(0)cv2.destroyAllWindows()```五、实验结果与分析1. 实验结果通过实验,我们得到了目标图像中与模板图像相似的子图像。

图像匹配的算法种类和原理

图像匹配的算法种类和原理

图像匹配的算法种类和原理
图像匹配是一种广泛应用于计算机视觉领域的技术,用于判断两个或多个图像之间的相似性或是否存在某种关联。

以下是几种常见的图像匹配算法和其原理:
1. 直方图匹配:该算法基于图像的颜色分布,通过比较两个图像的直方图来评估它们的相似性。

直方图是一种将图像像素值与其频率关联起来的统计工具。

2. 特征点匹配:该算法通过提取图像中的特征点,如角点、边缘等,然后比较两个图像中的特征点之间的距离或相似性来确定它们之间的匹配关系。

常见的特征点匹配算法包括SIFT、SURF 和ORB。

3. 模板匹配:该算法使用一个预先定义好的模板图像,将其与输入图像进行比较,找出最佳匹配的位置。

模板匹配算法通常使用相关性或差异性度量来评估匹配程度。

4. 形状匹配:该算法旨在比较图像中的形状特征,例如提取图像边界上的轮廓,并计算它们之间的相似性。

形状匹配通常与图像分割和轮廓提取技术结合使用。

5. 神经网络匹配:近年来,深度学习和卷积神经网络(CNN)等技术的发展为图像匹配带来了新的突破。

使用深度神经网络,可以学习到更高级别的特征表示,并通过训练模型来实现图像匹配任务。

这些算法各有优缺点,并且在不同应用场景下具有不同的适用性。

在实际应用中,经常需要结合多种算法来实现更准确的图像匹配结果。

图像模板匹配算法的研究和实现

图像模板匹配算法的研究和实现

图像模板匹配算法的研究和实现这次写⼀下算法⽅⾯的,图像处理中模板匹配算法的研究和实现。

⼀:⾸先我们先上⼀下模板匹配的理论及其公式描述:模板匹配是通过在输⼊图像上滑动模板图像块对实际的图像块和输⼊图像进⾏匹配,并且可以利⽤函数cvMinMaxLoc()找到最佳匹配的位置。

例如在⼯业应⽤中,可以锁定图像中零部件的位置,并根据具体的位置,进⾏具体的处理。

匹配的过程中可以使⽤不同的method,通过最合适的method,进⾏最合适的匹配。

MatchTemplate ⽐较模板和重叠的图像区域void cvMatchTemplate( const CvArr* image,const CvArr* templ, CvArr* result, int method );image 欲搜索的图像。

它应该是单通道、8-⽐特或32-⽐特浮点数图像templ 搜索模板,不能⼤于输⼊图像,且与输⼊图像具有⼀样的数据类型result ⽐较结果的映射图像。

单通道、32-⽐特浮点数. 如果图像是 W×H ⽽ templ 是 w×h ,则 result ⼀定是 (W-w+1)×(H-h+1). method 指定匹配⽅法:函数 cvMatchTemplate 与函数 cvCalcBackProjectPatch 类似。

它滑动过整个图像 image, ⽤指定⽅法⽐较 templ 与图像尺⼨为 w×h 的重叠区域,并且将⽐较结果存到 result 中。

下⾯是不同的⽐较⽅法,可以使⽤其中的⼀种 (I 表⽰图像,T - 模板, R - 结果. 模板与图像重叠区域 x'=0..w-1, y'=0..h-1 之间求和):OpenCV模板匹配.可⽤的⽅法有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。

机器视觉应用技术实验09模版匹配

机器视觉应用技术实验09模版匹配

实验9 模板匹配一、实验目的1.掌握OpenCV下图像模板匹配方法的使用。

2.掌握AiCam框架的部署和使用。

二、实验环境硬件环境:PC机Pentium处理器双核2GHz以上,内存4GB以上操作系统:Windows7 64位及以上操作系统开发软件:MobaXterm实验器材:人工智能边缘应用平台实验配件:无三、实验内容1.算法原理1.1 基本描述模板匹配是一种用于在较大图像中搜索和查找模板图像位置的方法。

简单而言,模板就是一幅已知的小图像。

模板匹配就是在一幅大图像中搜寻目标,已知该图中有要找的目标,且该目标同模板有相同的尺寸、方向和图像,通过一定的算法可以在图中找到目标,确定其坐标位置。

1.2 专业术语●图像模板匹配:模板匹配是指在当前图像A内寻找与图像B最相似的部分,一般将图像A称为输入图像,将图像B称为模板图像。

模板匹配的操作方法是将模板图像B在图像A上滑动,遍历所有像素以完成匹配。

1.3 常用方法●图像模板匹配:OpenCV中matchTemplat方法去实现通过模板与目标图像进行寻找最佳匹配。

# image :输入一个待匹配的图像,支持8U 或者32F 。

# templ :输入一个模板图像,与image 相同类型。

# result :输出保存结果的矩阵,32F 类型。

# method :要使用的模板匹配方式。

opencv 中匹配方式有六种可供选择:# -cv::TM_SQDIFF# 计算模板与目标图像的方差,由于是像素值差值的平方的和,所以值越小匹配程度越高。

# -cv::TM_SQDIFF_NORMED# 范化的cv::TM_SQDIFF ,取值为0-1之间,完美匹配返回值为0。

# -cv::TM_CCORR# 使用dot product 计算匹配度,越高匹配度就好。

# -cv::TM_CCORR_NORMED# 范化的cv::TM_CCORR ,0-1之间。

# -cv::TM_CCOEFF# 采用模板与目标图像像素与各自图像的平均值计算dot product ,正值越大匹配度越高,负#值越大图像的区别越大,但如果图像没有明显的特征(即图像中的像素值与平均值接近)则返回值越接近0。

OpenCV 3.1.0 图像处理教程-27模板匹配

OpenCV 3.1.0 图像处理教程-27模板匹配
OpenCV 3.1.0 – 图像处理教程
模板匹配(Template Match)
模板匹配介绍 相关API介绍 代码演示
模板匹配介绍
模板匹配介绍
模板匹配就是在整个图像区域发现与给定子图像匹配 的小块区域。
所以模板匹配首先需要一个模板图像T(给定的子图像) 另外需要一个待检测的图像-源图像S 工作方法,在带检测图像上,从左到右,从上向下计
算模板图像与重叠子图像的匹配度,匹配程度越大, 两者相同的可能性越大。
模板匹配介绍配算法如下: 1. 计算平方不同
2. 计算相关性
3. 计算相关系数
模板匹配介绍 – 匹配算法介绍
计算归一化平方不同 计算归一化相关性
计算归一化相关系数
相关API介绍cv::matchTemplate
matchTemplate(
InputArray image,// 源图像,必须是8-bit或者32-bit浮点数图像
InputArray templ,// 模板图像,类型与输入图像一致
OutputArray result,// 输出结果,必须是单通道32位浮点数,假设源图像WxH,模板图像wxh, 则结果必须为W-w+1, H-h+1的大小。
int method,//使用的匹配方法
InputArray mask=noArray()//(optional) )
相关API介绍cv::matchTemplate
演示代码
模板匹配介绍
模板匹配就是在整个图像区域发现与给定子图像匹配 的小块区域。
所以模板匹配首先需要一个模板图像T(给定的子图像) 另外需要一个待检测的图像-源图像S 工作方法,在带检测图像上,从左到右,从上向下计

模板匹配算法

模板匹配算法

模板匹配算法模板匹配算法(Template Matching Algorithm)是一种基于图像识别的算法,它可以根据已有的模板信息,对于待匹配图像中的目标进行检测和识别。

这种算法在计算机视觉、机器人控制、智能交通、安防等领域中得到了广泛的应用。

一、算法原理模板匹配的过程可以简单描述为:在待匹配图像中搜索与指定模板最相似的局部区域,并标记其所在位置。

匹配程度的计算可以通过两幅图像的灰度值来实现。

模板匹配算法主要基于以下原理:1、模板图像与待匹配图像的灰度值变化连续和相似,且待匹配图像与模板图像的尺寸关系一致。

2、相对于待匹配图像,模板图像为小尺寸图像,可以忽略旋转和放缩等影响。

基于以上原理,我们可以通过以下几个步骤来实现模板匹配算法:1、读入待匹配图像和模板图像。

2、计算待匹配图像的灰度值和模板图像的灰度值,并将其归一化。

3、在待匹配图像中进行滑动窗口操作,将其分解为若干个小的局部区域。

4、在每个小局部区域内,计算其灰度值和模板图像的灰度值之间的匹配程度,并寻找与模板图像最相似的局部区域。

5、标记每个相似的局部区域的中心位置,并绘制相应矩形框。

二、算法优缺点模板匹配算法是一种简单易懂,容易实现的算法。

它具有以下几个优点:1、非常适合处理大尺寸且单一对象图像的匹配问题。

2、不需要复杂的预处理或模型训练,不依赖于外部数据集或学习算法。

3、可以在较短的时间内完成匹配操作,并对匹配结果确定性较高。

但是,模板匹配算法也存在以下缺点:1、非常敏感于光照变化、噪声、目标遮挡等因素,容易出现误报和漏报情况。

2、难以适用于多目标场景的处理,难以达到真正的智能感知水平。

3、需要占用大量的计算资源和内存,适用于小数据集的处理。

三、算法优化为了提高模板匹配算法的性能和鲁棒性,一些优化措施可以采取,包括:1、使用归一化的互相关函数(Normalized Cross-Correlation,NCC)来计算匹配程度,从而避免光照和噪声等因素的影响。

图像模板匹配

图像模板匹配

图像模板匹配
1、无信息损失下的模板匹配
多种方法,包括MAD,SSDA。

按点匹配,从左到右,从上到下依次遍历所有点。

取误差最小点。

2、有噪音情况下的匹配
A)寻找边缘法。

仅提取图像的线条信息,具体表现为获取图像中的物体。

物体边缘具有一定的特征,表现为物体的连续性,因为通过物体边缘可以描术一个物体,所以通过寻找物体边缘就可以寻找一个物体。

如何提取图像边缘?
边缘匹配
B)降噪法。

通过一定的方法忽略图像噪音,而只获得图像的稳定信息。

对于一副图像,总是有一定的特征,如果过于混乱,可以认为已经失去了其基本特征,不称之为有信息的图像。

除非是经过加密等特殊处理的图像。

如何踢除无用信息。

3、存在图像旋转的匹配
对一副图片做旋转,再做旋转。

4、有放大缩小的匹配
有插值法改造图像搜索。

模板匹配详解

模板匹配详解

模板匹配¶目标¶在这节教程中您将学到:•使用OpenCV函数matchTemplate在模板块和输入图像之间寻找匹配,获得匹配结果图像•使用OpenCV函数minMaxLoc在给定的矩阵中寻找最大和最小值(包括它们的位置).原理¶什么是模板匹配?¶模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术.它是怎么实现的?¶•我们需要2幅图像:1. 原图像(I):在这幅图像里,我们希望找到一块和模板匹配的区域2. 模板(T):将和原图像比照的图像块我们的目标是检测最匹配的区域:•为了确定匹配区域, 我们不得不滑动模板图像和原图像进行比较:•通过滑动, 我们的意思是图像块一次移动一个像素(从左往右,从上往下). 在每一个位置, 都进行一次度量计算来表明它是“好” 或“坏” 地与那个位置匹配(或者说块图像和原图像的特定区域有多么相似). •对于T覆盖在I上的每个位置,你把度量值保存到结果图像矩阵(R)中. 在R 中的每个位置都包含匹配度量值:上图就是TM_CCORR_NORMED方法处理后的结果图像R . 最白的位置代表最高的匹配. 正如您所见, 红色椭圆框住的位置很可能是结果图像矩阵中的最大数值,所以这个区域(以这个点为顶点,长宽和模板图像一样大小的矩阵) 被认为是匹配的.•实际上, 我们使用函数minMaxLoc来定位在矩阵R中的最大值点(或者最小值,根据函数输入的匹配参数) .OpenCV中支持哪些匹配算法?¶问得好. OpenCV通过函数matchTemplate实现了模板匹配算法. 可用的方法有6个:1. 平方差匹配method=CV_TM_SQDIFF这类方法利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大.b. 标准平方差匹配method=CV_TM_SQDIFF_NORMEDc. 相关匹配method=CV_TM_CCORR这类方法采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果.d. 标准相关匹配method=CV_TM_CCORR_NORMEDe. 相关匹配method=CV_TM_CCOEFF这类方法将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列).在这里f. 标准相关匹配method=CV_TM_CCOEFF_NORMED通常,随着从简单的测量(平方差)到更复杂的测量(相关系数),我们可获得越来越准确的匹配(同时也意味着越来越大的计算代价). 最好的办法是对所有这些设置多做一些测试实验,以便为自己的应用选择同时兼顾速度和精度的最佳方案.•在这程序实现了什么?o载入一幅输入图像和一幅模板图像块(template)o通过使用函数matchTemplate实现之前所述的6种匹配方法的任一个. 用户可以通过滑动条选取任何一种方法.o归一化匹配后的输出结果o定位最匹配的区域o用矩形标注最匹配的区域•下载代码: 单击这里•看一下代码:#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: TM CCORR NORMED \n 4: TM COEFF \n 5: TM COEFF NORMED"; createTrackbar( trackbar_label, image_window, &match_method,max_Trackbar, MatchingMethod );MatchingMethod( 0, 0 );waitKey(0);return0;}/*** @函数 MatchingMethod* @简单的滑动条回调函数*/void MatchingMethod( int, void* ){/// 将被显示的原图像Mat img_display;img.copyTo( img_display );/// 创建输出结果的矩阵int result_cols = img.cols - templ.cols +1;int result_rows = img.rows - templ.rows +1;result.create( result_cols, result_rows, CV_32FC1 );/// 进行匹配和标准化matchTemplate( img, templ, result, match_method );normalize( result, result, 0, 1, NORM_MINMAX, -1, Mat() );/// 通过函数 minMaxLoc 定位最匹配的位置double minVal; double maxVal; Point minLoc; Point maxLoc;Point matchLoc;minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );/// 对于方法 SQDIFF 和 SQDIFF_NORMED, 越小的数值代表更高的匹配结果. 而对于其他方法, 数值越大匹配越好if( match_method == CV_TM_SQDIFF || match_method ==CV_TM_SQDIFF_NORMED ){ matchLoc = minLoc; }else{ matchLoc = maxLoc; }/// 让我看看您的最终结果rectangle( img_display, matchLoc, Point( matchLoc.x + templ.cols , matchLoc.y + templ.rows ), Scalar::all(0), 2, 8, 0 );rectangle( result, matchLoc, Point( matchLoc.x + templ.cols , matchLoc.y + templ.rows ), Scalar::all(0), 2, 8, 0 );imshow( image_window, img_display );imshow( result_window, result );return;}1. 定义一些全局变量, 例如原图像(img), 模板图像(templ) 和结果图像(result) , 还有匹配方法以及窗口名称:2.Mat img; Mat templ; Mat result;3.char*image_window ="SourceImage";4.char*result_window ="Resultwindow";5.6.int match_method;7.int max_Trackbar =5;8. 载入原图像和匹配块:9.img = imread( argv[1], 1 );10.templ = imread( argv[2], 1 );11. 创建窗口,显示原图像和结果图像:dWindow( image_window,CV_WINDOW_AUTOSIZE );dWindow( result_window,CV_WINDOW_AUTOSIZE );14. 创建滑动条并输入将被使用的匹配方法.一旦滑动条发生改变,回调函数MatchingMethod就会被调用.15.char* trackbar_label ="Method:\n 0: SQDIFF \n 1: SQDIFF NORMED \n 2: TM CCORR \n 3: TM CCORR NORMED \n 4: TM COEFF \n 5: TM COEFF NORMED";16.createTrackbar( trackbar_label,image_window, &match_method, max_Trackbar, MatchingMethod );17. 一直等待,直到用户退出这个程序.18.waitKey(0);19.return0;20. 让我们先看看回调函数. 首先, 它对原图像进行了一份复制:21.Mat img_display;22.img.copyTo( img_display );23. 然后, 它创建了一幅用来存放匹配结果的输出图像矩阵. 仔细看看输出矩阵的大小(它包含了所有可能的匹配位置)24.int result_cols =img.cols -templ.cols +1;25.int result_rows =img.rows -templ.rows +1;26.27.result.create( result_cols,result_rows, CV_32FC1 );28. 执行模板匹配操作:29.matchTemplate( img, templ,result, match_method );很自然地,参数是输入图像I, 模板图像T, 结果图像R还有匹配方法(通过滑动条给出)30. 我们对结果进行归一化:31.normalize( result, result, 0, 1,NORM_MINMAX, -1, Mat() );32. 通过使用函数minMaxLoc,我们确定结果矩阵R的最大值和最小值的位置.33.double minVal; double maxVal;Point minLoc; Point maxLoc;34.Point matchLoc;35.36.minMaxLoc( result, &minVal,&maxVal, &minLoc, &maxLoc, Mat() );函数中的参数有:o result:匹配结果矩阵o&minVal和&maxVal:在矩阵result中存储的最小值和最大值o&minLoc和&maxLoc:在结果矩阵中最小值和最大值的坐标.o Mat():可选的掩模37. 对于前二种方法( CV_SQDIFF 和CV_SQDIFF_NORMED ) 最低的数值标识最好的匹配. 对于其他的, 越大的数值代表越好的匹配. 所以, 我们在matchLoc中存放相符的变量值:38.if( match_method ==CV_TM_SQDIFF ||match_method ==CV_TM_SQDIFF_NORMED )39. { matchLoc = minLoc; }40.else41. { matchLoc = maxLoc; }42. 显示原图像和结果图像. 再用矩形框标注最符合的区域:43.rectangle( img_display, matchLoc,Point( matchLoc.x +templ.cols , matchLoc.y +templ.rows ), Scalar::all(0), 2, 8, 0 );44.rectangle( result, matchLoc,Point( matchLoc.x +templ.cols , matchLoc.y +templ.rows ), Scalar::all(0), 2, 8, 0 );45.46.imshow( image_window,img_display );47.imshow( result_window, result );1. 开始测试我们的程序,一幅输入图像:还有一幅模版图像:2. 产生了一下结果图像矩阵(第一行是标准的方法SQDIFF, CCORR 和CCOEFF, 第二行是相同的方法在进行标准化后的图像).在第1列, 最黑的部分代表最好的匹配, 对于其它2列, 越白的区域代表越好的匹配.3. 正确的匹配在下面显示(右侧被矩形标注的人脸). 需要注意的是方法CCORR 和CCOEFF 给出了错误的匹配结果, 但是它们的归一化版本给出了正确的结果, 这或许是由于我们实际上仅仅考虑“最匹配”而没考虑其他可能的高匹配位置.。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要模板匹配就是把不同传感器或同一传感器在不同时间、不同成像条件下对同一景物获取的两幅或多幅图像在空间上对准,或根据已知模式到另一幅图中寻找相应模式的处理方法。

模板匹配是数字图像处理的重要组成部分之一。

简单而言,模板就是一幅已知的小图像。

模板匹配就是在一幅大图像中搜寻目标,已知该图中有要找的目标,且该目标同模板有相同的尺寸、方向和图像,通过一定的算法可以在图中找到目标,确定其坐标位置。

本文主要主要介绍了灰度相关的匹配方法,灰度相关的图像匹配算法是图像匹配算法中比较经典的一种,很多匹配技术都以它为基础进行延伸和扩展。

它是从待拼接图像的灰度值出发,对待匹配图像中一块区域与参考图像中的相同尺寸的区域使用最小二乘法或者其它数学方法计算其灰度值的差异,对此差异比较后来判断待拼接图像重叠区域的相似程度,由此得到待拼接图像重叠区域的范围和位置,从而使用MATLAB软件实现图像匹配。

当以两块区域像素点灰度值的差别作为判别标准时,最简单的一种方法是直接把各点灰度的差值累计起来。

另一种方法是计算两块区域的对应像素点灰度值的相关系数,相关系数越大,则两块图像的匹配程度越高。

该方法的匹配效果要更好,匹配成功率有所提高。

关键词:图像匹配;MATLAB;灰度相关目录1 需求分析 (1)1.1 问题描述 (1)1.2 基本要求 (1)2 设计方案 (2)2.1 相关概念 (2)2.2 算法设计 (2)3 仿真内容 (5)3.1 相关函数说明 (5)3.2 模版匹配源代码 (8)4 仿真结果及分析 (9)结束语 (11)参考文献 (12)1 需求分析1.1 问题描述计算机模式识别所要解决的问题,就是用计算机代替人去认识图像和找出一幅图像中人们感兴趣的目标物。

在机器识别物体的过程,常需把不同传感器或同一传感器在不同时间,不同成像条件下对同一景物获取的两幅或多幅图像在空间上对准,或根据已知模式到另一幅图中寻找相应的模式,这就叫做匹配。

模板匹配是一种最原始、最基本的模式识别方法。

研究某一特定对象物位于图像的位置,进而识别对象,这就是匹配的问题。

利用模板匹配可以在一幅图像中找到已知的物体。

这里的模板指的是一幅待匹配的图像,相当于模式识别的模式。

基本要求如下:(1).进行匹配的两幅图像为JPG格式或BMP格式。

(2).能够进行对两幅数字图像的匹配。

(3).采用交互式程序对图像进行匹配。

1.2 基本要求通过分析题目的基本要求,我将此使用两种方法实现匹配:一个是基于灰度的模板匹配,另一个是基于灰度的快速匹配。

在以上两种方法中,用户可以对两张图像进行匹配并显示匹配结果。

2 设计方案2.1 相关概念①数字图像:数字图像是由被称做像素的小块区域组成的二维像素矩阵。

一般把图像分成3种形式:单色图像,灰度图像和彩色图像。

②像素:表示图像颜色的最小单位③灰度图像:灰度图是指只含亮度信息,不含色彩信息的图像,就像平时看到的黑白照片:亮度由暗到明,变化是连续的。

灰度图的每个像素的亮度用一个数值来表示,通常数值范围在0—255之间,即可用一个字节来表示,0表示黑,255表示白,而其他表示灰度。

④点阵图:显示器的屏幕由可以发光的像素点组成. 并且从几何位置看, 所用这些像素点构成一个矩形的阵列.利用计算机控制各像素点按我们指定的要求发光,就构成了我们需要的图形.这种方式构成的图形我们可称之为点阵图形.⑤点阵图形的坐标系统:各像素点有一个坐标唯一指定了它的位置.如果点阵图形的大小是N×M, 那么它的点阵共有M行N 列, 每个像素点的位置就由它所在的行和列的位置所唯一确定. 这个行和列的位置就给出了点阵图形的坐标系统. 按照前面的顺序, 第m行, 第n列的像素点顺序数就是m+(n-1)N.反之, 顺序数为s的像素点在第s Mod N行, 第Int(s/N ) + 1列, 这里的s Mod N是s除以N后的余数, Int( s/N ) 是s/N的整数部分.需要注意的是第m行, 第n列的像素点的坐标可能不是(m; n), 而是(m-1; n-1). 这是因为有时为了在计算机中处理的方便, 像素点的行列的排序不是从1, 而是从0开始的。

我们常用的显示器的像素坐标就是如此。

2.2 算法设计由于各种各样的原因如(成象条件的差异)图象预处理,引入的误差等,参与图象匹配的模板与潜在的匹配子图象间通常存在着程度不同的不一致,因此根据模板在一幅陌生图象中检测出潜在的匹配对象并得出它在图象中的位置是一件复杂的工作。

模板匹配是指用一个较小的图像,即模板与源图像进行比较,以确定在源图像中是否存在与该模板相同或相似的区域,若该区域存在,还可确定其位置并提取该区域。

模板匹配常用的一种测度为模手术台与源图像对应区域的误差平方和。

设f(x,y)为M×N 的源图像,t(j,k)为J×K(J≤M,K≤N)的模板图像,则误差平方和测度定义为:11200(,)[(,)(,)]J K j k D x y f x j y k t j k --===++-∑∑ (2.1) 由上式展开可得: 111111220000(,)[(,)]2(,)(,)[(,)]J K J K J K j k j k j k D x y f x j y k t j k f x j y k t j k ------=====++-⋅+++∑∑∑∑∑∑ (2.2) 令11200(,)[(,)]J K j k DS x y f x j y k --===++∑∑ (2.3)1100(,)2[(,)(,)]J K j k DST x y t j k f x j y k --===⋅++∑∑ (2.4)11200(,)[(,)]J K j k DT x y t j k --===∑∑ (2.5)DS(x,y)称为源图像中与模板对应区域的能量,它与像素位置(x,y )有关,但随像素位置(x,y )的变化,DS(x,y)变化缓慢。

DST(x,y)模板与源图像对应区域的互相关,它随像素位置(x,y )的变化而变化,当模板t(j,k)和源图像中对应区域相匹配时取最大值。

DT(x,y)称为模板的能量,它与图像像素位置(x,y)无关,只用一次计算便可。

显然,计算误差平方和测度可以减少计算量。

基于上述分析,若设DS(x,y)也为常数,则用DST(x,y)便可进行图像匹配,当DST(x,y)取最大值时,便可认为模板与图像是匹配的。

但假设DS(x,y)为常数会产生误差,严重时将无法下确匹配,因此可用归一化互相关作为误差平方和测度,其定义为:11(,)(,)(,)J K t j k f x j y k R x y --⋅++=∑∑ (2.6)模板匹配的示意图如图图2.1所示,其中假设源图像f(x,y)和模板图像t(k,l)的原点都在左上角。

对任何一个f(x,y)中的(x,y),根据上式都可以算得一个R(x,y).当x和y变化时,t(j,k)在源图像区域中移动并得出R(x,y)所有值。

R(x,y)的最大值指出了与t(j,k)匹配的最佳位置,若从该位置开始在源图像中取出与模板大小相同的一个区域,便可得到匹配图像。

图2.1 模板匹配示意图3 仿真内容3.1 相关函数说明1、imread函数功能:从图像文件(BMP,HDF,JPEG,PCX,TIFF,XWD等格式)中读入图像数据。

格式:A=imread(文件名,’图像文件格式’)说明:文件名为指定图像文件名称的字符串。

’图像文件格式’为图像文件格式的字符串。

文件名必须在当前目录或MATLAB路径中,如果找不到则录找’文件名.图像文件格式’.A为无符号8位整数(uint8)。

如果文件灰度图像(详细解释见“算法设计”中的“概念解释”),则A为一个二维数组;如果文件是一个真彩色RGB图像,则A是一个三维数组(m×n×3)。

举例:A=imread(‘E:\temp_pictur e.jpg’);%读取存放在E盘下的名为temp_picture.jpg 的图像,并将其整个点阵数据传给A。

注:在MATLAB中申请一个变量时不需要指定类型,其具体类型由系统自动判别。

2、imwrite函数功能:交图像写入图像文件(以BMP,HDF,JPEG,PCX,TIFF,XWD等格式)。

格式:imwrite(A,文件名,‘图像文件格式’)说明:文件名为指定图像文件名称的字符串。

‘图像文件格式’是指定图像文件的保存格式的字符串。

如果A是一个无符号8位整数表示的灰度图像或真彩色图像,imwrite 直接交数组A中的值写入文件。

如果A为双精度浮点数,imwrite首先使用uint8(round(255*A))自动将数组中的值变换为无符号8位整数,即交[0,1]范围内的浮点数变换为[0,255]范围内8位整数,然后写入文件。

3、imshow函数功能:图像显示。

格式:imshow(I)说明:在图形窗口显示I,其中I为用imread函数赋值的变量,是一个图形矩阵。

4、rgb2gray函数功能:转换RGB图像或颜色映像表为灰度图像。

格式:I = rgb2gray(RGB)说明:RGB为用imread函数赋值的变量,是一个图形矩阵;I为一个表示灰度图像的二维数组。

5、imcrop函数功能:图像剪裁。

格式:Ⅰ:I2=imcrop(I)Ⅱ:I2=imcrop(I,RECT)说明:格式Ⅰ为交互方式,imcrop显示输入图像,等待用户用鼠标定义要剪裁的矩形。

格式Ⅱ为非交互方式,对灰度图像进行非交互方式的剪裁操作,通过四元素向量RECT=[xmin ymin width height]指定剪裁矩阵,这些值是定义在坐标系中的,xmin 和ymin是图像矩阵I的一处坐标,width是以此坐标为准向右的延伸的长度,height是以此坐标为准向下延伸的长度,由此构成要剪裁的矩形区域。

6、size函数功能:用来求出某一个变量的的大小参数。

格式:[x,y]=size(I)说明:I用imread函数赋值的变量,是一个图形矩阵且为灰度图像,x用来保存I的高度值,y用来保存I的宽度值。

7、mean2函数功能:求图像均值格式:m=mean2(A)说明:mean2函数可用来计算图像矩阵A的均值m,m是双精度标量。

举例:I=imread(‘temp_picture.jpg’);m=mean2(I)运行结果:m=107.67558、corr2函数功能:求图像间相关系数。

格式:r=cor2(A,B)说明:corr2函数计算图像矩阵A 与B 的相关系数,矩阵A 与B 的大小相同,如均为:m×n 。

计算公式如下:()()mn mn A A B B r --=∑∑ (3.1) 其中,A =mean2(A), B =mean2(B)。

相关文档
最新文档