2012-06-15 52 views
21

Podczas korzystania z funkcji OpenCV findHomography w celu oszacowania homografii między dwoma zestawami punktów, z różnych obrazów, czasami otrzymasz złą homografię z powodu wartości odstających w twoich punktach wejściowych, nawet jeśli używasz RANSAC lub LMEDS.Jak rozpoznać, czy macierz homograficzna jest akceptowalna, czy nie?

// opencv java example: 
Mat H = Calib3d.findHomography(src_points, dst_points, Calib3d.RANSAC, 10); 

Jak ustalić, czy uzyskana macierz homologii 3x3 jest akceptowalna, czy nie?

Szukałem odpowiedzi na to tutaj w Stackoverflow oraz w Google i nie mogłem go znaleźć.

znalazłem ten artykuł, ale to jest trochę tajemniczy do mnie:

"The geometric error for homographies"

+2

Zobacz pytanie http://stackoverflow.com/questions/10972438/detecting-garbage-homographies-fromhomography-in-opencv/10981249#10981249 –

+0

jeśli ruch aparatu jest ograniczony, możesz spróbować rozłożyć homografię i skala testowa, parametry rotacji i/lub translacji dla wartości drastycznych. Inna metoda: Jeśli wiesz (lub przyjmujesz ograniczenia), że duże części obrazów powinny się nakładać, możesz obliczyć nakładanie po wypaczeniu i zdecydować, czy może to być oczywiście fałszywa homografia. Inne metody: jeśli używasz RANSAC możesz zdecydować z liczby inlier (i/lub stosunek inlier/total) czy homografia powinna zostać odrzucona) – Micka

+0

@Micka dzięki za twoją pomoc, już używałem RANSAC, ruch kamery jest Nie ograniczałem się i szukałem metod odrzucania homografii (głównie matematycznych) przed pójściem na cięższe obliczenia, takie jak stosowanie homografii i sprawdzanie nakładania się. –

Odpowiedz

22

Najlepszym sposobem, aby stwierdzić, czy homography jest dopuszczalny.

1- Podejmij punkty jednego obrazu i przeprowadź je przy użyciu obliczonej homografii.

//for one 3D point, this would be the projection 
px' = H * px; 
py' = H * py; 
pz' = H * pz; 

2- Oblicz euclidean distance pomiędzy Odwzorowane punktów i rzeczywistych punktów obrazu.

Reprojection error za jeden punkt. p jest rzutowanym punktem, a q jest prawdziwym punktem.

enter image description here

3- Ustanowienie Próg, który decyduje, czy błąd ponowne odwzorowanie jest dopuszczalne.

Na przykład błąd większy niż jeden piksel byłby niedopuszczalny w przypadku wielu aplikacji śledzących.

+11

Co sugerujesz, jest przydatne do śledzenia, gdy wiesz, że całkiem prawdopodobne jest, że dwa obrazy dzielą łatę w podobnych lokalizacjach. Podczas obliczania homografii między dwoma różnymi obrazami w celu sprawdzenia, czy jeden obraz zawiera drugi, błąd reprojection nie jest w ogóle użyteczny. Na przykład w moim przypadku często dostaję, że wiele (~ 30) punktów z jednego obrazu jest mapowanych na ten sam punkt (lub kilka, blisko punktów) na drugim obrazie. Czy masz jakieś sugestie dotyczące tej sprawy? –