【发布时间】:2013-12-26 11:07:02
【问题描述】:
我想计算立体相机的核线。 我知道相机内在矩阵以及 R 和 T。 我尝试按照 Learning Opencv 书籍和维基百科中的说明计算基本矩阵。
其中 [t]x 是与 t 的叉积的矩阵表示。
所以
我尝试用 python 实现这个,然后使用 opencv 函数cv2.computeCorrespondEpilines 来计算epilines。
问题是我得到的线条并没有像他们应该的那样收敛在一个点上...... 我想我在计算 F 时一定有问题。
这是相关的代码:
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
矩阵是:
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]
我得到的输出 F 类似于:
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]]
编辑: 交叉乘法矩阵是错误的,它必须是: S=np.mat([[0,-T2,T1],[T2,0,-T[0]],[-T1,T[0],0 ]])
epilines现在在epipole汇合。
【问题讨论】:
-
请发布校准和姿势矩阵。
-
你能确认这段代码 sn-p 有效吗?
标签: python opencv computer-vision camera-calibration stereo-3d