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.

Stéphane Péchard
źródło

Odpowiedzi:

4

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

Hba=RtnTd
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ł .

Geerten
źródło
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,