私はOpenCVによって計算されたホモグラフィを扱っています。現在、このホモグラフィを使用して、以下の関数を使用してポイントを変換しています。この関数は私が必要とするタスクを実行しますが、実際にどのように機能するかはわかりません。
最後の3行のコードの背後にあるロジック/理論を1行ずつ正確に説明できますか?これが点x、yを変換することは理解していますが、なぜこれが機能するのかは不明です:
なぜ はZ
、このようpx
にpy
計算され、 の要素は何にh
対応するのでしょうか?
あなたのコメントは大歓迎です:)
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);