Opencv: Computing fundamental matrix from R and T

Viewed 4106

I want to compute the epipolar lines of a stereo camera. I know both camera intrinsics matrix as well as R and T. I tried to compute the essential matrix as told in Learning Opencv book and wikipedia.

Essential Matrix

where [t]x is the matrix representation of the cross product with t.

Fundamental matrix so

enter image description here

I tried to implement this with python and then use the opencv function cv2.computeCorrespondEpilines to compute the epilines.

Bad epilines

The problem is that the lines I get don't converge in a point as they should... I guess I must have a problem computing F.

This is the relevant pice of code:

 T #Contains translation vector
 R #Rotation matrix
 S=np.mat([[0,-T[2],T[1]],[T[2],0,-T[1]],[-T[1],T[0],0]])
 E=np.mat(R)*S

 M1=np.mat(self.getCameraMatrix(cam1))
 M1_inv=np.linalg.inv(M1)
 M2=np.mat(self.getCameraMatrix(cam2))
 M2_inv=np.linalg.inv(M2)

 F=(M2_inv.T)*E*M1_inv

The matrices are:

M1=[[ 776.21275864    0.          773.70733324]
 [   0.          776.21275864  627.82872456]
 [   0.            0.            1.        ]]

M2=[[ 764.35675708    0.          831.26052677]
 [   0.          764.35675708  611.85363745]
 [   0.            0.            1.        ]]

R=[[ 0.9999902   0.00322032  0.00303674]
 [-0.00387935  0.30727176  0.9516139 ]
 [ 0.0021314  -0.95161636  0.30728124]]

T=[ 0.0001648   0.04149158 -0.02854541]

The ouput F I get it's something like:

F=[[  4.75910592e-07   6.28777619e-08  -2.78886982e-04]
 [ -4.66942275e-08  -7.62837993e-08  -7.34825205e-04]
 [ -8.86965149e-04  -6.86717269e-04   1.40633035e+00]]

EDITED: The cross multiplication matrix was wrong, it has to be: S=np.mat([[0,-T2,T1],[T2,0,-T[0]],[-T1,T[0],0]])

The epilines converge now at the epipole.Eipole ok

1 Answers
Related