相機標定(Camera calibration)原理、步驟

相機標定(Camera calibration)原理、步驟


author@jason_ql(lql0716)
http://blog.csdn.net/lql0716


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

  • 常用術語
    內參矩陣: Intrinsic Matrix
    焦距: Focal Length
    主點: Principal Point
    徑向畸變: Radial Distortion
    切向畸變: Tangential Distortion
    旋轉矩陣: Rotation Matrices
    平移向量: Translation Vectors
    平均重投影誤差: Mean Reprojection Error
    重投影誤差: Reprojection Errors
    重投影點: Reprojected Points

1、座標系的轉換

1.1 世界座標系

世界座標系(world coordinate)(xw,yw,zw) ,也稱爲測量座標系,是一個三維直角座標系,以其爲基準可以描述相機和待測物體的空間位置。世界座標系的位置可以根據實際情況自由確定。

1.2 相機座標系

相機座標系(camera coordinate)(xc,yc,zc) ,也是一個三維直角座標系,原點位於鏡頭光心處,x、y軸分別與相面的兩邊平行,z軸爲鏡頭光軸,與像平面垂直。

1.3 世界座標系轉換爲相機座標系

xcyczc1=[R0t1]xwywzw1

其中R 爲3*3的旋轉矩陣,t 爲3*1的平移矢量,(xc,yc,zc,1)T 爲相機座標系的齊次座標,(xw,yw,zw,1)T 爲世界座標系的齊次座標。

1.4 像素座標系、圖像座標系

  • 圖1:
    此處輸入圖片的描述

  • 像素座標系(pixel coordinate)
    如圖1,像素座標系uov 是一個二維直角座標系,反映了相機CCD/CMOS芯片中像素的排列情況。原點o 位於圖像的左上角,u 軸、v 軸分別於像面的兩邊平行。像素座標系中座標軸的單位是像素(整數)

    像素座標系不利於座標變換,因此需要建立圖像座標系XOY其座標軸的單位通常爲毫米(mm),原點是相機光軸與相面的交點(稱爲主點),即圖像的中心點,X 軸、Y 軸分別與u 軸、v 軸平行。故兩個座標系實際是平移關係,即可以通過平移就可得到。

  • 圖像座標系轉換爲像素座標系

uv1=1/dX0001/dY0u0v01XY1

其中,dXdY 分別爲像素在XY 軸方向上的物理尺寸,u0,v0 爲主點(圖像原點)座標。

1.5 針孔成像原理

圖2:
此處輸入圖片的描述

如圖,空間任意一點P 與其圖像點p 之間的關係,P 與相機光心o 的連線爲oPoP 與像面的交點p 即爲空間點P 在圖像平面上的投影。
該過程爲透視投影,如下矩陣表示:

sXY1=f000f0001000xyz1

其中,s 爲比例因子(s 不爲0),f 爲有效焦距(光心到圖像平面的距離),(x,y,z,1)T 是空間點P 在相機座標系oxyz 中的齊次座標,(X,Y,1)T 是像點p 在圖像座標系OXY 中的齊次座標。

1.6 世界座標系轉換爲像素座標系

suv1=1/dX0001/dY0u0v01f000f0001000[R0t1]xwywzw1=αx000αy0u0v01000[R0t1]xwywzw1=M1M2Xw=MXw

其中,αx=f/dXαy=f/dY ,稱爲uv 軸的尺度因子,M1 稱爲相機的內部參數矩陣,M2 稱爲相機的外部參數矩陣,M 稱爲投影矩陣。

2 相機內參與畸變參數

2.1 相機內參

  • 參看1.6節所述

2.2 畸變參數

  • 畸變參數(distortion parameters)

    畸變(distortion)是對直線投影(rectilinear projection)的一種偏移。

    簡單來說直線投影是場景內的一條直線投影到圖片上也保持爲一條直線。

    畸變簡單來說就是一條直線投影到圖片上不能保持爲一條直線了,這是一種光學畸變(optical aberration),可能由於攝像機鏡頭的原因。

  • 畸變一般可以分爲:徑向畸變、切向畸變

    1、徑向畸變來自於透鏡形狀
    2、切向畸變來自於整個攝像機的組裝過程

    畸變還有其他類型的畸變,但是沒有徑向畸變、切向畸變顯著

  • 畸變圖示
    此處輸入圖片的描述

  • 徑向畸變

    實際攝像機的透鏡總是在成像儀的邊緣產生顯著的畸變,這種現象來源於“筒形”或“魚眼”的影響。

    如下圖,光線在原理透鏡中心的地方比靠近中心的地方更加彎曲。對於常用的普通透鏡來說,這種現象更加嚴重。筒形畸變在便宜的網絡攝像機中非常厲害,但在高端攝像機中不明顯,因爲這些透鏡系統做了很多消除徑向畸變的工作。
    此處輸入圖片的描述

    對於徑向畸變,成像儀中心(光學中心)的畸變爲0,隨着向邊緣移動,畸變越來越嚴重。

  • 徑向畸變包括:枕形畸變、桶形畸變

  • 切向畸變

    • 切向畸變是由於透鏡製造上的缺陷使得透鏡本身與圖像平面不平行而產生的。

    • 切向畸變可分爲:薄透鏡畸變、離心畸變

    • 切向畸變圖示:
      此處輸入圖片的描述

2.2.1 opencv中的畸變模型

  • 徑向畸變模型:

以下公式由泰勒展式得出,在opencv中K=1r2=x2+y2 , (x,y) 爲真實座標(發生畸變),(x,y) 爲理想座標。

δxr=x(k1r2+k2r4+k3r6+K)

δyr=y(k1r2+k2r4+k3r6+K)
  • 切向畸變模型:

δxd=2p1xy+p2(r2+2x2)+K

δyd=2p1(r2+2y2)+2p2xy+K
  • 理想座標(x,y) 與真實座標(x,y)

x=x+δxr+δxd

y=y+δyr+δyd

也即:

[xy]=(1+k1r2+k2r4+k3r6)[xy]+[2p1xy+p2(r2+2x2)2p1(r2+2y2)+2p2xy]

實際計算過程中,如果考慮太多高階的畸變參數,會導致標定求解的不穩定。

2.2.2 張氏標定中的畸變模型

  • 張正友的方法只考慮了徑向畸變,沒有考慮切向畸變

  • 模型:

    • 理想情況下(沒有畸變)圖片的像素座標爲:

      (u,v)
    • 真實的像素座標爲:

      (u¯,v¯)
    • 真實座標與理想座標的關係式(泰勒展開):
      (x,y) and (x¯,y¯) are the ideal (distortion-free) and real (distorted) normalized image coordinates.

      x¯=x+x[k1(x2+y2)+k2(x2+y2)2]

    y¯=y+y[k1(x2+y2)+k2(x2+y2)2]

    其中k1k2 是徑向畸變係數(coefficients of the radial distortion)。

    像素座標表示爲:

    u¯=u+(uu0)[k1(x2+y2)+k2(x2+y2)2]

    v¯=v+(vv0)[k1(x2+y2)+k2(x2+y2)2]

    即:

    [(uu0)(x2+y2)(vv0)(x2+y2)(uu0)(x2+y2)2(vv0)(x2+y2)][k1k2]=[u¯uv¯v]

2.2.3 Tasi畸變模型

  • Tasi畸變模型同張氏畸變模型類似,也只考慮了徑向畸變

2.3 相機標定

  • 相機標定步驟:
    1、打印一張棋盤格,把它貼在一個平面上,作爲標定物。
    2、通過調整標定物或攝像機的方向,爲標定物拍攝一些不同方向的照片。
    3、從照片中提取棋盤格角點。
    4、估算理想無畸變的情況下,五個內參和六個外參。
    5、應用最小二乘法估算實際存在徑向畸變下的畸變係數。
    6、極大似然法,優化估計,提升估計精度。

3 Matlab相機標定

  • 打開matlab,找到“Camera Calibrator”並打開

此處輸入圖片的描述

此處輸入圖片的描述

  • 在新窗口中選擇添加圖片“Add Images”

此處輸入圖片的描述

  • 添加圖片之後,會有如下提示,設置棋盤格的實際大小之後,點擊ok

此處輸入圖片的描述

  • 點擊“Calibrate”開始計算

此處輸入圖片的描述

  • 點擊“Export Camera Parameters”,輸出到matlab命令窗口

此處輸入圖片的描述

此處輸入圖片的描述

  • 導出的數據如下:
cameraParams = 

  cameraParameters (具有屬性):

   Camera Intrinsics
    IntrinsicMatrix: [3x3 double]
        FocalLength: [510.6720 511.9534]
     PrincipalPoint: [332.3800 238.4849]
               Skew: 0

   Lens Distortion
        RadialDistortion: [0.0618 -0.4877]
    TangentialDistortion: [0 0]

   Camera Extrinsics
      RotationMatrices: [3x3x50 double]
    TranslationVectors: [50x3 double]

   Accuracy of Estimation
    MeanReprojectionError: 0.1923
       ReprojectionErrors: [77x2x50 double]
        ReprojectedPoints: [77x2x50 double]

   Calibration Settings
                        NumPatterns: 50
                        WorldPoints: [77x2 double]
                         WorldUnits: 'mm'
                       EstimateSkew: 0
    NumRadialDistortionCoefficients: 2
       EstimateTangentialDistortion: 0


estimationErrors = 

  cameraCalibrationErrors (具有屬性):

    IntrinsicsErrors: [1x1 intrinsicsEstimationErrors]
    ExtrinsicsErrors: [1x1 extrinsicsEstimationErrors]
  • 在命令窗口輸入以下命令即可獲得內參矩陣和徑向畸變:
>> cameraParams.IntrinsicMatrix

ans =

  510.6720         0         0
         0  511.9534         0
  332.3800  238.4849    1.0000

>> cameraParams.RadialDistortion

ans =

    0.0618   -0.4877

參考資料

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