cameracamera-calibrationextrinsic-parameters

determine camera rotation and translation matrix from essential matrix


I am trying to extract rotation matrix and translation matrix from essential matrix. I took these answers as reference:

Correct way to extract Translation from Essential Matrix through SVD

Extract Translation and Rotation from Fundamental Matrix

Now I've done the above steps applying SVD to essential matrix, but here comes the problem. According to my understanding about this subject, both R and T has two answers, which leads to 4 possible solutions of [R|T]. However only one of the solutions would fit in the physical situation.

My question is how can I determine which one of the 4 solutions is the correct one?

I am just a beginner on studying camera position. So if possible, please make the answer be as clear (but simple) as possible. Any suggestion would be appreciated, thanks.


Solution

  • The simplest is testing a point 3D position using the possible solution, that is, a reconstructed point will be in front of both cameras in only one of the possible 4 solutions. So assuming one camera matrix is P = [I|0], you have 4 options for the other camera, but only one of the pairs will place such point in front them.

    More details in Hartley and Zisserman's multiple view geometry (page 259)

    If you can use Opencv (version 3.0+), you count with a function called "recoverPose", this function will do that job for you.

    Ref: OpenCV documentation, http://docs.opencv.org/trunk/modules/calib3d/doc/calib3d.html