2014-05-13 13 views
8

Próbuję obrazów ściegu w Matlab, ale dostaję brzydkie linie nakładania się. Jak mogę prawidłowo mieszać obrazy? Obecnie używam poniższego kodu, ale za bardzo się on miesza (szczególnie okna budynków są mieszane z artefaktami duchów, podobnie jak czarny budynek).Jak prawidłowo łączyć ze sobą podczas łączenia obrazów w programie 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

Artefakty na obrazie wynikają z niewielkiej korelacji panoramy. Nie wynikają one z twojego mieszanego kodu. który tworzy liniowe, ważone połączenie między nakładającymi się obrazami. Tę niewspółosiowość można zobaczyć nawet na górnym obrazie bez miksowania, na źle wyrównanym wierzchołku czarnego budynku i nieznacznie przesuniętych krzyżykach na innym dużym budynku. Być może potrzebujesz korekty zestawu obrazów, aby udoskonalić te małe błędy na całym świecie. – jcollomosse

+0

Myślę, że chcę, żeby region mieszania miał około 10 pikseli od linii, może to mi pomoże. Teraz mieszany jest cały zachodzący obszar – user3082220

+3

. Zmniejszyłoby to rozmycie, z wyjątkiem granic, a nadal będziesz widzieć artefakty z powodu złego wyrównania. Lepiej byłoby poprawić dopasowanie. – Trilarion

Odpowiedz

1

Spróbuj użyć najlepszą technikę kamery na statywie (pierwszy i obracając głowę etc). Lepsze dane = lepsze wyniki.

Mój następny najlepszy zakład to stopniowo zmniejszona mieszanka. Coś jak:

blendfactor = dist_to_border^2; 

Albo coś wykładniczego. Jeśli to jest jednorazowa sprawa, wybrałbym oprogramowanie fotograficzne, takie jak Gimp. Jeśli to będzie poważne, możesz spróbować oszacować położenie pikseli w drugiej ramce poprzez wyszukiwanie wzorców.

1

Jeśli nadal pracujesz nad problemem, uważam, że musisz zrobić krok korekcji kolorów między nakładającymi się obrazami. Na przykład Niebieskie niebo z najbardziej lewego obrazu i drugiego obrazu z lewej powinno mieć tę samą niebieską wartość. Najwyraźniej nie wynikają one z winietowania kamery na rogach. Upewniając się, że obie wartości niebieskie mieszczą się w bliskiej odległości od siebie, będziesz miał lepsze mieszanie.

Powiązane problemy