模板匹配MATLAB实现及算法优化范本模板.docx

上传人:b****4 文档编号:12159870 上传时间:2023-04-17 格式:DOCX 页数:17 大小:69.66KB
下载 相关 举报
模板匹配MATLAB实现及算法优化范本模板.docx_第1页
第1页 / 共17页
模板匹配MATLAB实现及算法优化范本模板.docx_第2页
第2页 / 共17页
模板匹配MATLAB实现及算法优化范本模板.docx_第3页
第3页 / 共17页
模板匹配MATLAB实现及算法优化范本模板.docx_第4页
第4页 / 共17页
模板匹配MATLAB实现及算法优化范本模板.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

模板匹配MATLAB实现及算法优化范本模板.docx

《模板匹配MATLAB实现及算法优化范本模板.docx》由会员分享,可在线阅读,更多相关《模板匹配MATLAB实现及算法优化范本模板.docx(17页珍藏版)》请在冰豆网上搜索。

模板匹配MATLAB实现及算法优化范本模板.docx

模板匹配MATLAB实现及算法优化范本模板

 

模板匹配MATLAB实现及算法优化

 

一、引言

现代社会已进入信息时代,随着计算机技术、通信技术和数学的发展,图像信息处理能力和水平也不断提高,相应的也得到和更多关注、研究和更加广泛的应用。

图像匹配是图像处理的一项关键技术,可广泛用于目标识别与跟踪、立体视觉、变化检测、车场车牌识别、人脸识别、机器人导航、测绘、等领域,已成为一门新兴的分支学科。

由于拍摄时间、拍摄角度、自然环境的变化、多种传感器的使用和传感器本身的缺陷,使拍摄的图像不仅受噪声的影响,而且存在严重的灰度失真和几何畸变。

在这种条件下,如何有效地进行图像匹配一直是人们研究的热点和难点。

要研究模板匹配,首先必须明确模板匹配的定义:

模板匹配是指通过一定的匹配算法在两幅或多幅图像之间识别同名点,如二维图像匹配中通过比较目标区和搜索区中相同大小的窗口的相关系数,取搜索区中相关系数最大所对应的窗口中心点作为同名点。

其实质是在基元相似性的条件下,运用匹配准则的最佳搜索问题。

简单的讲就是,要判读一幅大图像中是否存在某种已知的图案,则以一幅与该图案有着相同尺寸和方向的小图像为模板,通过一定的算法可以在图中找到目标,确定其坐标位置。

那么如何实现模板与原图像的匹配呢?

下面将结合一个具体例子说明模板匹配的实现过程。

二、问题描述及解决方法

1.问题描述

现有模板如下图:

原图如下图:

问题:

如何在原图中找到模板所处的位置,并把该位置标记出来。

2.解决方法

首先必须建立判断模板与原图相应位置相似程度的准则.对于彩色图像,是基于图像的特征匹配;而灰度图像,则是基于相关函数.本实验的处理对象主要是灰度图片。

相关函数又分成两类:

(1)差值测度。

计算公式如下:

(2)相关测度。

计算公式如下:

显然,上式中的p(x,y)取值范围是0到1.越接近于0,表示两图像相差越大;越接近于1,表示两图像越相似。

有了描述相似程度的数学模型,接下来就可以用MATLAB编程实现模板匹配,从而解决上述问题了。

三、MATLAB实现

要实现这个程序,必须有三个重要组成部分:

1.模板循环

功能:

实现模板扫过原图的每一个像素点.

语句:

fori=1:

M—m

forj=1:

N—n

end

end

描述:

以模板左上角第一个点为标志点,使其依次从左到右、从上到下扫过原图每一个像素点。

2.相似性判断

功能:

在每一次循环时,计算模板与覆盖的原图区域的相似程度,并判断两图像是否相似。

语句:

temp=imcrop(im,[j,i,n-1,m-1]);

r=corr2(temp,T);%È¡µÃÏà¹ØϵÊý

ifr〉0.95%¹æ¶¨ÖµÎª0。

95

end

描述:

(1)imcrop是MATLAB自带库函数,实现的是图像裁剪的功能,这里使用此函数,可以得到原图上被模板覆盖区域,与模板同尺寸的矩阵.

(2)corr2也是MATLAB自带库函数,是用来计算两个矩阵的相关测度的。

(3)0.95是置信阈值,当相关测度大于0。

95时,就认为模板匹配成功。

3.标识原图上匹配成功的区域

功能:

用框圈出或高亮显示原图上与模板匹配成功的区域位置。

语句:

plot(j:

j+n,i,'w’);

plot(j:

j+n,i+m,’w');

plot(j,i:

i+m,’w’);

plot(j+n,i:

i+m,’w');

描述:

此语句实现用方框圈出匹配成功区域.

实验结果如图:

四、算法优化

模板匹配在实际应用中经常用于制导导引头、传感器等,这类设备计算能力、内存有限,且要求在较短时间内得到处理结果。

因此,以减少处理计算量、加快处理速度为目的的算法优化必不可少。

我个人将优化的方式分为三种:

循环次数优化,具体有粗精匹配相结合、乱序匹配等;相似性计算优化,这是我们此次实验的着眼点,将做具体介绍;以及以上两种思路的结合优化。

通过上文列举的相似性计算准则可知,不同数学模型的计算量明显不同,而多种相似性计算公式的存在也为算法优化提供了可能。

1。

差值测度优化

思路:

相比相关测度计算,差值测度只计算减法,所以在计算量上将大大降低。

语句:

temp=imcrop(im,[j,i,n—1,m—1]);

a=temp-T;

b=abs(a);

e=max(a);

ife<50;

end

结果:

未优化运行时间:

T=3。

9746s

采用差值测度优化后运行时间:

T=1.7524s

2.TMP优化

思路:

TMP法首先认为原图与模板具有相同的直流分量,那么只要检测除直流分量能量外的能量水平,就可以判断相似性。

语句:

Nimage=im(i:

i+r2-1,j:

j+c2-1);

Nimage=Nimage—mean(mean(Nimage));

corr=sum(sum(Nimage。

*image22));

M(i,j)=corr/sqrt(sum(sum(Nimage。

^2)));

结果:

采用TMP优化算法后运行时间:

T=1。

5853s

3。

TMC优化

思路:

TMC法原理与TMP法相同,只是在计算时省略了归一化过程。

语句:

Nimage=im(i:

i+r2—1,j:

j+c2-1);

Nimage=Nimage-mean(mean(Nimage));

corr=sum(sum(Nimage。

*image22));

corrMat(i,j)=corr;

结果:

采用TMC优化算法后运行时间:

T=1。

140s

4.边缘检测优化

思路:

以上所有算法的处理对象都是模板及原图包含的所有信息,但是区别一个物体最直观的方式是区分他的轮廓,所以如果先提取原图与模板轮廓,然后再进行匹配计算,则在保证精度的基础上可以大大减少信息处理量.

语句:

tedge=edge(tt);

wedge=edge(ww);

out=filter2(tedge,wedge);

o=max(max(out));

output=(1/o)*out;

结果:

采用边缘检测优化算法后运行时间:

T=0.0964s

结论:

以上4种优化算法相比原未优化算法,在处理相同模板匹配问题的前提下,都显著提升了运行速度.这几种算法中,边缘检测优化算法更具优势.

五、主要程序

1。

未优化原程序

clc

clear

closeall

tic;

im=imread(’D:

\1120120260ÕÔ´«\t—m\letters。

jpg’);%¶ÁÈ¡ÔͼÏñ

T=imread(’D:

\1120120260ÕÔ´«\t-m\K.jpg’);%¶ÁÈ¡Æ¥ÅäͼÏñ

imshow(im);

im=rgb2gray(im);%½«Ô.ͼ»Ò¶È»¯

T=rgb2gray(T);%½«Æ¥Åäͼ»Ò¶È»¯

im=double(im);

T=double(T);

[m,n]=size(T);%»ñÈ¡Æ¥ÅäͼÏóµÄ´óС³ß

[M,N]=size(im);%»ñÈ¡Ô。

ͼÏóµÄ´óС³ß´ç

holdon

fori=1:

M—m

forj=1:

N-n

temp=imcrop(im,[j,i,n—1,m—1]);

r=corr2(temp,T);%È¡µÃÏà¹ØϵÊý

ifr>0.95%¹æ¶¨ÖµÎª0。

95

%ÏÂÃæÓÃplotº¯ÊýÔÚÔ。

ͼµÄ×ø±êϵÉÏ».³öÆ¥ÅäÇøÓò

plot(j:

j+n,i,’w’);

plot(j:

j+n,i+m,’w’);

plot(j,i:

i+m,’w’);

plot(j+n,i:

i+m,'w’);

end

end

end

time=toc;

2。

差值测度优化

clc

clear

closeall

tic;

im=imread(’D:

\1120120260ÕÔ´«\t-m\letters.jpg’);%¶ÁÈ¡Ô.ͼÏñ

T=imread(’D:

\1120120260ÕÔ´«\t-m\K。

jpg');%¶ÁÈ¡Æ¥ÅäͼÏñ

imshow(im);

im=rgb2gray(im);%½«Ô。

ͼ»Ò¶È»¯

T=rgb2gray(T);%½«Æ¥Åäͼ»Ò¶È»¯

im=double(im);

T=double(T);

[m,n]=size(T);%»ñÈ¡Æ¥ÅäͼÏóµÄ´óС³ß

[M,N]=size(im);%»ñÈ¡Ô.ͼÏóµÄ´óС³ß´ç

holdon

fori=1:

M—m

forj=1:

N-n

temp=imcrop(im,[j,i,n—1,m—1]);

a=temp-T;

b=abs(a);

e=max(a);

ife<50;%ÈÏΪ×î´óÎó²îСÓÚ50¼´Æ¥Åä³É¹¦

%ÏÂÃæÓÃplotº¯ÊýÔÚÔ.ͼµÄ×ø±êϵÉÏ»。

³öÆ¥ÅäÇøÓò

plot(j:

j+n,i,'w');

plot(j:

j+n,i+m,'w’);

plot(j,i:

i+m,’w’);

plot(j+n,i:

i+m,'w’);

end

end

end

time=toc;

3.TMP优化

clc

clear

closeall

tic;

im=imread('D:

\1120120260ÕÔ´«\t—m\letters.jpg’);%¶ÁÈ¡ÔͼÏñ

T=imread(’D:

\1120120260ÕÔ´«\t-m\K.jpg');%¶ÁÈ¡Æ¥ÅäͼÏñ

im=rgb2gray(im);%½«Ô。

ͼ»Ò¶È»¯

T=rgb2gray(T);%½«Æ¥Åäͼ»Ò¶È»¯

im=double(im);

T=double(T);

[r1,c1]=size(im);

[r2,c2]=size(T);

image22=T—mean(mean(T));

%»ùÓÚÄÜÁ¿·¨µÄÏà¹ØÐÔ¼ì²â

M=[];

fori=1:

(r1—r2+1)

forj=1:

(c1-c2+1)

Nimage=im(i:

i+r2—1,j:

j+c2—1);

Nimage=Nimage—mean(mean(Nimage));%ÓëÄ£°åÖغϲ¿·ÖÔ.ͼÏñµÄ¾ùÖµ²î

corr=sum(sum(Nimage。

*image22));

M(i,j)=corr/sqrt(sum(sum(Nimage.^2)));

end

end

%plotboxonthetargetimage

result=plotbox(im,T,M);

imshow(uint8(result));title('MatchingResultusingtmp');

%figure,

%subplot(2,2,1),imshow(uint8(T));title(’Template');

%subplot(2,2,2),imshow(uint8(im));title('Target’);

%subplot(2,2,3),imshow(uint8(result));title('MatchingResultusingtmp');

time=toc;

4。

TMC优化

clc

clear

closeall

tic;

im=imread(’D:

\1120120260ÕÔ´«\t-m\letters。

jpg');%¶ÁÈ¡Ô。

ͼÏñ

T=imread(’D:

\1120120260ÕÔ´«\t—m\K.jpg');%¶ÁÈ¡Æ¥ÅäͼÏñ

im=rgb2gray(im);%½«Ô.ͼ»Ò¶È»¯

T=rgb2gray(T);%½«Æ¥Åäͼ»Ò¶È»¯

im=double(im);

T=double(T);

[r1,c1]=size(im);

[r2,c2]=size(T);

%Ä£°åµÄ¾ùÖµ²î

image22=T—mean(mean(T));

corrMat=[];

%»ùÓÚ¾ùÖµ²îµÄÏà¹ØÐÔ¼ìÑé

fori=1:

(r1-r2+1)

forj=1:

(c1—c2+1)

Nimage=im(i:

i+r2—1,j:

j+c2—1);

Nimage=Nimage—mean(mean(Nimage));%ÓëÄ£°åÖغϲ¿·ÖµÄͼÏñ¾ùÖµ²î

corr=sum(sum(Nimage.*image22));

corrMat(i,j)=corr;

end

end

%plotboxonthetargetimage

result=plotbox(im,T,corrMat);

imshow(uint8(result));title(’MatchingResultusingtmc');

%figure,

%subplot(2,2,1),imshow(uint8(T));title('Template’);

%subplot(2,2,2),imshow(uint8(im));title(’Target’);

%subplot(2,2,3),imshow(uint8(result));title('MatchingResultusingtmc');

time=toc;

5.边缘检测优化

clc

clear

closeall

tic;

%¶ÁÈëͼÏñS

w=imread(’D:

\1120120260ÕÔ´«\t—m\letters.jpg');

w=im2double(w);

sizw=size(w);

%figure

%imshow(w)

%title(’InputImage’)

%¶ÁÈëÄ£°åT

t=imread(’D:

\1120120260ÕÔ´«\t-m\K。

jpg');

t=im2double(t);

sizt=size(t);

%figure

%imshow(t)

%title('TargetImage')

ww=rgb2gray(w);

tt=rgb2gray(t);

%ÓÅ»¯-ÓñßÔµ½øÐÐÏà¹Ø¼ì²â

tedge=edge(tt);

wedge=edge(ww);

%²ÉÓþí»ýÅжÏÏà¹ØÐÔ£¬ÈôÏàͬ£¬¾í»ý×î´ó

out=filter2(tedge,wedge);

o=max(max(out));

output=(1/o)*out;

%ÕÒµ½Ä£°åλÖ㬲¢¸ßÁÁÏÔʾģ°åÇøÓò

pixel=find(output==1);

pcolumn=fix(pixel/sizw

(1));

prow=mod(pixel,sizw

(1));

rdis=fix(sizt

(1)/2);

cdis=fix(sizt

(2)/2);

cmin=pcolumn—cdis;

cmax=pcolumn+cdis;

rmin=prow-rdis;

rmax=prow+rdis;

c=[cmincmincmaxcmax];

r=[rminrmaxrmaxrmin];

m=roipoly(ww,c,r);

m=im2double(m);

%figure,imshow(m);

m=0.5*(m+1);

mask(:

,:

,1)=m;

mask(:

:

2)=m;

mask(:

,3)=m;

final=mask。

*w;

figure

imshow(final)

title('ResultImage')

time=toc;

6。

plotbox子程序

functionresult=plotbox(im,T,M);

[r1,c1]=size(im);

[r2,c2]=size(T);

[r,c]=max(M);

[r3,c3]=max(max(M));

i=c(c3);

j=c3;

result=im;

forx=i:

i+r2—1

fory=j

result(x,y)=255;

end

end

forx=i:

i+r2—1

fory=j+c2-1

result(x,y)=255;

end

end

forx=i

fory=j:

j+c2—1

result(x,y)=255;

end

end

forx=i+r2—1

fory=j:

j+c2-1

result(x,y)=255;

end

end

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 哲学历史

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1