如何合并两张重叠的图片?

3
我需要在Matlab中合并两个图像。这两个二进制图像是左右图像,它们之间有一些重叠,我需要在Matlab中将它们合并成一个单独的图像(就像全景图一样,只不过这些图像只是2D线条图,并且没有噪声,例如重叠区域完全相同)。
因此,如果我想从两个图像中找到共同的列,然后创建一个新的图像,如下所示:
new_image = [left_image(excluding-the-common-columns) right_image]

然后只需绘制它。
我尝试使用“intersect”方法,但到目前为止,我所做的只是找到共同元素而不是共同列。
如何在这些图像中找到共同的列?

我目前没有代码,因为我卡在了找到交集列的地方。 - user1170540
到目前为止,我有多种使用“交集”查找共同列的方法。请详细说明。 - Mad Physicist
1
这不是“代码无法工作”的问题,因此应该被关闭。它与主题相关,因为已接受的解决方案证明了这一点。它应该重新打开。 - Trilarion
1
抱歉,我想说的是“不应该被关闭”。 - Trilarion
1个回答

1
你可以使用ismember()来查找两个数组中的共同行。只需转置矩阵即可获得相同的列功能。像这样:
im = imread('forest.tif');
left = im(:, 1:300);
right = im(:, 200:end);
a = ismember(left', right', 'rows');
first_common_index = find(a, 1);
joined = [left(:, 1:first_common_index), right];

然后执行

figure
subplot(2,2,1);
imshow(left, []);
title('Left')

subplot(2,2,2);
imshow(right, []);
title('Right')

subplot(2,2,[3,4]);
imshow(joined, []);
title('Joined')

提供

enter image description here


谢谢。非常感激。 正是我需要做的事情。 - user1170540
1
提醒其他人:这只有在两个图像的列完全相等时才有效。对于真实图像,这种情况应该不会经常发生,尽管实现某种相似性标准并不难。因此,这个答案解决了OP的问题,但可能无法解决其他类似的问题。 :) - Trilarion
@Trilarion 绝对正确!对于那些至少在某个部分上完全符合的图像来说并不太难,但对于任何在至少部分图像上不完全一致的东西来说,就会变得更加困难。 - lhcgeneva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接