Welche Verbindung besteht zwischen der Homographie, die über zwei Bilder berechnet wurde, und der Homographie, die verkehrt herum über dieselben Bilder berechnet wurde?


9

Mit OpenCV berechne ich die Homographie zwischen diesen beiden Bildern:

erstes Bild

und

zweites Bild

Mach dir keine Sorgen über die seltsame weiße Form auf der rechten Seite, es liegt an dem Smartphone-Halter, den ich benutze. Die durch die Funktion findHomography () gegebene Homographie (unter Verwendung von Punkten, die mit dem Fast Feature Detector und dem HammingLUT Deskriptor Matcher erkannt wurden ) lautet:

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

Jetzt verwende ich den gleichen Prozess, um die Homographie zwischen denselben Bildern zu berechnen, die mit imagemagick um 180 Grad (verkehrt herum ) gedreht wurden (tatsächlich wäre ich gleichermaßen interessiert, die Beziehung für die Drehung von 90 oder zu kennen 270 Grad ...). Hier sind sie:

erstes Bild verkehrt herum

und

zweites Bild verkehrt herum

Mit diesen Bildern wird die Homographie:

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

Die Frage ist nun, wie Sie A und B in Beziehung setzen. Die beiden ersten Diagonalwerte von A liegen nahe an der Umkehrung derselben in B, sind jedoch nicht sehr genau (.707805537 anstelle von 0.71486885). Mein letztendlicher Zweck wäre es, die gewünschte Beziehung zur Transformation der endgültigen Matrix zu verwenden und zu vermeiden, dass eine kostspielige Bildrotation berechnet wird.

Antworten:


4

Ich denke, wenn ich die Formel für die Homographiematrix betrachte: wobei die Rotationsmatrix ist, um die in Bezug auf ; ist der Translationsvektor von nach ; und sind der Normalenvektor der Ebene bzw. der Abstand zur Ebene (siehe Homographie-3D-Gleichung von Ebene zu Ebene ).

H.bein=R.- -tnT.d
R.beinteinbnd

Die Beziehung zwischen den beiden Matrizen liegt im Normalenvektor der Ebene. Sie müssen also den Normalenvektor der Ebene (aus der Homografiematrix) ermitteln, die Drehung darauf anwenden und dann die Homografiematrix mit der obigen Formel berechnen. Für die korrekte Zerlegung der Homographiematrix können Sie sich diese Codebeispiele und dieses Dokument ansehen .


Ich verstehe nicht wirklich, was du meinst. Aus der Gleichung habe ich das Normale mit Mat invT = 1./t; Mat n = invT.t() * (H - R);(eigentlich ist es n/d). Wenn Sie nun die Rotation darauf anwenden, erhalten Sie einen 3x1-Vektor. Wie kann ich ihn jedoch verwenden, um die Homografiematrix erneut zu berechnen? Vielen Dank
Stéphane Péchard

Weitere Infos hinzugefügt, hoffe das macht es klar.
Geerten

warum ist es - t / d und nicht + t / d?
Maystro
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.