2013-12-09 68 views
4

我想計算立體相機的極線。 我知道攝像機內在矩陣以及R和T. 我試圖計算學習Opencv書籍和維基百科中講述的基本矩陣。Opencv:從R和T計算基本矩陣

Essential Matrix

其中[T] x是用叔叉積的矩陣表示。

Fundamental matrix所以

enter image description here

我試着用Python來實現這一點,然後使用OpenCV的功能cv2.computeCorrespondEpilines計算epilines。

Bad epilines

的問題是,我得到的線沒有在一點收斂,因爲他們應該... 我想我一定有問題計算F.

這是相關PICE的代碼:

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] 

的輸出中FI得到它的類似:

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: 橫乘法矩陣是錯誤的,它必須是: S = np.mat([[0,-T 2,T 1] ,[T 2,0,-T [0]],[ - T 1,T [0],0]])

現在epilines會聚在epipole。 Eipole ok

+0

請發佈校準和姿態矩陣。 –

+0

你能確認這段代碼片段有效嗎? –

回答

2

哼,你˚F矩陣似乎是錯誤的 - ,首先,秩是接近3比2 從數據中獲取:

octave:9> tx = [ 0 -T(3) T(2) 
> T(3) 0 -T(1) 
> -T(2) T(1) 0] 
tx = 

    0.000000 0.028545 0.041492 
    -0.028545 0.000000 -0.000165 
    -0.041492 0.000165 0.000000 

octave:11> E= R* tx 
E = 

    -2.1792e-04 2.8546e-02 4.1491e-02 
    -4.8255e-02 4.6088e-05 -2.1160e-04 
    1.4415e-02 1.1148e-04 2.4526e-04 

octave:12> F=inv(M1')*E*inv(M2) 
F = 

    -3.6731e-10 4.8113e-08 2.4320e-05 
    -8.1333e-08 7.7681e-11 6.7289e-05 
    7.0206e-05 -3.7128e-05 -7.6583e-02 

octave:14> rank(F) 
ans = 2 

這似乎更有意義。你可以在你的繪圖代碼中嘗試F矩陣嗎?

+0

非常抱歉。我在交叉乘法矩陣中有一個錯誤的值...現在看起來好多了。謝謝 –