主要内容

使用归一化交叉相关注册图像

此示例显示如何在更大的图像中找到模板图像。有时一个图像是另一个图像。标准化的互相关可用于确定如何通过翻译其中一个来注册或对齐图像。

第1步:读取图像

洋葱= imread('onion.png');Peppers = imread('peppers.png');imshow(洋葱)

图包含轴。轴包含类型图像的对象。

图,imshow(辣椒)

图包含轴。轴包含类型图像的对象。

第2步:选择每个图像的子区域

重要的是选择类似的地区。图片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)

图包含轴。轴包含类型图像的对象。

第3步:做归一化的互相关并找到峰值的坐标

计算标准化的互相关并将其显示为表面图。跨相关矩阵的峰值发生在Sub_Images最佳相关的地方。normxcorr2.仅适用于灰度图像,因此我们将其传递给每个子图像的红色平面。

c = normxcorr2(sub_onion(:,:,1),sub_peppers(:,:,1));图,冲浪(c),阴影平坦的

图包含轴。轴包含类型表面的物体。

第4步:在图像之间找到总偏移量

图像之间的总偏移或转换取决于互相关矩阵中峰值的位置,以及子图像的大小和位置。

相关偏移量[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);

步骤5:看看洋葱图像是否从辣椒图像中提取

弄清楚哪里洋葱落在里面胡椒

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

步骤6:将洋葱图像填充到辣椒图像的大小

洋葱图像叠加胡椒,使用上面确定的偏移量。

Recovered_onion = UINT8(零(百分比)));recovered_onion(YBEGIN:YEND,XBEGIN:XEND,:) =洋葱;图,imshow(checovered_onion)

图包含轴。轴包含类型图像的对象。

第7步:使用Alpha混合将图像显示在一起

显示一个平面胡椒与之与恢复_nion.使用alpha混合的图像。

图,imshowpair(Peppers(::,:,1),recovered_onion,'混合'

图包含轴。轴包含类型图像的对象。