OpenCV Homography, Transformer un point, que fait ce code?
Je travaille avec une homographie calculé par OpenCV. J'utilise actuellement cette homographie de transformer les points à l'aide de la fonction ci-dessous. Cette fonction effectue la tâche, j'ai besoin mais je n'ai aucune idée de comment cela fonctionne réellement.
Quelqu'un peut-il expliquer, ligne par ligne, exactement, la logique de la théorie derrière les 3 dernières lignes de code, je comprends que cela transforme le point x,y, mais je suis pas clair pourquoi cela fonctionne:
Pourquoi Z
px
et py
calculé de cette façon, quels sont les éléments dans h
correspondent à?
Vos commentaires sont grandement appréciés 🙂
double h[9];
homography = cvMat(3, 3, CV_64F, h);
CvMat ps1 = cvMat(MAX_CALIB_POINTS/2,2,CV_32FC1, points1);
CvMat ps2 = cvMat(MAX_CALIB_POINTS/2,2,CV_32FC1, points2);
cvFindHomography(&ps1, &ps2, &homography, 0);
...
//This is the part I don't fully understand
double x = 10.0;
double y = 10.0;
double Z = 1./(h[6]*x + h[7]*y + h[8]);
px = (int)((h[0]*x + h[1]*y + h[2])*Z);
py = (int)((h[3]*x + h[4]*y + h[5])*Z);
source d'informationauteur Jayson
Vous devez vous connecter pour publier un commentaire.
cvFindHomography()
retourne une matrice à l'aide de coordonnées homogènes:Ce qui se passe dans le code:
Le point cartésien
p_origin_cartesian(x,y)
est transformé en coordonnées homogènes, puis le 3x3 point de vue de la transformation de la matriceh
est appliquée et le résultat est convertie en coordonnées cartésiennesp_transformed_cartesian(px,py)
.Mise à JOUR
En détail:
Convertir
p_origin_cartesian
àp_origin_homogenous
:Faire la transformation de perspective:
Convertir
p_transformed_homogenous
àp_transformed_cartesian
:Votre code traduit:
OpenCV Python, la mise en œuvre @Ben réponse