Avec OpenCV , je calcule l'homographie entre, disons, ces deux images:
et
Ne vous inquiétez pas de l'étrange forme blanche sur le côté droit, cela est dû au support de smartphone que j'utilise. La homographie, donnée par findHomography () fonction ( en utilisant des points détectés par le détecteur de caractéristique rapide et le descripteur de HammingLUT matcher ), est la suivante :
A = [ 1.412817430564191, 0.0684947165270289, -517.7751355800591;
-0.002927297251810, 1.210310757993256, 39.56631316477566;
0.000290600259844, -9.348301989015293e-05, 1]
Maintenant, j'utilise le même processus pour calculer l'homographie entre les mêmes images qui ont été tournées de 180 degrés (à l'envers), en utilisant imagemagick (en fait, je serais également intéressé de connaître la relation pour une rotation de 90 ou 270 degrés ...). Les voici:
et
Avec ces images, l'homographie devient:
B = [ 0.7148688519736168, 0.01978048500375845, 325.8330631554814;
-0.1706219498833541, 0.8666521745094313, 64.72944905752504;
-0.0002078857275647, -5.080048486810413e-05, 1]
Maintenant, la question est de savoir comment reliez-vous A et B? Les deux premières valeurs diagonales de A sont proches de l'inverse de la même chose en B, mais ce n'est pas très précis (0,707805537 au lieu de 0,71486885). Mon but ultime serait d'utiliser la relation souhaitée pour transformer la matrice finale, en évitant de calculer une rotation d'image coûteuse.
la source
Mat invT = 1./t; Mat n = invT.t() * (H - R);
(en fait, c'estn/d
). Maintenant, "lui appliquer la rotation" me donne un vecteur 3x1, mais comment puis-je l'utiliser pour calculer à nouveau la matrice d'homographie? Merci