Apa hubungan antara homografi yang dihitung lebih dari 2 gambar dan homografi yang dihitung atas gambar yang sama terbalik?

9

Dengan OpenCV , saya menghitung homografi antara, katakanlah, dua gambar ini:

gambar pertama

dan

gambar kedua

Jangan khawatir tentang bentuk putih aneh di sisi kanan, itu karena pemegang smartphone yang saya gunakan. Homografi, yang diberikan oleh fungsi findHomography () (menggunakan titik yang terdeteksi dengan detektor fitur Cepat dan pencocokan deskriptor HammingLUT ), adalah:

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

Sekarang, saya menggunakan proses yang sama untuk menghitung homografi antara gambar yang sama yang telah diputar 180 derajat (terbalik), menggunakan imagemagick (pada kenyataannya, saya akan sama tertarik untuk mengetahui hubungan untuk rotasi 90 atau 270 derajat ...). Di sini mereka:

gambar pertama terbalik

dan

gambar kedua terbalik

Dengan gambar-gambar ini, homografnya menjadi:

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

Sekarang, pertanyaannya adalah bagaimana Anda menghubungkan A dan B? Dua nilai diagonal pertama A dekat dengan kebalikan dari yang sama di B, tapi itu tidak terlalu tepat (0,707805537 bukannya 0,71486885). Tujuan utama saya adalah menggunakan hubungan yang diinginkan untuk mengubah matriks akhir, menghindari untuk menghitung rotasi gambar yang mahal.

Stéphane Péchard
sumber

Jawaban:

4

Hba=RtnTd
Rbatabnd

Hubungan antara kedua matriks terletak pada vektor normal bidang. Jadi, Anda perlu mendapatkan vektor normal bidang (dari matriks homografi), dan menerapkan rotasi padanya, dan kemudian menghitung matriks homografi menggunakan rumus di atas. Untuk penguraian yang benar dari matriks homografi, Anda dapat melihat contoh kode ini dan makalah ini .

Geerten
sumber
Aku benar-benar tidak mengerti maksudmu. Dari persamaan, saya mendapat yang normal dengan Mat invT = 1./t; Mat n = invT.t() * (H - R);(sebenarnya, itu n/d). Sekarang, "menerapkan rotasi padanya" memberi saya vektor 3x1, tetapi bagaimana saya bisa menggunakannya untuk menghitung matriks homografi lagi? Terima kasih
Stéphane Péchard
Menambahkan lebih banyak info, harapan yang membuatnya jelas.
Geerten
mengapa - t / d dan bukan + t / d?
Maystro