Filtrowanie szacowanych homografii RANSAC

10

Korzystam z algorytmu RANSAC do oceny homografii między parami zdjęć wykonanych aparatami, które nie mają żadnego tłumaczenia między nimi (czysty obrót i zmiana skali / powiększenia). Działa dobrze w połowie przypadków. Prawidłowe wyjście wygląda następująco:

wprowadź opis zdjęcia tutaj

Czerwone linie są filtrowane, a czworoboki ilustrują, w jaki sposób homografia zniekształca perspektywę.

Czasami zdarza się jednak wiele złych przypadków, takich jak te:

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Mam już prosty test w pętli RANSAC. Tworzy prosty czworokąt (kwadrat kwadratowy) i przekształca go za pomocą transformacji próbki. Następnie sprawdza, czy transformacja zachowała wypukłość.

Wciąż jednak pojawiają się wiązki wklęsłych czworoboków.

Czy masz pomysł, jak prawidłowo przetestować homografię, jeśli zachowuje się ona „ładnie” i odfiltrowuje nieprawidłowe rozwiązania?

Znalazłem kod, w którym testują, że żaden z trzech przekształconych punktów nie jest kolinearny. Ale to nie wydaje się wystarczające, ponieważ nie odfiltruje deltoidów i innych „nieprawidłowych” czworoboków ...

Libor
źródło

Odpowiedzi:

4

Wystąpił problem ze sprawdzeniem, czy homografia jest w porządku.

Algorytm sprawdzania poprawnych homografii może kogoś zainteresować, więc zapiszę go tutaj:

1) Utwórz czworobok ze współrzędnymi wierzchołków (we współrzędnych jednorodnych):ZAbredo

ZA:(-w/2),-h/2),1.0)b:(w/2),-h/2),1.0)do:(-w/2),h/2),1.0)re:(w/2),h/2),1.0)

w,h oznaczają odpowiednio szerokość i wysokość obrazu. Jeśli cała ramka obrazu (prostokąt) zostanie przekształcona w wypukły czworobok, wówczas jakikolwiek wypukły czworobok w nim również zostanie przekształcony „starannie”.

ZAbredodo=H.do ). Odtąd wszystkie punkty zostaną zamienione na współrzędne niejednorodne.

uv

d1:A+(DA)s=A+usd2:B+(CB)t=B+vt

d1=d2

t=1d[(ByAy)ux(BxAx)uy]

s=1d[(AxBx)vy(AyBy)vx]

s,t(0,1) .

s,t(λ,1.0λ)λ=0.01

Starszy problem, naprawiony w powyższym algorytmie:

Znalazłem tutaj problem - mając pewną homografię, test może przejść dla mniejszego czworoboku, ale nie dla większego. Właśnie dlatego przeszły niektóre „chore” homografie.

Zielony kwadrat reprezentuje obraz źródłowy, pomarańczowy jest przekształcony. Jak widać, lewa ręka jest wypukła, ale zaczyna się deformować, gdy źródło jest większe:

wprowadź opis zdjęcia tutaj

Wreszcie jeszcze większe źródło uzyskuje brak konwersji czworoboku:

wprowadź opis zdjęcia tutaj

(x,y,w)xyw

Odpowiednio poprawiłem algorytm.

Libor
źródło
1

x_i \sim Hx_i^'\sum_{j=1\dots n}\|x_j - Hx_j^'\|H^'x^' = H^'x\sum_{j=1\dots n}\|x_j - Hx_j^'\| + \|x_j^' - H^'x\|

Patrz Hartley i Zisserman - Geometria wielu widoków w Computer Vision rozdział 4.2, a zwłaszcza 4.2.3 i równanie (4.8).

buq2
źródło
Wyświetlane są tutaj czworokąty. Jestem pewien co do zgodności, ponieważ dopasowanie jest bardzo dobre. Użyłem znormalizowanego algorytmu DLT zasugerowanego przez Hartleya i Zissermana, a następnie zastosowałem iteracyjne udoskonalenie i dopasowanie z przewodnikiem, jak wspomniałeś.
Libor,
Ale dopasowanie homografii nie może być tak dobre, jak na pierwszym zdjęciu są dwie grupy punktów: te w budynku mieszkalnym (które są prawdopodobnie na tym samym samolocie) i te na drzewach (które prawdopodobnie nawet nie są na ten sam samolot w obrębie własnej grupy). Czy na pewno nie chciałeś użyć podstawowej matrycy?
buq2
Linie łączą odpowiednie punkty i sprawdziłem je wszystkie - kiedy obrazy są wyrównane, wszystkie się spotykają. Kiedy wykluczę źle dopasowane pary obrazów, powstaje ładna panorama.
Libor,
Obrazy są wykonywane za pomocą obrotowej kamery, więc może się wydawać, że płaszczyzny się zmieniają, ale ponieważ kamery obracają się wokół centrum optycznego, jestem prawie pewien, że homografia jest szacowana. Mogę nawet obliczyć z niego matrycę ogniskowej i obrotu. Ale problem tkwi gdzie indziej, dziwactwo w moim oprogramowaniu muszę znaleźć ...
Libor
Ahh, nie podałeś informacji, że nie ma tłumaczenia między kamerami. Masz rację, a homografia opisuje transformację między obrazami.
buq2