-1

I want to verify the rotation matrix and translation vector of the intrinsic matrix factorization calculated by SFM with the rotation matrix and translation vector calculated in the binocular calibration with two cameras. `

    calRealPoint(objRealPoint, boardWidth, boardHeight, frameNumber, squareSize);
    cout << "cal real successful" << endl;

    double rms = stereoCalibrate(objRealPoint, imagePointL, imagePointR,
        cameraMatrixL, distCoeffL,
        cameraMatrixR, distCoeffR,
        Size(imageWidth, imageHeight), R, T, E, F/*, rvecs, rvecs*/, CALIB_USE_INTRINSIC_GUESS,
        TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 100, 1e-5));
    cout << "Stereo Calibration done with RMS error = " << rms << endl;

`

`

// corrected images
int pass_count = recoverPose(p1, p2, K_LEFT, noArray(), K_RIGHT, noArray(), E_, R_, t);

`

The result is that the rotation matrix is somewhat different, and the translation vector is much different.

enter image description here

enter image description here

Then I checked the API documentation, what I want to ask is what is the difference between T and t in the documentation?

Finally I used the decomposeEssentialMat function to calculate t. `

Mat t_, R1, R2;
    decomposeEssentialMat(E, R1, R2, t_);

t : [-0.9992756029282842;
0.004148058533358282;
0.03782939336967541]

T=[-30.43588350113243;
0.126341347579394;
1.152205663926915]

` So what exactly is the difference between T and t? thank you

Ander Biguri
  • 35,140
  • 11
  • 74
  • 120
JunWen Si
  • 1
  • 1

1 Answers1

0

Check the decomposeEssentialMat specification in the OpenCV reference manual. You'll find that it says

..., you can only get the direction of the translation, so the function returns unit t.

fana
  • 1,370
  • 2
  • 7