準備雙目攝像頭:
準備標定板
標定的開始階段最需要用到的標定板,可以直接從opencv官網上能下載到:
http://docs.opencv.org/2.4/_downloads/pattern.png
具體如下:
然後,建議固定到盒子上,方便等下拍照。
採集圖片
建議左右攝像頭,同時拍照,分別保存起來,可以參考 opencv 雙目攝像頭拍照
保存大約20到30張圖片,MATLAB2016的這個工具十分挑剔,如果角度不好的話,將使用不了,因此在採集圖像時,最好多的採集一些,拍的時候要拍到全部;注意事項:是測量好屏幕上每個方格的大小,這個標定的時候會用到,比如20mm。
一、 標定步驟
1. 調出標定工具箱
在命令行輸入stereoCameraCalibrator,出現如下界面:
2. 勾選相應的選項
然後將上面的“Skew”、“Tangential Distortion”以及“2 Coefficients”等選項選上,將“3 Coefficients”選項去掉,如下:
3. 載入圖像
然後點擊 Add images(添加圖像),出現如下界面:
Camera 1 代表左攝像頭,Camera 2 代表右攝像頭,分別選擇存放着左右圖像的文件夾,需要特別注意的是棋盤格的邊長應該根據打印的實際大小填寫 (例如20mm),單位可以選擇
然後點擊OK,程序會自動檢測採集的圖像到底有多少可以使用,可以說MATLAB2016的這個工具十分挑剔,如果角度不好的話,將使用不了,因此在採集圖像時,最好多的採集一些。(此處只是爲了說明標定步驟,所以使用的圖像較少)。
4. 標定
點擊按鈕,開始標定:
5. 校準
從下圖可以看到,平均的標定誤差以及 標定過程中誤差較大的的圖像對。
點擊選擇不想接受的誤差直方圖,可以直接在左邊的圖像對中找到對應的圖像,右鍵選擇“Remove and Recalibrate”:
可以重複上述步驟,直到認爲誤差滿足標定需求爲止。
6. 導出參數
點擊選擇Export camera parameters, 並點擊“OK”。
二、 參數讀取
標定結束後,會得到如下標定參數:
CameraParameters1與CameraParameters2爲左右攝像頭的內部參數,RotationOfCamera2與TranslationOfCamera2爲兩個攝像頭的旋轉、平移參數。
1. 兩個攝像頭的平移和旋轉參數
平移參數可直接使用;但旋轉參數需進行轉置才能使用。
2. 攝像機內參矩陣
雙擊框框這裏:
CameraParameters1與CameraParameters2中包含如下文件:
IntrinsicMatrix存放的是攝像頭的內參,只與攝像機的內部結構有關,需要先轉置再使用。
例如:左相機的參數,點擊CameraParameters1
IntrinsicMatrix 存放的是攝像頭的內參
RadialDistortion 和 TangentialDistortion 中存放的是畸變參數
先看一下 IntrinsicMatrix 參數,雙擊一下 IntrinsicMatrix
這個和OpenCV中是轉置的關係,注意不要搞錯。
對應
即:
420.758142829981 -0.457820850080972 344.440839504749
0 423.157176819330 242.870587685168
0 0 1
3. 畸變參數
RadialDistortion 和TangentialDistortion 中存放的是畸變參數,
RadialDistortion 爲 徑向畸變,攝像頭由於光學透鏡的特性使得成像存在着徑向畸變,可由K1,K2,K3確定。
TangentialDistortion 爲 切向畸變,由於裝配方面的誤差,傳感器與光學鏡頭之間並非完全平行,因此成像存在切向畸變,可由兩個參數P1,P2確定。
不過在使用時,需要注意參數的排放順序,即K1,K2,P1,P2,K3。切記不可弄錯,否則後續的立體匹配會出現很大的偏差。
例如, 左相機爲例:
RadialDistortion :0.016004928431323 , 0.041062484186359 對應 K1,K2 ; K3默認爲0
TangentialDistortion :0.005480700176874 , 0.003979285309815 對應 P1,P2
所以在opencv中使用時,K1,K2,P1,P2,K3順序 :
0.016004928431323 , 0.041062484186359 , 0.005480700176874 , 0.003979285309815 ,0
希望對你有幫助。