最本質的相機內參intrinsics與外參extrinsics分析,從建模,推導到求解


一些內容來自於:Camera Extrinsics and Intrinsics. Link: Extrinsics, Intrinsics.

本文的座標變換,矩陣變換完全建立在單應性座標 homogeneous coordinate和單應性變換的基礎上,包括了基礎的剛體變換,以及投影變換等。具體的描述參見:homogeneous單應性座標的定義,以及不同投影,仿射,相似,剛體變換矩陣的關係和自由度分析。

I. 座標系的建立,Coordinate System.

主要講從世界座標系到圖像平面座標系以及到相機的傳感器感光元件上的座標系定義。注意:下面開始,所有的座標點的含義均遵循下面的命名規則:

  • oo表示的是object,world,也就是世界座標系下面的座標或者轉換矩陣,3D;
  • kk表示camera,相機座標系下的座標或者變換矩陣;
  • cc表示image plane,圖像平面座標系下的座標點或者變換矩陣;
  • ss表示sensor,傳感器平面座標系下的座標點或者變換矩陣;
  • 一個投影變換矩陣,寫成bHa^bH_a或者寫成bPa^bP_a,它的含義爲:從a座標系投影到b座標系下的homo矩陣H或者投影矩陣P,都是可以的。也可以說成,將a座標系下的點投影到b座標系下的transformation變換矩陣。

因此, sHc{^sH_c}表示從image plane圖像平面投影到sensor傳感器平面的投影矩陣,以此類推,cHk{^cH_k}表示從camera相機座標系投影到image plane圖像平面的投影矩陣,kHo{^kH_o}表示從object/ world世界座標系投影到camera相機座標系下的投影矩陣,也可以稱之爲homo矩陣。

根據表述規則,羅列出不同座標系下的座標點的表示方法。

  1. World/ Object coordinate system.
    So=[X,Y,Z]T, o for object. S_{o}=[X, Y, Z]^T,\ o \ for \ object.
  2. Camera coordinate system.
    Sk=[kX,kY,kZ]T, k for camera. S_{k}=[{^kX}, {^kY}, {^kZ}]^T,\ k \ for \ camera.
  3. Image (plane) coordinate system.
    Sc=[cx,cy]T, c for image or plane. S_c=[^cx,{^cy}]^T, \ c \ for \ image \ or \ plane.
  4. Sensor coordinate system. This has some distortion and nonlinearity from image coord to sensor coord.
    Ss=[sx,sy]T, s for sensor. S_s=[^sx, {^sy}]^T, \ s \ for \ sensor.

II. 轉換關係,Transformation.

從目標的世界座標系3D,轉換到相機座標系3D,然後轉換到圖像平面座標系2D,最後轉換到傳感器座標系2D。轉換的矩陣關係爲:
[sxsy1]=sHccHkkHo[XYZ1] \left[ \begin{matrix} ^sx \\ ^sy \\ 1 \end{matrix} \right] = {^sH_c} {^cH_k} {^kH_o}\left[\begin{matrix} X\\ Y\\ Z\\ 1 \end{matrix}\right]
其中,image plane和camera system的原點,在x和y方向是重合的,只是說image plane的原點座標相較於camera origin向z軸平移了c。因此,圖像平面的原點可以表示爲相機平面的z軸平移。
kOc=k[0,0,c]T ^kO_c={^k[0, 0, -c]^T}
下圖展示了圖像平面與相機平面的原點關係。
圖像平面與相機平面的原點關係圖

III. From the world coord to the sensor coord.

下面分析從世界座標系,通過一系列轉換,到圖像和傳感器平面座標的關係。其中,目標到相機是外參,相機與圖像平面,傳感器平面,是內參。
世界座標系到傳感器座標系的轉換關係
他們之間的變換關係,對應的剛體變換到投影變換等不同方式。具體如下圖:
變換方式分析

3.1 Extrinsics,相機的外參

Extrinsic parameters describe the pose of the camera in the world.

3.1.1 從世界座標系到相機座標系

world coordinate to camera coordinate.
從世界座標系到相機座標系的轉換是可逆的。知道了外參,就知道轉換的矩陣。求逆就可以相互轉換。
是目標點的3D位置與相機點的3D位置的相互關係所組成的homo矩陣。包括的目標位置和相機位置的一個平移和旋轉關係。是一個剛體變換。只是旋轉和平移。6個自由度XpX_p爲投影的目標點的世界座標系下的3D座標。
kXp=kHXp {^kX_p} = {^kH}X_p
其中,kH{^kH}矩陣爲:
kH=[RRXo0T1] {^kH}= \left[ \begin{matrix} R &-RX_o \\ 0^T&1 \end{matrix} \right]
XoX_o爲camera在世界座標系下的座標。通過kH^kH矩陣,將世界座標系下的點XpX_p投影到相機座標系下的kXP^kX_P
下圖是對上面的一個小的總結,手寫的推導。
相機的不同座標系的轉換關係

3.2 Intrinsics,相機的內參

Intrinsic parameters describe the mapping of the scene in front of the camera to the pixels in the final image (sensor).
其中,可逆的部分是從圖像平面到sensor平面以及傳感器的偏差,這裏表述爲model deviation。這兩部分是可逆的,都是2D與2D直接的變換。而對於相機到圖像,這是一箇中心投影,由3D到2D的一個變換。在這個過程中,缺少了深度信息,因此,是不可逆的變換。

3.2.1 從相機到圖像平面

相機座標系到圖像平面座標系,camera coordinate to image plane。
這裏採用了相似三角形的方式,來分析相機上的一點PP和圖像平面上的一點pˉ\bar p。其中,x,yx, y採用的是相似三角形的變換,而zz上所有的點,即深度信息,全是mapping到一個平面上,均爲常數cc,這個常數,也可以設置爲focal length,焦距。
在這裏插入圖片描述
因此,得到了圖像平面上的一點cxpˉ^cx_{\bar p}
cxpˉ=cPkkXp ^cx_{\bar p} = {^cP_k}{^kX_p}
其中,cPk^cP_k爲:
cPk=[c0000c000010] ^cP_k=\left[ \begin{matrix} c &0 &0&0 \\ 0&c&0&0\\ 0&0&1&0 \end{matrix} \right]
kH{^kH}cPk^cP_k做合併處理,就能夠直接得到從世界座標系投影到圖像平面的矩陣cP^cP。這裏表示從世界座標系投影到相機座標系,通過kH{^kH};然後,在從相機投影到圖像平面,通過cPk{^cP_k}
cP=cPkkH=[c0000c000010][RRXo0T1] ^cP={^cP_k}{^kH}=\left[ \begin{matrix} c &0 &0&0 \\ 0&c&0&0\\ 0&0&1&0 \end{matrix} \right] \left[ \begin{matrix} R &-RX_o \\ 0^T&1 \end{matrix} \right]
其中,由於cPk{^cP_k}的最後一列全爲0,對最後一列做簡化,得到calibration matrix ck^ck:
ck=[c000c0001] ^ck=\left[ \begin{matrix} c &0 &0 \\ 0&c&0\\ 0&0&1 \end{matrix} \right]
得到最後的投影矩陣cP^cP
cP=ck[RRXo]=ckR[IXo]3×4 ^cP={^ck} \left[ \begin{matrix} R &-RX_o \end{matrix} \right] ={^ck}R \left[ \begin{matrix} I &-X_o \end{matrix} \right] _{3\times4}
因此,我們能夠將任何的世界座標的點XpX_p,投影到圖像平面cx^cx
cx=ckR[IXo]Xp ^cx={^ck}R \left[ \begin{matrix} I &-X_o \end{matrix} \right] X_p

3.2.2 從圖像平面到傳感器

image plane to sensors. 很多時候,傳感器座標系的初始原點(0,0)(0,0)不是平面的中心點。有一個小的位移。一般還包括了剪切和尺度的變換。因此,從圖像平面到傳感器的變換矩陣sHc^sH_c爲:
sHc=[1sxH01+myH001] ^sH_c=\left[ \begin{matrix} 1 &s &x_H \\ 0&1+m&y_H\\ 0&0&1 \end{matrix} \right]
sHc^sH_c矩陣與calibration matrix矩陣ck^ck結合,得到:
K=sHcck=[1sxH01+myH001][c000c0001]=[ccsxH0c(1+m)yH001] K={^sH_c}{^ck}=\left[ \begin{matrix} 1 &s &x_H \\ 0&1+m&y_H\\ 0&0&1 \end{matrix} \right] \left[ \begin{matrix} c &0 &0 \\ 0&c&0\\ 0&0&1 \end{matrix} \right] \\=\left[ \begin{matrix} c &cs&x_H \\ 0&c(1+m)&y_H\\ 0&0&1 \end{matrix} \right]
其中,矩陣KK是仿射變換,包含5個參數,自由度爲5:相機的常數,也就是焦距cc, 原點xH,yHx_H,y_H,尺度因子mm,剪切因子ss
sx=KR[IXo]X ^sx=KR \left[ \begin{matrix} I &-X_o \end{matrix} \right] X
下圖是一個對相機內參的總結,包括了上述講的幾個方面。
相機內參的轉換關係

3.2.3 傳感器平面的非線性誤差

上面的所有設定都只考慮了線性的誤差,在真實世界裏面,具有鏡頭的畸變,傳感器的不平整性。包括徑向畸變和切向畸變。需要用一些參數來進行校正。這個矩陣爲aHs^aH_s
aHs(x)=[10Δx(x,q)01Δy(x,q)001] ^aH_s(x)= \left[ \begin{matrix} 1 &0 &\Delta_x(x,q)\\ 0&1&\Delta_y(x,q)\\ 0&0&1 \end{matrix} \right]
最後得到非線性誤差後的在傳感器上的圖像座標:
ax=aHssx {^ax}={^aH_s}{^sx}

IV. 總結.

可以將整個投影看做兩部分。

  1. 仿射變換,將世界座標下的點XpX_p投影到傳感器座標系下爲點sx^sx
    sx=PXp ^sx=PX_p
  2. 非線性變換,考慮傳感器的非線性誤差:
    ax=aHs(x)sx ^ax={^aH_s}(x){^sx}
  3. 整個參數量爲11個,包括了外參6個,內參5個

下圖對本文所描述的外參和內參做了總結。
相機內外參數的總結

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