Je travaille avec une homographie calculée par OpenCV. J'utilise actuellement cette homographie pour transformer des points en utilisant la fonction ci-dessous. Cette fonction accomplit la tâche dont j'ai besoin, mais je n'ai aucune idée de la manière dont elle fonctionne réellement.
Est-ce que quelqu'un peut expliquer, ligne par ligne exactement, la logique/théorie derrière les 3 dernières lignes de code, je comprends que cela transforme le point x,y mais je ne comprends pas pourquoi cela fonctionne :
Pourquoi les Z
, px
y py
calculés de cette manière, que font les éléments de h
correspondent ?
Vos commentaires sont très 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);