1.- 方法使用的是最小二乘法。还有比这个更复杂的算法。尽管如此,它仍然是最常见的一种,因为其他方法在某些情况下可能会失败(即,如果点位于平面上或无限处,其他方法可能会失败)。
该方法可以在计算机视觉中的多视图几何 by 理查德·哈特利和安德鲁·齐瑟曼 (p312)
2.-用途:
cv::Mat pnts3D(1, N, CV_64FC4);
cv::Mat cam0pnts(1, N, CV_64FC2);
cv::Mat cam1pnts(1, N, CV_64FC2);
用图像中的点填充 2 通道点矩阵。
cam0
and cam1
are Mat3x4
相机矩阵(内部和外部参数)。您可以通过乘法来构造它们A*RT
, where A
是内在参数矩阵,RT
是旋转平移 3x4 位姿矩阵。
cv::triangulatePoints(cam0,cam1,cam0pnts,cam1pnts,pnts3D);
NOTE: pnts3D
需要是 4 通道1xN cv::Mat
定义时,如果没有定义,则抛出异常,但结果是cv::Mat(4, N, cv_64FC1)
矩阵。真的很令人困惑,但这是我没有得到例外的唯一方法。
UPDATE:从版本 3.0 或更早版本开始,这不再是事实,并且pnts3D
也可以是类型Mat(4, N, CV_64FC1)
或者可以完全留空(像往常一样,它是在函数内部创建的)。