相機標定:相機模型和畸變模型

一、相機標定方案

相機內參標定是確定內參和畸變參數(equidistqant畸變模型)或者(radial tangential模型)的過程。

本文首先介紹SLAM中常用的相機模型和畸變模型,隨後介紹我們採用的兩種內參標定方案:chessboard和Apriltag。

1.1相機模型和畸變模型

這裏主要介紹pinhole模型和fisheye模型,簡單涉獵omnidirection模型.

成像過程的統一投影模型可以用下圖來描述

image.png

                                                                                            圖1-1

 

爲不失一般性,上圖以fisheye相機的折射投影模型描述來世界座標系下的空間點最終投影到圖像平面的投影過程。記圖像平面的投影點(u,v)到主點(cx,cy)的距離爲r, 歸一化平面上的投影點(x_c,y_c,1), 於是有r=\sqrt{(u-cx)^2+(v-cy)^2} = \sqrt{(x_c*f_x)^2 + (y_c*f_y)^2}. 這裏的主點和光心的意義是相等的有點讓人混淆,是因爲該博文只是對投影過程做一個統一的泛化描述,爲了不引起奇異,我們這裏仍然區分主點和光心, 的計算在歸一化平面上進行:r=\sqrt{x_c^2+y_c^2}.

 

相機搭配不同的鏡頭可以產生不同的鏡頭投影模型lens projections。

pinhole camera model是最常用的相機模型,pinhole camera以perpspective projection爲主, 也稱之爲standard projection. 

fisheye camera model也是傳統的perspective projection,只是會有若干個不同的lens projection models.這裏列舉常見的四種:

  • Standard/Rectlinear projection model(對應下圖中綠色直線)
  • Stereographic projection(對應下圖中的藍色直線)
  • Equidistance (a.k.a. equiangular) projection(對應下圖中的黑色直線)
  • Equisolid angle (a.k.a. Equal Area) projection(對應下圖中的紫色直線)
  • Orthographic (a.k.a. Sine-law) projection(對應下圖中的紅色直線)

 

 

image.png

                                                                                                   圖1-2

 

由上圖可以看出,可以表示爲焦距和入射角的函數, 具體如圖三

image.png

                                                                                                 圖1-3

 

對於這五種經典的鏡頭畸變模型,參考[1]給出了具體的formulate過程.這裏只介紹pinhole camera和fisheye camera的projection和distortion模型的formulate過程。

x_c,y_c是歸一化平面上的座標,x_{distorted},y_{distorted}是帶有畸變的圖像座標.

  • Pinhole camera

pinhole model (rectilinear projection model) + radial-tangential distortion

The Pinhole camera model is the most common camera model for consumer cameras. In this model, the image is mapped onto a plane through perspective projection. The projection is defined by the camera intrinsic parameters such as focal length, principal point, aspect ratio, and skew.

參數[k1,k2,p1,p2,k3]

       \left\{\begin{matrix} x_{distorted} = x_c(1+k_1*r^2+k_2*r^4+k_3*r^6)+ 2p_1*x_c*y_c+p_2(r^2+2x_c^2)\\ y_{distorted} = y_c(1+k_1*r^2+k_2*r^4+k_3*r^6)+2p_2*x_c*y_c+p_1(r^2+2y_c^2) \end{matrix}\right.

 

 

  • Fisheye camera

pinhole model (rectilinear projection model) + fisheye distortion

The Fisheye camera model is a camera model utilized for wide field of view cameras. This camera model is neccessary because the pinhole perspective camera model is not capable of modeling image projections as the field of view approaches 180 degrees.

參數:[k1,k2,k3,k4]

                                                     \left\{\begin{matrix} r = \sqrt{x_c^2 + y_c^2} \\ \theta = atan2(r, 1)=atan2(r) \end{matrix}\right.

                                        \theta_{distorted} = \theta(1+k_1*\theta^2+k_2*\theta^4+k_3*\theta^6 +k_4*\theta^8)

                                                    \left\{\begin{matrix} x_{distorted} = x_c*\theta_{distorted}/r\\ y_{distorted} = y_c*\theta_{distorted}/r \end{matrix}\right.

 

用得到的x_{distorted},y_{distorted}乘內參[f_x, f_y, c_x,c_y]得到的就是我們實際觀測到的像素座標了. 去畸變過程則是上述畸變過程的逆過程,一個直觀的現象就是fisheye相機的圖像去畸變之後,原來圖像中的一個尺子從曲線變成了直線,perspective projection是能夠保證直線的投影還是直線的.

 

二、標定過程

1、相機設置:

  • 光圈: 5.6. 大光圈容易導致背景虛化.
  • 幀率: 5 fps.
  • exposure_time: 10ms. 曝光時間過長會導致運動模糊.
  • gamma: 0.45. 由於降低了曝光時間,需要提高gamma來提升圖像亮度,gamma值設得越小亮度越大.
  • gain: 關閉. 增益容易導致像素噪聲. 

 

2、AprilTag + kalibr庫

kalibr庫的安裝對系統環境要求比較苛刻,最好是clean的ubuntu環境,不要自行編譯安裝boost庫,必須使用python2等等。建議使用kalibr給的二進制包CDE. 另外使用kalibr庫時有個小bug:

kalibr_bagcreater --folder dataset-dir --output-bag awsome.bag

這個錄製rosbag文件的程序正常運行時你會發現它輸出的awsome.bag文件只有4.1K, 跟你輸入的雙目圖像數據完全對不上, 如果你比較細心地開始查找issues你會發現有個熱心人告訴你,需要在dataset-dir後面加個'.',沒錯就是這麼可愛任性,dataset-dir/.

 

三、實驗結果

軟件設置exposure_time=10ms, gamma=0.45, 採240張AprilTag圖像, 整體圖像偏暗,用pinhole-radtan模型和pinhole-equidistance模型得到幾乎一致的標定結果:

image.png

image.png

 

軟件設置exposure_time=30ms, gamma=0.45, 採集125張圖像,整體圖像亮度明顯提升,pinhole-radtan模型得到的標定結果報告:

image.png

image.png

 

 

四、Related Code

1、Supported models in Kalibr

2、Distortion Models in ROS (distortion_models.h)

  • plumb_bob: a 5-parameter polynomial approximation of radial and tangential distortion
  • rational_polynomial: an 8-parameter rational polynomial distortion model
  • equidistant (lunar)

3、hengli/camodocal

  • Pinhole camera model
  • Unified projection model
  • Equidistant fish-eye model

4、uzh-rpg/rpg_vikit/vikit_common: support pinhole, atan and omni camera

5、ethz-asl/aslam_cv2: support pinhole and unified peojection and radtan, fisheye and equidistant distortion

6、cggos/okvis_cg: support pinhole peojection and radtan and equidistant distortion

7、ptam_cg/src/ATANCamera.cc: support ATAN camera model

 

 

 

參考文獻

1.Models for the various classical lens projections.

2.各相機模型綜述

3.相機模型--omnidirectional camera.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章