綜述 | 相機標定方法

本文做者蔡量力,公衆號:計算機視覺life成員,因爲格式緣由,公式顯示可能出問題,建議閱讀原文連接:綜述 | 相機標定方法另外推薦幾個原創的號 計算機視覺,Python,天然語言處理、數據挖掘相關,彙總最新資源,學習更高效!html

​ 在圖像測量過程以及機器視覺應用中,爲肯定空間物體表面某點的三維幾何位置與其在圖像中對應點之間的相互關係,必須創建相機成像的幾何模型,這些幾何模型參數就是相機參數。在大多數條件下這些參數(內參、外參、畸變參數)必須經過實驗與計算才能獲得,這個求解參數的過程就稱之爲相機標定(或攝像機標定)。不管是在圖像測量或者機器視覺應用中,相機參數的標定都是很是關鍵的環節,其標定結果的精度及算法的穩定性直接影響相機工做產生結果的準確性。所以,作好相機標定是作好後續工做的前提,提升標定精度是科研工做的重點所在。面試

​ 標定的目的主要爲解決兩個問題:算法

​ a、肯定世界座標系下三維空間點與像素平面像素點間的轉換關係(內外參);編程

​ b、肯定相機成像過程當中的畸變系,用於圖像矯正。框架

針孔相機模型

相機將三維世界中的座標點(單位:米)映射到二維圖像平面(單位:像素)的過程可以用一個幾何模型來描述,其中最簡單的稱爲針孔相機模型 (pinhole camera model),其框架以下圖所示:機器學習

圖 1

其中,涉及到相機標定涉及到了四大座標系,分別爲:函數

像素座標系img:爲了描述物體成像後的像點在數字圖像上(相片)的座標而引入,是咱們真正從相機內讀取到的信息所在的座標系。單位爲個(像素數目)。工具

成像平面座標系img:爲了描述成像過程當中物體從相機座標系到圖像座標系的投影透射關係而引入,方便進一步獲得像素座標系下的座標。 單位爲m。學習

相機座標系img:在相機上創建的座標系,爲了從相機的角度描述物體位置而定義,做爲溝通世界座標系和圖像/像素座標系的中間一環。單位爲m。優化

世界座標系img:用戶定義的三維世界的座標系,爲了描述目標物在真實世界裏的位置而被引入。單位爲m。

下面,咱們來詳細推導從世界座標系到像素座標的過程。

世界座標系到相機座標系

從世界座標系到相機座標系, 這是一個剛體變換,只需對世界座標系的三維點做用一個旋轉R和平移t(R,t即爲相機的外參),變換過程能夠經過一下公式完成:

相機座標系到成像平面座標系

這一過程進行了從三維座標到二維座標的轉換,也即投影透視過程(用中心投影法將物體投射到投影面上,從而得到的一種較爲接近視覺效果的單面投影圖,也就是使咱們人眼看到景物近大遠小的一種成像方式)。

成像過程以下圖所示:針孔面(相機座標系)在圖像平面(圖像座標系)和物點平面(棋盤平面)之間,所成圖像爲倒立實像。

圖 2

可是爲了在數學上更方便描述,咱們將相機座標系和圖像座標系位置對調,變成下圖所示的佈置方式(沒有實際的物理意義,只是方便計算):

圖 3

此時,假設相機座標系中有一點M,則在理想圖像座標系下(無畸變)的成像點P的座標爲(可由類似三角形原則得出):

f爲焦距,整理,得:

成像平面座標系到像素座標系

圖 4

如上圖,成平面座標系和像素座標系之間存在一個縮放和平移

整理得:

以fx、fy的方式表示爲:

其中

  • α、β的單位爲像素/米;
  • fx、fy爲x、y方向的焦距,單位爲像素;
  • (cx,cy)爲主點,圖像的中心,單位爲像素。

那麼,相機座標系到像素座標系的最終形式可寫成:

將 Zc移到左邊:

因此,在世界座標系中的三維點M=[X,Y,Z]T 和像素座標系中二維點*m*=[*u*,*v*]T的關係爲:

即:


其中,s爲縮放因子,A爲相機的內參矩陣,[R t]爲相機的外參矩陣,![](https://user-gold-cdn.xitu.io/2019/8/28/16cd800439dfa0b1?w=22&h=25&f=png&s=599)和![](https://user-gold-cdn.xitu.io/2019/8/28/16cd8004673c584d?w=21&h=27&f=png&s=698)分別爲m和M對應的齊次座標。

畸變模型

咱們在攝像機座標系到圖像座標系變換時談到透視投影。攝像機拍照時經過透鏡把實物投影到像平面上,可是透鏡因爲製造精度以及組裝工藝的誤差會引入畸變,致使原始圖像的失真。所以咱們須要考慮成像畸變的問題。

透鏡的畸變主要分爲徑向畸變和切向畸變,還有薄透鏡畸變等等,但都沒有徑向和切向畸變影響顯著,因此咱們在這裏只考慮徑向和切向畸變。

徑向畸變

顧名思義,徑向畸變就是沿着透鏡半徑方向分佈的畸變,產生緣由是光線在原理透鏡中心的地方比靠近中心的地方更加彎曲,這種畸變在普通廉價的鏡頭中表現更加明顯,徑向畸變主要包括桶形畸變和枕形畸變兩種。如下分別是枕形和桶形畸變示意圖:

圖 5

實際狀況中咱們經常使用r=0處的泰勒級數展開的前幾項來近似描述徑向畸變,矯正徑向畸變先後的座標關係爲:

切向畸變

切向畸變是因爲透鏡自己與相機傳感器平面(像平面)或圖像平面不平行而產生的,這種狀況可能是因爲透鏡被粘貼到鏡頭模組上的安裝誤差致使。畸變模型能夠用兩個額外的參數p1和p2來描述:

其中,

因此,咱們一共須要5個畸變參數(k1,k2,k3,p1,p2)來描述透鏡畸變。

綜上所述,相機標定實際上就是肯定相機的內外參數、畸變參數的過程。

以上是對於單個相機進行標定,那麼對於多目相機系統或者RGBD 相機的標定呢?

立體標定

對於多目相機系統或者RGBD 相機除了要對別對每一個相機進行以上標定之外,還須要求傳感器之間的變換T,以使同一時刻獲取的數據可以「對齊」,以雙目爲例,左右兩個相機的座標系以下圖:

 圖 6

計算出兩個攝像機之間的旋轉矩陣R和平移向量t,方法是分別計算出兩個攝像機的R和T,再由如下公式計算:$$R=Rrbullet Rl\t=tr-Rbullet tl$$

立體匹配

因爲單相機獲取的圖像只能計算出二維座標,由於咱們使用了2套相機,且2套相機之間的關係也是已知的,那麼若是咱們能把三維空間中某點在左右相機成像的二維座標都計算出來,且能知道這是同一個點,這樣就能夠計算出三維座標。這裏面確認同名點的技術就是立體匹配。立體匹配有不少種算法,其中局部匹配法是最經常使用的,可是就目前已有算法來講,沒有一種算法能夠實現100%匹配。通常來講待匹配點越多,匹配準確率越低。

現有標定方法介紹

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

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

(左右滑動查看)

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

以上爲單個相機標定的方法,而對於相機-相機、相機-距離傳感器之間進行標定,OpenCV、Matlab都有自帶的工具箱或函數庫能夠用來標定,但[1]提出了一個帶有Web界面的工具箱,用於全自動相機到相機和相機到範圍的校準。該系統可在一分鐘內恢復內外參數以及攝像機和距離傳感器之間的轉換。並且,該方法所提出的基於生長的棋盤格角點檢測方法明顯優於OpenCV須要指定棋盤格角點大小的角點檢測方法。詳細介紹請參考[《一次拍攝搞定多相機自動化標定》](https://mp.weixin.qq.com/s?__biz=MzIxOTczOTM4NA==&mid=2247485108&idx=1&sn=d5b32d488a3ef57ba6009f6e7a80efeb&chksm=97d7e323a0a06a3535cba10f095e840dda7a60942362dc2176325c73373bed6026900c2f8292&scene=21#wechat_redirect)


References:

一、Geiger A, Moosmann F, Car Ö, et al. Automatic camera and range sensor calibration using a single shot[C]//Robotics and Automation (ICRA), 2012 IEEE International Conference on. IEEE, 2012: 3936-3943.

二、針孔相機投影模型以及畸變模型

三、計算機視覺life| 相機標定

四、學習opencv3(中文版) —— Adrian Kaehler & Gary Bradski

五、雙目視覺之相機標定

關注公衆號,點擊「學習圈子」,「SLAM入門「」,從零開始學習三維視覺核心技術SLAM,3天內無條件退款。早就是優點,學習切忌單打獨鬥,這裏有教程資料、練習做業、答疑解惑等,優質學習圈幫你少走彎路,快速入門!

推薦閱讀

如何從零開始系統化學習視覺SLAM?從零開始一塊兒學習SLAM | 爲何要學SLAM?從零開始一塊兒學習SLAM | 學習SLAM到底須要學什麼?從零開始一塊兒學習SLAM | SLAM有什麼用?從零開始一塊兒學習SLAM | C++新特性要不要學?從零開始一塊兒學習SLAM | 爲何要用齊次座標?從零開始一塊兒學習SLAM | 三維空間剛體的旋轉從零開始一塊兒學習SLAM | 爲啥須要李羣與李代數?從零開始一塊兒學習SLAM | 相機成像模型從零開始一塊兒學習SLAM | 不推公式,如何真正理解對極約束?從零開始一塊兒學習SLAM | 神奇的單應矩陣從零開始一塊兒學習SLAM | 你好,點雲從零開始一塊兒學習SLAM | 給點雲加個濾網從零開始一塊兒學習SLAM | 點雲平滑法線估計從零開始一塊兒學習SLAM | 點雲到網格的進化從零開始一塊兒學習SLAM | 理解圖優化,一步步帶你看懂g2o代碼從零開始一塊兒學習SLAM | 掌握g2o頂點編程套路從零開始一塊兒學習SLAM | 掌握g2o邊的代碼套路從零開始一塊兒學習SLAM | 用四元數插值來對齊IMU和圖像幀零基礎小白,如何入門計算機視覺?SLAM領域牛人、牛實驗室、牛研究成果梳理我用MATLAB擼了一個2D LiDAR SLAM可視化理解四元數,願你再也不掉頭髮最近一年語義SLAM有哪些表明性工做?視覺SLAM技術綜述彙總 | VIO、激光SLAM相關論文分類集錦研究SLAM,對編程的要求有多高?2018年SLAM、三維視覺方向求職經驗分享2018年SLAM、三維視覺方向求職經驗分享深度學習遇到SLAM | 如何評價基於深度學習的DeepVO,VINet,VidLoc?AI資源對接需求彙總:第1期AI資源對接需求彙總:第2期計算機視覺是人工智能之眼。公衆號已原創170篇文章,兼具系統性,嚴謹性,易讀性,菜單欄點擊「彙總分類」查看原創系列包括:三維視覺、視覺SLAM、深度學習、機器學習、深度相機、入門科普、CV方向簡介、手機雙攝、全景相機、相機標定、醫學圖像、前沿會議、機器人、ARVR、行業趨勢等。同時有入門基礎、項目實戰、面試經驗、教學資料等乾貨。一鍵關注星標,加技術交流羣,一塊兒進步。

相關文章
相關標籤/搜索