这个例子展示了如何在一个较大的图像中找到一个模板图像。有时一个图像是另一个图像的子集。归一化互相关可以用来确定如何注册或对齐的图像平移其中之一。
洋葱= imread (“onion.png”);辣椒= imread (“peppers.png”);imshow(洋葱)
图中,imshow(辣椒)
选择相似的地区是很重要的。图像sub_onion
会是模板,并且一定要比图片小吗sub_peppers
.您可以使用下面的非交互式脚本获得这些子区域或交互式脚本。
%经常Rect_onion = [111 33 65 58];Rect_peppers = [163 47 143 151];sub_onion = imcrop(洋葱、rect_onion);sub_peppers = imcrop(辣椒、rect_peppers);%或%交互% (sub_onion rect_onion] = imcrop(洋葱);把胡椒选在洋葱下面% (sub_peppers rect_peppers] = imcrop(辣椒);选择整个洋葱%显示子图像图中,imshow (sub_onion)
图中,imshow (sub_peppers)
计算归一化互相关并将其显示为曲面图。互相关矩阵的峰值出现在子图像最相关的地方。normxcorr2
只对灰度图像有效,所以我们通过每个子图像的红色平面。
c = normxcorr2 (sub_onion (:,: 1), sub_peppers (:,: 1));图中,冲浪(c)阴影平
图像之间的总偏移量或平移量取决于互相关矩阵中峰值的位置,以及子图像的大小和位置。
通过相关性发现的%偏移量[max_c, imax] = max(abs(c(:)));[ypeak, xpeak] = ind2sub(size(c),imax(1));Corr_offset = [(xpeak-size(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 =圆(xoffset + 1);Xend = round(xoffset+ size(洋葱,2));ybegin =圆(yoffset + 1);yend =圆(yoffset +大小(洋葱,1));%从辣椒中提取区域,并与洋葱比较extracted_onion =辣椒(ybegin: yend xbegin: xend:);如果isequal(洋葱、extracted_onion) disp ('onion.png是从peppers.png中提取出来的')结束
Onion.png是从peppers.png中提取出来的
垫的洋葱
要覆盖的图像辣椒
,使用上面确定的偏移量。
recovered_onion = uint8(0(大小(辣椒)));recovered_onion (ybegin: yend xbegin: xend:) =洋葱;图中,imshow (recovered_onion)
显示一个平面辣椒
图像的recovered_onion
使用alpha混合的图像。
图,imshowpair(辣椒(:,:1),recovered_onion,“混合”)