2013-01-20 10 views
5

Obecnie kończę moje narzędzie do oceny detektorów punktów odsetkowych. W ostatnich krokach znalazłem mylący błąd.Błąd asercji OpenCV CV findHomography - counter => 4

Mat findHomography(InputArray srcPoints, InputArray dstPoints, int method=0, double ransacReprojThreshold=3, OutputArray mask=noArray()) 

srcPoints i dstPointsvector<Points2f> który przechowuje odpowiednie punkty dopasowanej keypoints. Do tej pory nic specjalnego - To jak w tutorialach.

Ale kiedy używam RANSAC i mam vector<Points2f> w zakresie [0, ..., 4], pojawia się błąd potwierdzenia, licznik powinien być większy lub równy cztery.

Pytanie 1: Czy algorytm potrzebuje co najmniej czterech punktów, aby opisać, co należy do obecnego modelu, a co nie, i stworzyć konsensus?

Pytanie 2: Czy istnieje dokumentacja na ten temat? (Spojrzałem na doc i tutorials.)

Please note that I already have seen this question. Ale nie ma satysfakcjonującej odpowiedzi na zachowanie RANSAC. Czy powinienem zaakceptować, że ta metoda potrzebuje co najmniej czterech punktów, aby znaleźć homografię?

Dzięki za pomoc.

Odpowiedz

8

Homografii nie można obliczyć za pomocą mniej niż 4 par punktów. To dlatego, że tylko z 3 punktami istnieje niejednoznaczność perspektywy. Obraz trójkąta

a 


b  c 

w obrazie 1. W obrazie 2 punkty zostały przekształcone wyglądać ten

a 


b c 

odległość między B i C został przecięty na pół. Niestety nie wiesz, czy to dlatego, że punkt c zbliżył się do Ciebie lub dalej od Ciebie. Z czwartym punktem różnica staje się jasna.

a  d 


b  c 

Oto kwadratowy obrazu 1

 d 


a   


b c  

tu d i c obrócone do siebie

a  

    d 
b c 

i oto one obracane z dala od ciebie.

Nie widzę tego wymogu w dokumentacji openCV, ale jeśli znajdziesz jakiekolwiek zasoby dotyczące obliczania homografii, nie będziesz musiał czytać zbyt daleko, zanim znajdziesz to wymaganie i bardziej rygorystyczny dowód na to, że 4 punkty są wystarczające.

4

RANSAC służy do wybierania 4 par pasujących punktów w większym zbiorze lub odpowiednikach (tj. Gdy srcPoints.size() >= 4). Właśnie dlatego pojawi się błąd, jeśli srcPoints.size() <=4.

Potrzebujesz co najmniej 4 odpowiedniki po prostu dlatego, że macierz homografii H ma 8 stopni swobody, stąd 8 równań liniowych jest wymaganych do znalezienia rozwiązania. Ponieważ każda para punktów generuje dwa równania liniowe (przy użyciu współrzędnych x i y), potrzebujesz co najmniej 4 odpowiedników.

+0

Czy możesz dać mi wskazówkę, gdzie mogę przeczytać te równania? Znalazłem tylko kilka zdań w tekstach, które mówiły mi "potrzebujesz co najmniej czterech punktów", ale bez żadnego wyjaśnienia. –

+0

Sprawdź to: http://cseweb.ucsd.edu/classes/wi07/cse252a/homography_estimation/homography_estimation.pdf – memecs

Powiązane problemy