Jaki jest związek między homografią obliczoną na dwóch obrazach a homografią obliczoną na tych samych obrazach do góry nogami?


9

W OpenCV obliczam homografię między, powiedzmy, tymi dwoma obrazami:

pierwszy obraz

i

drugi obraz

Nie martw się o dziwną białą formę po prawej stronie, wynika to z posiadanego przeze mnie uchwytu smartfona. Homography, podanych findHomography () funkcji (za pomocą punktów wykrywane z Szybko detektora funkcji i deskryptora HammingLUT dopasowującego ) jest:

A = [ 1.412817430564191,  0.0684947165270289,  -517.7751355800591;
     -0.002927297251810,  1.210310757993256,     39.56631316477566;
      0.000290600259844, -9.348301989015293e-05,  1]

Teraz używam tego samego procesu do obliczenia homografii między tymi samymi obrazami, które zostały obrócone o 180 stopni (do góry nogami), za pomocą imagemagick (w rzeczywistości byłbym równie zainteresowany poznać relację dla obrotu o 90 lub 270 stopni ...). Tutaj są:

pierwszy obraz do góry nogami

i

drugi obraz do góry nogami

Dzięki tym obrazom homografia staje się:

B = [ 0.7148688519736168,  0.01978048500375845,  325.8330631554814;
     -0.1706219498833541,  0.8666521745094313,    64.72944905752504;
     -0.0002078857275647, -5.080048486810413e-05,  1]

Teraz pytanie brzmi: jak odnosisz A i B? Dwie pierwsze wartości diagonalne A są zbliżone do odwrotności tego samego w B, ale nie jest to bardzo precyzyjne (.707805537 zamiast 0,71486885). Moim ostatecznym celem byłoby wykorzystanie pożądanej relacji do przekształcenia ostatecznej matrycy, unikając obliczenia kosztownego obrotu obrazu.

Odpowiedzi:


4

Myślę, że patrząc na wzór macierzy homografii:

Hba=R−tnTd
gdzie R jest macierzą obrotu, za pomocą której b jest obracany w stosunku do a; t jest wektorem translacji z a do b; n i dsą odpowiednio normalnym wektorem płaszczyzny i odległości do płaszczyzny (patrz równanie Homografia-3D między płaszczyznami ).

Zależność między dwiema macierzami leży w normalnym wektorze płaszczyzny. Musisz więc pobrać normalny wektor płaszczyzny (z matrycy homografii) i zastosować do niej obrót, a następnie obliczyć macierz homografii przy użyciu powyższego wzoru. Aby poprawnie rozłożyć macierz homografii, możesz przejrzeć te próbki kodu i ten artykuł .


Naprawdę nie rozumiem o co ci chodzi. Z równania mam normalne Mat invT = 1./t; Mat n = invT.t() * (H - R);(właściwie to n/d). Teraz „zastosowanie do niego obrotu” daje mi wektor 3x1, ale jak mogę go użyć do ponownego obliczenia macierzy homografii? Dzięki
— Stéphane Péchard

Dodano więcej informacji, mam nadzieję, że to wyjaśnia.
— Geerten

dlaczego to jest - t / d, a nie + t / d?
— Maystro,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.