1. 程式人生 > >相機標定

相機標定

形式 量化 mat The 最終 組裝 mic 采樣 差異

一、傳感器

傳感器是組成數字攝像頭的重要組成部分可分為CCD(Charge Coupled Device,電荷耦合元件)、CMOS(Complementary Metal-Oxide Semiconductor,金屬氧化物半導體元件)和CIS(Contact Image Sensor,接觸式圖像傳感器)。

二、針孔相機模型

:\[\frac{Z}{f}=\frac{X}{X‘}=\frac{Y}{Y‘}\]整理得:
\[X‘=f \frac{X}{Z}\] \[Y‘=f\frac{Y}{Z}\]上述兩個式子描述了點\(P\)和它的像之間的空間關系。不過,在相機中,我們最終獲得的是一個個的像素,這需要在成像平面上對像進行采樣和量化。為了描述傳感器將感受到的光線轉換成圖像像素的過程,我們設在物理成像平面上固定著一個像素平面\(o?u?v\)

。我們在像素平面得到了\(P′\) 的像素坐標:\([u, v]^T\)
像素坐標系通常的定義方式是:原點 \(o′\) 位於圖像的左上角,\(u\)軸向右與\(x\)軸平行,\(v\)
軸向下與\(y\)軸平行。像素坐標系與成像平面之間,相差了一個縮放和一個原點的平移。我
們設像素坐標在\(u\)軸上縮放了\(α\)倍,在\(v\)上縮放了\(β\)倍。同時,原點平移了\([c_x,c_ y ]^T\)。那麽,\(P′\)的坐標與像素坐標 \([u, v]^T\) 的關系為:
\[u=\alpha X‘+c_x\] \[v=\beta Y‘+c_y\]
\(\alpha f=f_x\)
,\(\beta f=f_y\),得:
\[u=f_x \frac{X}{Z}+c_x\] \[v=f_y \frac{Y}{Z}+c_y\]

其中,\(f\)的單位為米,\(α\),\(β\)的單位為像素每米,所以\(f_x\),\(f_y\)的單位為像素。把該式寫
成矩陣形式,會更加簡潔,不過左側需要用到齊次坐標:
\[Z{\left[ \begin{matrix}u \\v \\1 \end{matrix} \right]}= \frac{1}{Z}{\left[ \begin{matrix}f_x & 0 & c_x \\0 & f_y & c_y \\0 & 0 & 1 \end{matrix} \right]}{\left[ \begin{matrix}X \\Y \\Z \end{matrix} \right]}=KP \]


該式中,我們把中間的量組成的矩陣稱為相機的內參數矩陣(Camera Intrinsics)K。通常
認為,相機的內參在出廠之後是固定的,不會在使用過程中發生變化。有的相機生產廠商
會告訴你相機的內參,而有時需要你自己確定相機的內參,也就是所謂的標定。
除了內參之外,自然還有相對的外參。由於相機在運動,所以P的相機坐標應該是它的世界坐標(記為\(P_w\)),根據相機的當前位姿,變換到相機坐標系下的結果。相機的位姿由它的旋轉矩陣R和平移向量t來描述。那麽有:\[ZP_{uv}=Z{\left[ \begin{matrix}u \\v \\1 \end{matrix} \right]}=K(RP_w+t)=KTP_w\]
描述了 P 的世界坐標到像素坐標的投影關系。其中,相機的位姿 R, t 又稱為相機的外參
數(Camera Extrinsics)。上式兩側都是齊次坐標。因為齊次坐標乘上非零常數後表達同樣的含義,所以可以簡單地把 \(Z\) 去掉:\[P_{uv}=KTP_w\]

畸變

為了獲得好的成像效果,在相機的前方加了透鏡。透鏡的加入對成像過程中光線的傳播會產生新的影響: 一是透鏡自身的形狀對光線傳播的影響,二是在機械組裝過程中,透鏡和成像平面不可能完全平行,這也會使得光線穿過透鏡投影到成像面時的位置發生變化。
由透鏡形狀引起的畸變稱之為徑向畸變。在針孔模型中,一條直線投影到像素平面上還是一條直線。可是,在實際拍攝的照片中,攝像機的透鏡往往使得真實環境中的一條直線在圖片中變成了曲線。越靠近圖像的邊緣,這種現象越明顯。由於實際加工制作的透鏡往往是中心對稱的,這使得不規則的畸變通常徑向對稱。它們主要分為兩大類,桶形畸變和枕形畸變,如圖所示。

桶形畸變是由於圖像放大率隨著離光軸的距離增加而減小,而枕形畸變卻恰好相反。
在這兩種畸變中,穿過圖像中心和光軸有交點的直線還能保持形狀不變。
除了透鏡的形狀會引入徑向畸變外,在相機的組裝過程中由於不能使得透鏡和成像面
嚴格平行也會引入切向畸變。如圖所示

知道平面上的任意一點\(p\)可以用笛卡爾坐標表示為\([x,y]^T\),也可以把它寫成極坐標的形式\([r,\theta]^T\) ,其中\(r\)表示點\(p\)離坐標系原點的距離,θ表示和水平軸的夾角。徑向畸變可看成坐標點沿著長度方向發生了變化\(\delta r\),也就是其距離原點的長度發生了變化。切向畸變可以看成坐標點沿著切線方向發生了變化,也就是水平夾角發生了變化\(\delta\theta\)。對於徑向畸變,無論是桶形畸變還是枕形畸變,由於它們都是隨著離中心的距離增加而增加。我們可以用一個多項式函數來描述畸變前後的坐標變化:這類畸變可以用和距中心距離有關的二次及高次多項式函數進行糾正:
\[x_{corrected}=x(1+k_1r^2+k_2r^4+k_3r^6)\] \[y_{corrected}=y(1+k_1r^2+k_2r^4+k_3r^6)\]
其中 \([x, y]^T\) 是未糾正的點的坐標,\([x_{corrected} , y_{corrected} ]^T\) 是糾正後的點的坐標,註意它們都是歸一化平面上的點,而不是像素平面上的點。
對於畸變較小的圖像中心區域,畸變糾正主要是\(k_1\)起作用。而對於畸變較大的邊緣區域主要是\(k_2\) 起作用。普通攝像頭用這兩個系數就能很好的糾正徑向畸變。對畸變很大的攝像頭,比如魚眼鏡頭,可以加入\(k_3\) 畸變項對畸變進行糾正。
另一方面,對於切向畸變,可以使用另外的兩個參數 \(p_1\) ,$ p_2$ 來進行糾正:
\[c_{corrected}=x+2p_1xy+p_2(r^2+2x^2)\] \[y_{corrected}=y+p_1(r^2+2y^2)+2p_2xy\]
對於相機坐標系中的一點\(P(X,Y,Z)\),我們能夠通過五個畸變系數找到這個點在像素平面上的正確位置:

  1. 將三維空間點投影到歸一化圖像平面。設它的歸一化坐標為$ [x, y]^T$ 。
  2. 對歸一化平面上的點進行徑向畸變和切向畸變糾正。
    \[x_{corrected}=x(1+k_1r^2+k_2r^4+k_3r^6)+2p_1xy+p_2(r^2+2x^2)\] \[y_{corrected}=y(1+k_1r^2+k_2r^4+k_3r^6)+p_1(r^2+2y^2)+2p_2xy\]
  3. 將糾正後的點通過內參數矩陣投影到像素平面,得到該點在圖像上的正確位置。
    \[u=f_xx_{corrected}+c_x\] \[v=f_yy_{corrected}+c_y\]
    在上面的糾正畸變的過程中,使用了五個畸變項。實際應用中,可以靈活選擇糾正模型,比如只選擇 \(k_1\) ,$ p_1$ , \(p_2\) 這三項等

最後,我們小結一下單目相機的成像過程:

  1. 首先,世界坐標系下有一個固定的點 \(P\) ,世界坐標為 \(P_w\) ;
  2. 由於相機在運動,它的運動由$ R\(,\) t$ 或變換矩陣$ T ∈ SE(3) \(描述。\)P$的相機坐標為:
    \(P?_ c = RP_ w + t\)
  3. 這時的 P? c 仍有 X, Y, Z 三個量,把它們投影到歸一化平面 Z = 1 上,得到 P 的歸一化相機坐標:$P_c = [X/Z, Y /Z, 1] ^T $ 。
  4. 最後,P 的歸一化坐標經過內參後,對應到它的像素坐標:\(P_{uv} = KP_c\)

雙目相機模型

針孔相機模型描述了單個相機的成像模型。然而,僅根據一個像素,我們是無法確定
這個空間點的具體位置的。這是因為,從相機光心到歸一化平面連線上的所有點,都可以
投影至該像素上。只有當 P 的深度確定時(比如通過雙目或 RGBD 相機),我們才能確切
地知道它的空間位置。
測量像素距離(或深度)的方式有很多種,像人眼就可以根據左右眼看到的景物差異
(或稱視差)來判斷物體與我們的距離。雙目相機的原理亦是如此。通過同步采集左右相機的圖像,計算圖像間視差,來估計每一個像素的深度。
雙目相機一般由左眼和右眼兩個水平放置的相機組成。當然也可以做成上下兩個目,
但我們見到的主流雙目都是做成左右的。在左右雙目的相機中,我們可以把兩個相機都看
作針孔相機。它們是水平放置的,意味兩個相機的光圈中心都位於 x 軸上。它們的距離
稱為雙目相機的基線(Baseline, 記作 b),是雙目的重要參數。

現在,考慮一個空間點 \(P\) ,它在左眼和右眼各成一像,記作$P_L $, \(P_R\)。由於相機基線
的存在,這兩個成像位置是不同的。理想情況下,由於左右相機只有在 \(x\) 軸上有位移,
因此 \(P\) 的像也只在 \(x\) 上有差異。我們記它在左側的坐標為 \(u_L\) ,右側坐標為 \(u_R\)\[\frac{z-f}{z}=\frac{b-u_L+u_R}{b}\]
稍加整理,得
\[z=\frac{fb}{d},d=u_L-u_R\]
這裏 \(d\) 為左右圖的橫坐標之差,稱為視差(Disparity)。根據視差,我們可以估計一
個像素離相機的距離。視差與距離成反比:視差越大,距離越近 - 。同時,由於視差最小
為一個像素,於是雙目的深度存在一個理論上的最大值,由$ f b $確定。我們看到,當基線
越長時,雙目最大能測到的距離就會變遠;反之,小型雙目器件則只能測量很近的距離。

相機標定