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 Zpx 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