近幾天由於論文的關係,需要用到雙目測距,歷經千辛萬苦,終於得到想要的效果。我把最近一段時間踩到的坑總結一下,希望對各位有所幫助!
環境:
Matlab對雙目獲拍攝的圖片進行標定,opencv使用標定好的參數進行立體校正及立體匹配
使用Matlab標定時,會獲取各相機的內參、外參、畸變參數以及兩個相機間的平移及旋轉矩陣
1.opencv使用這些參數時,內參矩陣IntrinsicMatrix和旋轉矩陣RotationOfCamera2需要轉置後再使用。這點非常重要,否則你立體校正的結果都是錯的,何況立體匹配。
2.在更改相機分辨率進行測距時,需要使用相應分辨率的圖片進行重新標定,否則得到的距離結果是錯誤的。
3.標定時選擇各參數的意義
相機的畸變參數有徑向畸變K1,K2,K3,切向畸變P1,P2
-
選擇2Coefficients選項代表默認將K3視爲0(K3通常在魚眼鏡頭中使用,普通鏡頭一般不考慮),那麼標定得到的徑向畸變只有K1和K2兩個值。如果選擇3Coefficients則標定後也會得到K3值。
-
Skew值和我們得到的內參矩陣有關,如果未選中Skew,得到的內參就是下面式1,選中得到的內參便是式2,兩者的區別就是有沒有考慮到Skew偏斜係數
式1
式2
-
Tangential Distortion就是問你考不考慮切向畸變,不選中則切向畸變P1=P2=0;
-
在Opencv中,畸變係數使用時順序爲K1、K2、P1、P2、K3