Com o OpenCV , eu calculo a homografia entre, digamos, essas duas imagens:
e
Não se preocupe com a estranha forma branca no lado direito, é devido ao suporte para smartphone que eu uso. O homografia, dado por findHomography () função (usando pontos detectadas com o detector recurso Fast eo descritor HammingLUT matcher ), é:
A = [ 1.412817430564191, 0.0684947165270289, -517.7751355800591;
-0.002927297251810, 1.210310757993256, 39.56631316477566;
0.000290600259844, -9.348301989015293e-05, 1]
Agora, eu uso o mesmo processo para calcular a homografia entre as mesmas imagens que foram giradas em 180 graus (de cabeça para baixo), usando a imagemagick (na verdade, eu estaria igualmente interessado em saber a relação para rotação de 90 ou 270 graus ...). Aqui estão eles:
e
Com essas imagens, a homografia se torna:
B = [ 0.7148688519736168, 0.01978048500375845, 325.8330631554814;
-0.1706219498833541, 0.8666521745094313, 64.72944905752504;
-0.0002078857275647, -5.080048486810413e-05, 1]
Agora, a questão é como você relaciona A e B? Os dois primeiros valores diagonais de A são próximos ao inverso do mesmo em B, mas não são muito precisos (0,707805537 em vez de 0,71486885). Meu objetivo final seria usar a relação desejada para transformar a matriz final, evitando calcular uma rotação de imagem dispendiosa.
fonte
Mat invT = 1./t; Mat n = invT.t() * (H - R);
(na verdade én/d
). Agora, "aplicar a rotação a ele" me fornece um vetor 3x1, mas como posso usá-lo para calcular a matriz de homografia novamente? Obrigado