相機標定是機器視覺、SLAM等繞不開的環節,今天介紹一種最爲簡單的可視化標定方法。
這篇文章只是講解如果標定,關於相機的標定原理,可以參考別的文章,這裏推薦一篇《【機器視覺】張氏法相機標定》
一. 準備工作
- 方格標定板一塊(實際上沒有也行);
- 已經安裝Matlab的電腦一臺(Matlab最低版本要求是R2013b,推薦使用最新版本R2019b);
注意:
1.如果你有正版Matlab賬號,或者你是學生,你可以使用網頁版的Matlab;
2.如果你電腦上沒有Matlab,而且你也沒有正版賬號,那麼你可以選擇這個網站提供的雲端Matlab,你只需要免費註冊個賬號,然後將圖片上傳雲端就可以按照如下方法進行標定。
二. 開始標定
1.第一步 打印標定板
如果你還沒有標定,那麼你需要打印一塊標定板出來,但是你放心,準備標定板的過程是非常簡單的。你先將我提供的標定板圖片下載——下載標定板(提取碼:5yun),然後打印出來,只要你保持圖片的橫縱比,打印成任何尺寸都可以,我推薦打印在A4紙上(如果你不方便打印,其實你也可以直接下載下來顯示在電腦屏幕上也是一樣的,也不需要固定大小,只要橫縱比不變就行)。打印之後的樣式,如下圖:
2. 拍攝包含標定板的圖片
使用將要被標定的相機,拍攝一些包含標定板的照片,根據我的經驗20到30張圖片已經夠了。當然圖片越多結果也會越準確,但是會多用一些時間。拍攝圖片的技巧是,要多個角度大範圍的去拍攝標定板,讓它成像在你相機屏幕的各個地方,大家可以參考我下面的拍攝方式。
注意: 拍攝照片時有幾點需要注意:標定板的擺放沒有要求,橫豎都行。但是拍照片時對相機的姿態有要求,你相機如果是最終橫着使用,那麼拍照片時相機也要橫着拍。至於這裏面的原因,可以參考我的另外一篇博客:《相機內參fx,fy,cx,cy的方向問題!》
3. 使用Matlab進行相機內參數標定
① 打開已經安裝好的Matlab軟件,菜單欄中依次點擊 App
-> Camera Calibrator
,如下圖:
②在打開的Camera Calibrator工具中,依次點擊Add Image
-> From File
,如下圖:
③然後選擇你剛剛已經拍攝好的照片,點擊Open
按鈕,如下圖:
④彈出的Checkboard Square Size窗口中,直接點擊OK
按鈕,如下圖:
注意:藍色框中的數字是標定板一個小方格的邊長,這裏不用管它,數值對最終的標定結果影響不大。
⑤ 選擇相機模型,如果你使用的是普通的針孔相機模型,請選擇Standard
,如果是魚眼相機,就選擇Fisheye
,如下圖:
⑥ 然後選擇需要標定的參數。點擊Options
選擇想要的畸變參數形式,然後點擊,Calibrate
按鈕開始標定,如下圖:
注意: 在畸變參數中,徑向畸變是默認勾選2 Coefficients
,也就是說徑向畸變只使用兩個係數,如果你不是很明白其中的道理,那你就用默認狀態;切向畸變是可選擇的,如果你需要切向畸變,請勾選Tangential Distortior
;skew
很少用到,它表示的是是單個像素x,y軸方向的夾角係數。
⑦ 稍等一會,就能看到標定工具界面發生了變化,右邊多出來兩個窗口,紅框中表示的是每一張圖片投影產生的誤差是幾個像素,橫座標是圖片的序號,縱座標是誤差。綠色框中表示的是通過照片還原得到的拍攝角度。
⑧ 鼠標點擊紅框中圖標上的紅線,將它往下拉,拉到0.8
以內就可以了,那些誤差大的照片就會被選中,如下圖:
⑨ 上一步拉動紅線被選中的圖片,會在標定工具左側窗口中選中,藍色狀態的圖片就是誤差較大的圖片,如下圖:
⑩ 在任意一張被選中的圖片上,單擊右鍵,選擇Remove and Recalibrate
刪掉這些圖片,然後就會自動重新標定,如下圖:
⑪等待標定完成之後,依次點擊Export Camera Parameters
-> OK
,將標定結果輸出到Matlab命令行中,如下圖:
⑫關閉相機標定工具頁面,在Matlab主界面命令行中,可以看到最終的標定結果,如下圖:
三. 參數介紹:
相機的內參矩陣:
其中 FocalLength
分別對應和
PrincipalPoint:
分別對應和
相機的徑向畸變公式:其中RadialDistortion
分別對應和
相機的切向畸變公式: 其中TangentialDistortion
分別對應和