此示例显示如何在更大的图像中找到模板图像。有时一个图像是另一个图像。标准化的互相关可用于确定如何通过翻译其中一个来注册或对齐图像。
洋葱= imread('onion.png');Peppers = imread('peppers.png');imshow(洋葱)
图,imshow(辣椒)
重要的是选择类似的地区。图片sub_onion.
将是模板,并且必须小于图像sub_peppers.
。您可以使用下面的非交互式脚本获取这些子区域或者交互式脚本。
%非交互式intr_onion = [111 33 65 58];rect_peppers = [163 47 143 151];sub_onion = imcrop(洋葱,int_onion);sub_peppers = imcrop(Peppers,Rect_peppers);% 或者%交互%[sub_onion,int_onion] = imcrop(洋葱);%选择洋葱下面的胡椒%[sub_peppers,rect_pepppers] = imcrop(辣椒);%选择整个洋葱%显示子图像图,imshow(sub_onion)
图,imshow(sub_peppers)
计算标准化的互相关并将其显示为表面图。跨相关矩阵的峰值发生在Sub_Images最佳相关的地方。normxcorr2.
仅适用于灰度图像,因此我们将其传递给每个子图像的红色平面。
c = normxcorr2(sub_onion(:,:,1),sub_peppers(:,:,1));图,冲浪(c),阴影平坦的
图像之间的总偏移或转换取决于互相关矩阵中峰值的位置,以及子图像的大小和位置。
相关偏移量[max_c,imax] = max(abs(c(:)));[ypeak,xpeak] = Ind2sub(尺寸(c),imax(1));corr_offset = [(xpeak大小(sub_onion,2))(ypeak-size(sub_onion,1))];子图像位置的百分比相对偏移rect_offset = [(rect_peppers(1)-rect_onion(1))(rect_peppers(2)-rect_onion(2))];%总偏移量offset = corr_offset + rect_offset;xoffset =偏移(1);Yoffset =偏移(2);
弄清楚哪里洋葱
落在里面胡椒
。
xbegin = round(xoffset + 1);xend = round(xoffset +尺寸(洋葱,2));YBEGIN =圆形(Yoffset + 1);YEND = ROUND(YOFFSET +尺寸(洋葱,1));%从辣椒提取区域并与洋葱相比extracted_onion =辣椒(Ybegin:yend,xbegin:xend,:);如果Isequal(洋葱,提取物)DISP('onion.png是从Peppers.png'中提取的)结尾
从Peppers.png中提取洋葱.png
垫洋葱
图像叠加胡椒
,使用上面确定的偏移量。
Recovered_onion = UINT8(零(百分比)));recovered_onion(YBEGIN:YEND,XBEGIN:XEND,:) =洋葱;图,imshow(checovered_onion)
显示一个平面胡椒
与之与恢复_nion.
使用alpha混合的图像。
图,imshowpair(Peppers(::,:,1),recovered_onion,'混合')