2014-05-13 109 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

如果你仍然對這個問題的工作,我相信你需要做的是重疊的圖像之間的色彩校正步驟。例如,來自最左側圖像的藍色天空和來自左側的第二個圖像應該具有相同的藍色值。很明顯,它們不是由於相機在角落處漸暈。通過確保兩個藍色值彼此相距很近,您將會有更好的混合。