主要内容

使用归一化互相关注册图像

这个例子展示了如何在一个较大的图像中找到一个模板图像。有时一个图像是另一个图像的子集。归一化互相关可以用来确定如何注册或对齐的图像平移其中之一。

步骤1:读取图像

洋葱= imread (“onion.png”);辣椒= imread (“peppers.png”);imshow(洋葱)

图中包含一个轴。轴包含一个图像类型的对象。

图中,imshow(辣椒)

图中包含一个轴。轴包含一个图像类型的对象。

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

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

图中包含一个轴。轴包含一个图像类型的对象。

第三步:进行归一化互相关,找到Peak的坐标

计算归一化互相关并将其显示为曲面图。互相关矩阵的峰值出现在子图像最相关的地方。normxcorr2只对灰度图像有效,所以我们通过每个子图像的红色平面。

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

图中包含一个轴。轴包含一个曲面类型的对象。

步骤4:找到图像之间的总偏移量

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

通过相关性发现的%偏移量[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)

图中包含一个轴。轴包含一个图像类型的对象。

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

显示一个平面辣椒图像的recovered_onion使用alpha混合的图像。

图,imshowpair(辣椒(:,:1),recovered_onion,“混合”

图中包含一个轴。轴包含一个图像类型的对象。