主要内容

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

这个例子展示了如何在一个更大的图像中找到一个模板图像。有时一个图像是另一个图像的子集。归一化互相关可以用来确定如何通过翻译其中一个图像来配准或对齐。

第一步:阅读图像

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

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

imshow(辣椒)

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

步骤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)

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

imshow (sub_peppers)

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

第三步:标准化互相关,求峰坐标

计算归一化互相关并将其显示为曲面图。互相关矩阵的峰值出现在子图像相关性最好的地方。normxcorr2只适用于灰度图像,所以我们将每个子图像的红色平面传递给它。

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

图中包含一个轴对象。axis对象包含一个类型为surface的对象。

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

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

通过相关性找到的偏移量[max_c, imax] = max (abs (c (:)));[ypeak, xpeak] = ind2sub(大小(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);

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

找出洋葱落在辣椒

Xbegin = round(xoffset + 1);Xend = round(xoffset + size(洋葱,2));Ybegin = round(yoffset + 1);Yend = round(yoffset + size(洋葱,1));%提取胡椒和洋葱extracted_onion =辣椒(ybegin: yend xbegin: xend:);如果isequal(洋葱、extracted_onion) disp (洋葱。png是从辣椒中提取的。结束
Onion.png是从pepper .png中提取的

第六步:把洋葱图片放大到辣椒图片的大小

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

recovered_onion = uint8(0(大小(辣椒)));recovered_onion (ybegin: yend xbegin: xend:) =洋葱;imshow (recovered_onion)

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

第七步:使用阿尔法混合显示图像在一起

显示其中一个平面辣椒图像的recovered_onion图像使用阿尔法混合。

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

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