Estoy trabajando con una homografía calculada por OpenCV. Actualmente uso esta homografía para transformar puntos usando la función a continuación. Esta función realiza la tarea que requiero, sin embargo, no tengo idea de cómo funciona realmente.Homografía OpenCV, Transforme un punto, ¿qué está haciendo este código?
¿Puede alguien explicar, línea por línea exactamente, la lógica/teoría detrás de las últimas 3 líneas de código, entiendo que esto transforma el punto x, y, pero estoy claro por qué esto funciona:
¿Por qué se calculan Z
, px
y py
de esta manera, a qué corresponden los elementos en h
?
Sus comentarios son muy apreciados :)
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);
Hola, gracias por sus comentarios hasta el momento, así que lo que está haciendo Z? – Jayson
z es la tercera coordenada en las coordenadas homogéneas tridimensionales. Explicar cómo funcionan las coordenadas homogéneas iría demasiado lejos aquí. Pero p_homogenous (x, y, z) corresponde a p_cartesian (x/z, y/z). – Ben
ahhh gracias, empezando a tener sentido ahora. – Jayson