如何在Matlab中拼接图像时正确地进行混合?

9
我正在尝试在Matlab中拼接图像,但是会出现丑陋的重叠线。如何正确地混合图像?目前我正在使用下面的代码,但是混合过度(特别是建筑物的窗户与幽灵伪影混合在一起,以及黑色建筑物)。
%Tx - how much to move picture by x, Ty - by y (homography)
cropX = size(imcyl2, 2); %second image x size
xdimfirst = size(imcyl1, 2); %first image x size
ydimfirst = size(imcyl1, 1); %first image y size
xoverlap = xdimfirst - Tx;
newImg = imcyl1;
for y = 1:size(imcyl2, 1)
   for x = 1:cropX
       if ((Tx+x) > 0 && (Ty+y) >0)
       % if we are in the overlap region, then we need to blend.
               scale1 = (xoverlap - x) / xoverlap;
               scale2 = x / xoverlap;
               r = scale1 * imcyl1(Ty + y, Tx + x, 1) + scale2 * imcyl2(y, x, 1);
               g = scale1 * imcyl1(Ty + y, Tx + x, 2) + scale2 * imcyl2(y, x, 2);
               b = scale1 * imcyl1(Ty + y, Tx + x, 3) + scale2 * imcyl2(y, x, 3);
               newImg(Ty + y, Tx + x, :) = [r g b];
         end
    end
end

2
图像中的伪影是由于您的全景图略微未对齐造成的,而不是由于您的混合代码造成的。该代码在重叠图像之间创建线性加权混合。即使在没有混合的情况下,您也可以看到这种不对齐,例如黑色建筑物顶部的不对齐和其他大型建筑物上稍微不对齐的十字架。也许您需要对图像进行一些束调整,以全局地优化这些小错误。 - jcollomosse
我想让混合区域与线条相隔大约10像素,也许这会对我有所帮助。现在它正在混合所有重叠区域。 - user3082220
3
除了边界处仍有模糊外,这将减少图像的模糊,但您仍然会看到由于不良对齐而产生的伪影。更好的方法是改善对齐。 - Trilarion
2个回答

1
试着首先使用最佳的相机技巧(三脚架和旋转头等)。更好的数据=更好的结果。 我接下来的最佳选择是逐渐减少混合。类似于:
blendfactor = dist_to_border^2;

或者是某种指数函数。如果这只是一次性的事情,我会选择像GIMP这样的摄影软件。如果它会是一个重要的事情,你可以尝试通过模式搜索来估计其他帧中像素的位置。


1
如果您仍在解决这个问题,我相信您需要在重叠的图像之间进行颜色校正。例如,最左侧图像的蓝天和左二图像应具有相同的蓝色值。显然,由于相机在角落处出现了暗角,它们并不相同。通过确保两个蓝色值彼此接近,您将获得更好的混合效果。

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