Con OpenCV , calculo la homografía entre, digamos, estas dos imágenes:
y
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:
y
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.
fuente
Mat invT = 1./t; Mat n = invT.t() * (H - R);
(en realidad, esn/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