www.pudn.com > picture1.zip > picture1.m


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%归一化互相关算法%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%显示两个原始图像; 
lily=imread('lily.tif'); 
flowers=imread('flowers.tif'); 
subplot(1,2,1),imshow(lily); 
subplot(1,2,2),imshow(flowers); 
%从两幅原始图像中找出两幅子图像; 
rect_lily=[93 13 81 69]; 
rect_flowers=[190 68 235 210]; 
sub_lily=imcrop(lily,rect_lily); 
sub_flowers=imcrop(flowers,rect_flowers); 
subplot(1,2,1),imshow(sub_lily) 
subplot(1,2,2),imshow(sub_flowers) 
%使用相关性分析两个子图像(图2中是相关性直方图);其中normxcorr2是归一化函数 
c=normxcorr2(sub_lily(:,:,1),sub_flowers(:,:,1)); 
figure,surf(c),shading flat 
%找到整幅图像的偏移; 
[max_c,imax]=max(abs(c(:))); 
[ypeak,xpeak]=ind2sub(size(c),imax(1)); 
corr_offset=[(xpeak-size(sub_lily,2)) 
    (ypeak-size(sub_lily,1))]; 
rect_offset=[(rect_flowers(1)-rect_lily(1)) 
    (rect_flowers(2)-rect_lily(2))]; 
offset=corr_offset+rect_offset; 
xoffset=offset(1); 
yoffset=offset(2); 
%观察待匹配图像是否位于基本图像中; 
xbegin=xoffset+1; 
xend=xoffset+size(lily,2); 
ybegin=yoffset+1; 
yend=yoffset+size(lily,1); 
extracted_lily=flowers(ybegin:yend,xbegin:xend,:); 
if isequal(lily,extracted_lily) 
    disp('lily.tif was extracted from flowers.tif') 
end 
%填充待匹配图像并将背景设为透明,然后贴到基本图像上以体现批准效果 
recovered_lily=uint8(zeros(size(flowers))); 
recovered_lily(ybegin:yend,xbegin:xend,:)=lily; 
[m,n,p]=size(flowers); 
mask=ones(m,n); 
i=find(recovered_lily(:,:,1)==0); 
mask(i)=.2;  %可以定义不同的透明程度,这里选择0.2 
figure,imshow(flowers(:,:,1))  %仅显示基本图像的红色分量 
hold on 
h=imshow(recovered_lily);  %粘贴匹配图像 
set(h,'AlphaData',mask)