资源描述:
《基于灰度的图像配准matlab源程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、function[I_SSD,I_NCC]=template_matching(T,I)%图像配准%[I_SSD,I_NCC]=template_matching(T,I)%输入:T-模板I-输入的原始图像%I_SSD采用像素差平方和法(SSD)的匹配结果%I_NCC采用标准化互相关匹配法的匹配结果%将图像转换为双精度型T=double(T);I=double(I);if(size(T,3)==3)%如果是彩色图像,则按照彩色图像匹配方法[I_SSD,I_NCC]=template_matching_color(T,I);else%如果是灰度图像,则按照
2、灰度图像匹配方法进行匹配[I_SSD,I_NCC]=template_matching_gray(T,I);endfunction[I_SSD,I_NCC]=template_matching_color(T,I)%子函数%功能:对彩色图像进行匹配子函数,其核心原理是从R、G、B三个子色调进行匹配[I_SSD_R,I_NCC_R]=template_matching_gray(T(:,:,1),I(:,:,1));[I_SSD_G,I_NCC_G]=template_matching_gray(T(:,:,2),I(:,:,2));[I_SSD_B,I_
3、NCC_B]=template_matching_gray(T(:,:,3),I(:,:,3));%融合三次匹配结果[I_SSD]=(I_SSD_R+I_SSD_G+I_SSD_B)/3;[I_NCC]=(I_NCC_R+I_NCC_G+I_NCC_B)/3;function[I_SSD,I_NCC]=template_matching_gray(T,I)%子函数%功能:对灰度图像进行匹配子函数T_size=size(T);I_size=size(I);outsize=I_size+T_size-1;%在频域内进行相关计算if(length(T_size
4、)==2)FT=fft2(rot90(T,2),outsize(1),outsize(2));FI=fft2(I,outsize(1),outsize(2));Icorr=real(ifft2(F1.*FT));elseFT=fftn(rot90_3D(T),outsize);FI=fftn(I,outsize);Icorr=real(ifftn(FI.*FT));endLocalQSumI=local_sum(I.*I,T_size);QSumT=sum(T(:).^2);%计算模板和图像的像素差平方和I_SSD=LocalQSumI+QSumT-*I
5、corr;%将其皈依化到0和1之间I_SSD=I_SSD-min(I_SSD(:));I_SSD=1-(I_SSD./max(I_SSD(:));I_SSD=unpsdsrray(I_SSD,size(I));if(nargout>1)LocalSumI=local_sum(I,T,size);stdI=sqrt(maxa(LocalQSumI-(LocalSumI.^2)/numel(T),0));stdT=sqrt(numel(T)-1)*Std(T(:));meanIT=LocalSumI*Sum(T(:))/numel(T);I_NCC=0.5+
6、(Icorr-meanIT)./(2*stdT*max(stdT/le5));I_NCC=unpadarray(I_NCC,size(I));endfunctionT=rot90_3D(T)%子函数T=flip(flip(T,1),2),3);functionB=unpadarry(A,Bsize)%子函数Bstart=ceil((size(A)-Bsize)/2)+1;Bend=Bstart+Bsize-1;if(ismatrix(A))B=A(Bstart(1):Bend(1).Bstart(2),Bend(2));elseif(ndims(A)==
7、3)B=A(Bstart(1):Bend(1),Bstart(2),Bend(2),Bstart(2),Bend(3));endfunctionlocal_sum_I=local_sum(I,T_size)%子函数B=padartay(I,T_size);if(length(T_size)==2)s=cumsum(B,1);c=s(1+T_size(1):end-1,:)-s(1:end-T_size(1)-1,:);s=cumsum(c,2);local_sum_I=s(:,1+T_size(2):end-1)-s(:,1:end-T_size(2)-
8、1);elses=cumsum(B,1);c=s(1+T_size(1):end