您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 采用相关分析进行图像的快速匹配定位
实验四:采用相关分析进行图像的快速匹配定位1.实验目的:a.掌握图像信号处理的基本概念和一般方法,学会读入图像信息。b.学习图像匹配的一般方法,了解相关估计在图像匹配和检测中的应用。c.熟悉图像匹配与校准定位的基本方法,学习二维图像信号的快速相关估计的基本算法,学会用FFT作快速相关估计。2.实验内容:a.读入图像数据。b.编写图像匹配的程序,从一幅图像中任取一幅子图(模板T),然后在另外一幅图像中寻找能和该子图匹配的目标(Si,j)的位置。c.设计程序界面,将匹配结果直观地显示出来。d.探讨快速算法。3.算法讨论及分析算法1:设模板T在被搜索图S中平移,模板覆盖下的那块子图像我们记做Si,j,(i,j)为这块子图像的左上角象素点在S中的坐标,从图1中,我们可以看出i和j的取值范围为:1i,jN-M+1,现在可以比较T和Si,j的内容,如果两者一致,则T和Si,j之差为零,所以可以用以下测度来衡量T和Si,j的相似程度。2,11,,,MMijmnDijSmnTmn(1)图4-1被搜索的图像(a)与模板(b)展开式(1),则有22,,111111,,2,,,MMMMMMijijmnmnmnDijSmnSmnTmnTmn(2)式(2)右边第三项表示模板的总能量,它是一个常数,与(i,j)无关;第一项是模板覆盖下的那块子图像的能量,它随着(i,j)的改变而缓慢变化;第二项是被覆盖子图和模板的互相关,它随着(i,j)的改变而变化。当T和Si,j匹配时,式(2)的第二项的取值最大。因此,我们可以用以下相关函数作相似性测度:,1122,1111,,,,,MMijmnMMMMijmnmnSmnTmnRijSmnTmn(3)易知0,1Rij,并且仅当,,,ijSijTij为常数时,,Rij取极大值,这时T和Si,j匹配。方法一:方法一采用的是完全按照相关系数的定义,使用循环函数,完成对相关系数的求解,程序流程图如下。开始使用matlab分别获取图像以及模板的信息输入图像x(n)将图像分区,获得与模板相匹配的区域相关系数0.95?根据公式计算相关系数绘出图像结束是否方法二:,11(,),(,)mnxyklRxysxkyltkl(4),(,)xyRxy为子块,sxy与模板图像t相关系数,可通过FFT快速计算,根据FFT的性质有,(,)(,),xyRxyIFFTSuvTuv式中(,)Suv为基准图像,sxy的傅里叶变换,,Tuv为模板图像T的傅里叶变换的共轭,因此可通过一次FFT变换和IFFT变化求出整个被搜索图像与模板图像相关系数。根据公式(3),需要计算基准图像的能量值S2。分析得之,可以看出,相邻点的计算含有大量的重复操作。经分析可得,12222,1,1111,,,(,)mnmnxmxyxyijijixSijSijSiynSiy(5)122221,,1111,,,(,)ynmnmnxyxyijijjySijSijSxmjSxj(6)利用之前的结果,可以节省一定的计算时间。开始使用matlab分别获取图像以及模板的信息输入图像x(n)根据公式,利用FFT求解模板与图像区域之间的互相关系数相关系数0.95?根据公式计算相关系数绘出图像结束是否根据公式(6),求解图像区域的能量4.实验结果及分析该实验使用图片pic1_2.bmp,使用模板templet1_2.bmp。在matlab中,读入的图像数据为图像每一个像素的灰度值,将模板的灰度值存在一个向量中,与原图进行匹配,如果相关系数达到极大值,则说明匹配良好,找到搜索的结果。(a)被搜索的图片pic1_2.bmp(b)被搜索的图片templet1_2.bmp(c)搜索的结果图4-2实验所使用的图片表1两种方法计算时间对比序号方法计算时间1方法一110s2方法二5.2s5.原程序清单方法一:clearallS1=imread('pic1_2.bmp');%读入被搜索的图片pic1_2.bmpS=double(S1);%读入的图片数据类型是uint8,转换类型为doubleg1=imread('templet1_2.bmp');%读入模板图片templet1_2.bmpg=double(g1);%读入的图片数据类型是uint8,转换类型为doublex=size(g,1);%获取g的行数m=size(S,1);%S的X坐标y=size(g,2);%获取g的列数n=size(S,2);%S的Y坐标Sxy=0*g;%定义临时变量tempg=0;tempg=double(tempg);gvector=ones(x*y,1);%定义临时变量,将g矩阵存储为列向量的形式Svector=0*gvector;%定义临时变量,将S矩阵的分块存储为列向量的形式fori1=1:1:x%使用循环,将g矩阵存储为列向量的形式fori2=1:1:ygvector((i1-1)*y+i2,1)=g(i1,i2);endendfornumy=1:1:n-y+1%使用循环,将S矩阵分块存储为列向量的形式fornumx=1:1:m-x+1fori1=1:1:xfori2=1:1:ySxy(i1,i2)=S(i1+numx-1,i2+numy-1);endendfori1=1:1:xfori2=1:1:ySvector((i1-1)*y+i2,1)=Sxy(i1,i2);endendR=corrcoef(gvector,Svector);%求得S分块与模板g的相关系数ifR(1,2)0.95%找出图片中与模板相匹配的位置,并标记imshow(S1)fori=1:1:ytext(numy+i-1,numx,'\o','Color','red');endfori=1:1:xtext(numy,numx+i-1,'\o','Color','red');endfori=1:1:xtext(numy+y-1,numx+i-1,'\o','Color','red');endfori=1:1:ytext(numy+i-1,numx+x-1,'\o','Color','red');endbreak;endendifR(1,2)0.95break;endend方法二clearallS1=imread('pic1_1.bmp');%读入被搜索的图片pic1_2.bmpS=double(S1);%读入的图片数据类型是uint8,转换类型为doubleg1=imread('templet1_1.bmp');%读入模板图片templet1_2.bmpg=double(g1);%读入的图片数据类型是uint8,转换类型为doublex=size(g,1);%获取g的行数m=size(S,1);%S的X坐标y=size(g,2);%获取g的列数n=size(S,2);%S的Y坐标[R,corr1]=Dfft(S,g,1,1);%使用FFT和IFFT函数,求解相关系数gg=sum(sum(g.^2));%使用FFT和IFFT函数,求解相关系数St1=zeros(1,y);%定义变量St2=St1;%定义变量fornumy=1:1:n-y+1fornumx=1:1:m-x+1if(numx==1)&&(numy==1)%求解numx=1时的Sxy的值,为之后求解numx!=1时的Sxy做准备Sxy=S(numx:1:x+numx-1,numy:1:y+numy-1);ss0=sum(sum(Sxy.^2));ss=ss0;elseif(numx==1)&&(numy~=1)%使用公式(5)计算列的St1=S(numx:1:numx+x-1,numy-1);St2=S(numx:1:numx+x-1,numy+y-1);ss0=ss0+sum(St2.^2)-sum(St1.^2);ss=ss0;else%根据公式(6)求解numx!=1时的Sxy的值,St1=S(numx-1,numy:1:numy+y-1);St2=S(numx+x-1,numy:1:numy+y-1);ss=ss+dot(St2,St2)-dot(St1,St1);endR1=corr1(numx,numy)/sqrt(gg*ss);%求基准图像与模板图像之间的相关系数ifR10.95%找出图片中与模板相匹配的位置,并标记imshow(S1)fori=1:1:ytext(numy+i-1,numx,'\o','Color','red');endfori=1:1:xtext(numy,numx+i-1,'\o','Color','red');endfori=1:1:xtext(numy+y-1,numx+i-1,'\o','Color','red');endfori=1:1:ytext(numy+i-1,numx+x-1,'\o','Color','red');endbreak;endendifR10.95break;endendfunction[R,corr1]=Dfft(I1,I2,i,j)[m1n1]=size(I1);[m2n2]=size(I2);I1=padarray(I1,[1024-m1,1024-n1],'post');I2=padarray(I2,[1024-m2,1024-n2],'post');%计算FFT,乘以时域信号然后进行fftFI1=(fft2(I1));FI2=(fft2(I2));%求解互相关,f(x,y)°h(x,y)=ifft2{conj(F(u,v)).*H(u,v)},复数共轭分别对模板和图像进行如下corr1=(ifft2(FI1.*conj(FI2)));R=corr1(i,j);6.实验后的体会和建议通过该实验,通过自己编程,掌握图像信号处理的基本概念和一般方法,学会读入图像信息。学习图像匹配的一般方法,了解相关估计在图像匹配和检测中的应用。熟悉图像匹配与校准定位的基本方法。建议在matlab方面多给一些提示,比如一些基本指令和基本思路,因为在使用matlab不是很熟悉,所以在编程和了解matlab上投入了较多的精力,以及图像数据类型转换上学习了较长的时间。但是相比于实验2,在使用matlab上有了较大的进步。
本文标题:采用相关分析进行图像的快速匹配定位
链接地址:https://www.777doc.com/doc-6263840 .html