¿Cuál es el vínculo entre la homografía calculada sobre 2 imágenes y la homografía calculada sobre las mismas imágenes al revés?

9

Con OpenCV , calculo la homografía entre, digamos, estas dos imágenes:

primera imagen

y

segunda imagen

No se preocupe por la extraña forma blanca en el lado derecho, se debe al soporte del teléfono inteligente que uso. La homografía, dada por la función findHomography () (usando puntos detectados con el detector de características Rápido y el descriptor de coincidencia HammingLUT ), es:

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

Ahora, utilizo el mismo proceso para calcular la homografía entre las mismas imágenes que se han girado 180 grados (al revés), usando imagemagick (de hecho, estaría igualmente interesado en conocer la relación para la rotación de 90 o 270 grados ...). Aquí están:

primera imagen al revés

y

segunda imagen al revés

Con estas imágenes, la homografía se convierte en:

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

Ahora, la pregunta es ¿cómo relacionas A y B? Los dos primeros valores diagonales de A están cerca del inverso del mismo en B, pero no es muy preciso (.707805537 en lugar de 0.71486885). Mi objetivo final sería utilizar la relación deseada para transformar la matriz final, evitando calcular una costosa rotación de imágenes.

Stéphane Péchard
fuente

Respuestas:

4

Hsiuna=R-tnorteTre
Rsiunatunasinortere

La relación entre las dos matrices se encuentra en el vector normal del plano. Por lo tanto, debe obtener el vector normal del plano (fuera de la matriz de homografía) y aplicarle la rotación, y luego calcular la matriz de homografía utilizando la fórmula anterior. Para la correcta descomposición de la matriz de homografía, puede ver estos ejemplos de código y este documento .

Geerten
fuente
Realmente no entiendo lo que quieres decir. De la ecuación, obtuve lo normal con Mat invT = 1./t; Mat n = invT.t() * (H - R);(en realidad, es n/d). Ahora, "aplicarle la rotación" me da un vector 3x1, pero ¿cómo puedo usarlo para calcular la matriz de homografía nuevamente? Gracias
Stéphane Péchard
Se agregó más información, espero que eso quede claro.
Geerten
¿Por qué es - t / dy no + t / d?
Maystro