为什么我们需要同时输入(camera_matrix 1& 2)和(R和T)参数到stereoRectify()?

时间:2015-11-08 12:18:25

标签: opencv image-processing computer-vision

要进行立体声校准,我们需要做3个步骤(输入参数 - >输出参数):

  1. calibrateCamera():obj_corners,img_corners - > camera_matrix,distortion_coeffs

  2. stereoCalibrate():obj_corners,img_corners1 / 2,camera_matrix1 / 2,distortion_coeffs1 / 2 - > R,T,E,F

  3. stereoRectify():camera_matrix1 / 2,distortion_coeffs1 / 2,R,T - > R1 / 2,P1 / 2,Q

  4. 我错过了一些参考资料。

    现在我们可以将Q用于reprojectImageTo3D(),将P1或P2用于triangulatePoints()

    但为什么我们需要同时输入(camera_matrix 1& 2)和(R& T)参数到stereoRectify()

    众所周知camera_matrix已经包含R& T:

    struct CV_EXPORTS CameraParams
    {
        CameraParams();
        CameraParams(const CameraParams& other);
        const CameraParams& operator =(const CameraParams& other);
        Mat K() const;
    
        double focal; // Focal length
        double aspect; // Aspect ratio
        double ppx; // Principal point X
        double ppy; // Principal point Y
        Mat R; // Rotation
        Mat t; // Translation
    };
    

    R& S之间的区别是什么?我们从calibrateCamera()和R&我们从stereoCalibrate()得到的CameraParams中包含的T?

1 个答案:

答案 0 :(得分:2)

这里的问题是术语不一致。 OpenCV称之为相机矩阵的是包含内在函数的3x3矩阵K。 Harley和Zisserman所说的相机矩阵是一个3x4相机投影矩阵P = K * [R|t],包括内在函数和外在函数。