資源描述:
《基于灰度的圖像配準matlab源程序》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、function[I_SSD,I_NCC]=template_matching(T,I)%圖像配準%[I_SSD,I_NCC]=template_matching(T,I)%輸入:T-模板I-輸入的原始圖像%I_SSD采用像素差平方和法(SSD)的匹配結(jié)果%I_NCC采用標準化互相關(guān)匹配法的匹配結(jié)果%將圖像轉(zhuǎn)換為雙精度型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)%子函數(shù)%功能:對彩色圖像進行匹配子函數(shù),其核心原理是從R、G、B三個子色調(diào)進行匹配[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));%融合三次匹配結(jié)果[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)%子函數(shù)%功能:對灰度圖像進行匹配子函數(shù)T_size=size(T);I_size=size(I);outsize=I_size+T_size-1;%在頻域內(nèi)進行相關(guān)計算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)%子函數(shù)T=flip(flip(T,1),2),3);functionB=unpadarry(A,Bsize)%子函數(shù)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)%子函數(shù)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