2014-05-13 71 views
8

我试图在matlab中缝合图像,但得到丑陋的重叠线。我怎样才能正确地混合图像?目前我使用下面的代码,但它混合太多(尤其是建筑物的窗户与黑色建筑混合在一起)。如何在matlab中拼接图像时正确混合?

unblended image blended image

%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

+0

我想我只是想混合区域大约10px从线,也许它会帮助我。现在它正在混合所有重叠区域 – user3082220

+3

这将减少除边界外的模糊,并且由于对齐不良,您仍然会看到伪影。更好的办法是改善路线。 – Trilarion

回答

1

尝试使用最好的相机技术在第一(三脚架和旋转头等等)。更好的数据=更好的结果。

我的下一个最好的办法是逐渐减小的混合。例如:

blendfactor = dist_to_border^2; 

或者一些指数级的东西。 如果这是一次性的事情,我会去像gimp这样的摄影软件。如果情况严重,可以尝试通过模式搜索来估计另一帧中的像素位置。

1

如果你仍然对这个问题的工作,我相信你需要做的是重叠的图像之间的色彩校正步骤。例如,来自最左侧图像的蓝色天空和来自左侧的第二个图像应该具有相同的蓝色值。很明显,它们不是由于相机在角落处渐晕。通过确保两个蓝色值彼此相距很近,您将会有更好的混合。