知乎的公式格式有點問題,請看原文鏈接:

實戰 | 相機標定?

mp.weixin.qq.com
圖標

什麼是相機標定?我們為什麼需要相機標定?

相機標定就是確定相機內參和外參的過程,其結果精度會直接影響視覺系統後續工作的準確性。

坐標系

相機標定涉及到了四大坐標系,分別為:

像素坐標系

圖像物理坐標系

相機坐標系

世界坐標系

為了進行相機標定,必須已知世界坐標系中足夠多的三維空間點坐標,找到這些空間點在圖像中投影點的二維圖像坐標,並建立對應關係。世界坐標系中某個給定點投影到圖像坐標系中被分為兩個步驟:

機器視覺中常用的有兩種不同類型的鏡頭:普通鏡頭和遠心鏡頭。使用普通鏡頭時,世界坐標繫到圖像坐標係為透視投影;使用遠心鏡頭時為平行投影。

相機標定方法分類

相機標定方法有:傳統相機標定法、主動視覺相機標定法、相機自標定法。

標定方法優點缺點常用方法傳統相機標定法可使用於任意的相機模型、 精度高需要標定物、演算法複雜Tsai兩步法、張氏標定法主動視覺相機標定法不需要標定物、演算法簡單、魯棒性高成本高、設備昂貴主動系統控制相機做特定運動相機自標定法靈活性強、可在線標定精度低、魯棒性差分層逐步標定、基於Kruppa方程

(左右滑動查看)

  1. Tsai兩步法是先線性求得相機參數,之後考慮畸變因素,得到初始的參數值,通過非線性優化得到最終的相機參數。Tsai兩步法速度較快,但僅考慮徑向畸變,當相機畸變嚴重時,該方法不適用。
  2. 張氏標定法使用二維方格組成的標定板進行標定,採集標定板不同位姿圖片,提取圖片中角點像素坐標,通過單應矩陣計算出相機的內外參數初始值,利用非線性最小二乘法估計畸變係數,最後使用極大似然估計法優化參數。該方法操作簡單,而且精度較高,可以滿足大部分場合。詳細原理見《從零開始學習「張氏相機標定法」(一)成像幾何模型》。
  3. 基於主動視覺的相機標定法是通過主動系統控制相機做特定運動,利用控制平臺控制相機發生特定的移動拍攝多組圖像,依據圖像信息和已知位移變化來求解相機內外參數。這種標定方法需要配備精準的控制平臺,因此成本較高。
  4. 分層逐步標定法是先對圖像的序列做射影重建,在重建的基礎上進行放射標定和歐式標定,通過非線性優化演算法求得相機內外參數。由於初始參數是模糊值,優化演算法收斂性不確定。
  5. 基於Kruppa的自標定法是通過二次曲線建立關於相機內參矩陣的約束方程,至少使用3對圖像來標定相機。圖像序列長度會影響標定演算法的穩定性,無法保證射影空間中的無窮遠平面。

MATLAB相機標定應用程序

MATLAB自帶相機標定應用程序,有camera calibrator和stereo camera calibrator兩類相機標定應用程序。其操作簡單、直觀,能夠獲得相機的內、外參數以及畸變參數等。

其中,camera calibrator用於單目相機標定;stereo camera calibrator用於雙目相機標定。兩者操作方式相同,唯一區別在於stereo camera calibrator添加圖片時會彈出添加兩個相機圖片的操作框。

標定板準備(實驗室經費有限,只能自己製作)

平面標定板具有以下幾個優點:

  1. 易於操作;
  2. 尺寸可以製作的非常精確;
  3. 非常方便應用在背光照明應用中,只需要使用透明材料製作放置標誌點的底盤即可。

使用MATLAB編程進行棋盤標定板的製作,將圖片列印後固定在一塊平板上。程序如下:

J = (checkerboard(300,3,4)>0.5); %生成黑白棋盤圖像
figure, imshow(J) %顯示黑白棋盤圖像
imwrite(J,plate.jpg);%保存黑白棋盤圖像

效果如圖:(感覺有點寒酸呀,「但這不重要」,沒條件自己創造)

Camera Calibrator應用程序

camera calibrator操作界面如下:

對於標定圖像數量,位姿越多,標定結果也會越精確,建議在10到20幅之間。按照上圖中的1、2、3進行相機標定操作。我們可以選擇徑向畸變係數以及是否計算切向畸變和傾斜,通過優化選項可以設置內參矩陣以及徑向畸變參數的輸出形式。

1.添加標定圖像後顯示界面如下圖:

2.相機標定後顯示界面會顯示相機與標定板之間的位置關係。

3.相機參數輸出camera calibrator應用程序相機標定參數輸出如圖所示:

高亮:MATLAB相機標定結果中的內參矩陣默認格式為

,其中,

分別為

軸和

軸的有效焦距;

軸和

軸的不垂直因子,一般令

;

是光學中心。注意事項:

  1. 製作棋盤格標定板時,黑色方格與白色方格尺寸需要相同,所有方格尺寸一致;
  2. 採集標定板圖像時,應採集多幅不同位姿的標定板圖像,採集圖像數量不應太少,建議10~20幅為宜;
  3. 採集圖像時,相機的焦距不能調節,否則會改變相機的內參數,導致標定失敗;
  4. MATLAB相機標定程序能夠自動計算重投影誤差,重投影誤差越小表示相機標定的精度越高。

相機標定參數的準確度

相機標定過程中如果標定板放置不適當的話將會導致相機參數中某個參數或某些參數不能得到唯一值。為了得到高準確度的相機參數必須避免這種情況的發生。除了這個影響外,影響相機參數準確度的主要因素就是用於進行相機標定的圖像數量。下面顯示了用於相機標定的圖像數量對參數的影響。

從圖中可以看出相機參數的準確度隨使用圖像數量的增加而明顯增加。為什麼使用相當多的標定圖像可以提高相機標定精度?這主要是因為相機參數之間存在不容忽視的相關性,這些參數只能通過多次無關測量進行求解。為了得到更準確的相機參數,我們需要這樣做:

  1. 標定板在圖像中最好能夠覆蓋整個視野(覆蓋圖像的每個角落可以使得徑向畸變係數更準確);
  2. 標定板覆蓋較大的深度範圍(將標定板繞它的x軸和y軸旋轉或者放置在不同距離的位置上)。

相關文章

從零開始學習「張氏相機標定法」(一)成像幾何模型

從零開始學習「張氏相機標定法」(二)單應矩陣

從零開始學習「張氏相機標定法」(三)推導求解

從零開始學習「張氏相機標定法」(四)優化演算法前傳

從零開始學習「張氏相機標定法」(五)優化演算法正傳

一次拍攝搞定多相機自動化標定

利用自識別標記實現複雜場景下相機標定

IMU標定 | 工業界和學術界有什麼不同?


推薦閱讀:
相關文章