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)