摘自知乎https://zhuanlan.zhihu.com/p/389653208
相機(jī)成像主要有4個坐標(biāo)系:
成像的過程實質(zhì)上是幾個坐標(biāo)系的轉(zhuǎn)換。首先空間中的一點(diǎn)由世界坐標(biāo)系轉(zhuǎn)換到 攝像機(jī)坐標(biāo)系 ,然后再將其投影到成像平面 ( 圖像物理坐標(biāo)系 ) ,最后再將成像平面上的數(shù)據(jù)轉(zhuǎn)換到圖像平面 (圖像像素坐標(biāo)系 ) 。

對應(yīng)的左乘矩陣公式

1 相機(jī)內(nèi)參
相機(jī)內(nèi)參的作用是把坐標(biāo)從[相機(jī)坐標(biāo)系]轉(zhuǎn)換到[像素坐標(biāo)系]中

在左圖中,我們把相機(jī)看作是針孔,現(xiàn)實世界中的點(diǎn)P經(jīng)過相機(jī)的光心O,投影到物理成像平面上,變?yōu)辄c(diǎn)P'。
在右圖中,對這個模型進(jìn)行了一個簡化,將其看作是一個相似三角形。
下面我們來對這個模型進(jìn)行建模。
設(shè)(O-x-y-z)為相機(jī)坐標(biāo)系,習(xí)慣上我們把z軸指向相機(jī)前方,x向右,y向下。O為攝像機(jī)的光心,也是針孔模型中的針孔。
設(shè)真實世界點(diǎn)中的P的坐標(biāo)為[X,Y,Z]T,成像的點(diǎn)P'的坐標(biāo)為[X', Y', Z']T, 物理成像平面和光心的距離為f(即為焦距)。
根據(jù)右圖中的三角形相似關(guān)系,有:

其中,有負(fù)號是因為坐標(biāo)軸方向,也就表示了成的像是倒立的。
為了表示起來更方便,我們把成像平面從相機(jī)的后面對稱到前面去,如下圖所示。這樣,負(fù)號就沒有了。

在對稱后,有:

整理解出P'的坐標(biāo):


上面兩個式子就描述了P點(diǎn)與它所成像的坐標(biāo)關(guān)系,可以看到,X對應(yīng)的X'與焦距f有關(guān),與距離Z有關(guān)。
映射到成像平面上還不夠,我們還需要將這個像給放到像素坐標(biāo)系內(nèi)。
我們設(shè)在物理成像平面上固定著像素平面o-u-v。
設(shè)P'在像素平面坐標(biāo)系上的坐標(biāo)是[u, v]T。
像素坐標(biāo)系通常定義方式是:原點(diǎn)o'位于圖像的左上角,u軸向右與x軸平行,v軸向下與y軸平行。
我們設(shè)像素坐標(biāo)在u軸上縮放α倍,在v軸上縮放了β倍。同時,原點(diǎn)平移了[cx, cy]T。
因此可以得到P'與像素坐標(biāo)的關(guān)系:


代入P與P'的關(guān)系式可得:


其中,我們用fx,fy替換了αf 和 βf。fx,fy的單位是像素。
用齊次坐標(biāo),把上式寫出矩陣的形式:

也可以把Z寫到等式左邊去,就變成了:

上式中,K即為相機(jī)的內(nèi)參矩陣(Intrinsics)。通常來說,相機(jī)的內(nèi)參在出廠之后就是固定的了。
2 相機(jī)外參
相機(jī)外參的作用是把坐標(biāo)從【世界坐標(biāo)系】轉(zhuǎn)換到【相機(jī)坐標(biāo)系】中
在上面的推導(dǎo)中,我們用的是P在相機(jī)坐標(biāo)系的坐標(biāo)(也就是以相機(jī)為O點(diǎn)),所以我們應(yīng)該先將世界坐標(biāo)系中的Pw給變換到相機(jī)坐標(biāo)系中的P。
相機(jī)的位姿由旋轉(zhuǎn)矩陣R和平移向量t來描述,因此:

再代入之前的內(nèi)參的式子,得到:

后面一個等號蘊(yùn)含了一個齊次坐標(biāo)到非齊次坐標(biāo)的轉(zhuǎn)換。其中,R, t為相機(jī)的外參(Extrinsics)。
3 鏡頭畸變
透鏡由于制造精度以及組裝工藝的偏差會引入畸變,導(dǎo)致原始圖像的失真。鏡頭的畸變分為徑向畸變和切向畸變兩類。
- 徑向畸變
顧名思義,徑向畸變就是沿著透鏡半徑方向分布的畸變,產(chǎn)生原因是光線在原理透鏡中心的地方比靠近中心的地方更加彎曲,這種畸變在普通廉價的鏡頭中表現(xiàn)更加明顯,徑向畸變主要包括桶形畸變和枕形畸變兩種。以下分別是枕形和桶形畸變示意圖:

成像儀光軸中心的畸變?yōu)?,沿著鏡頭半徑方向向邊緣移動,畸變越來越嚴(yán)重。畸變的數(shù)學(xué)模型可以用主點(diǎn)(principle point)周圍的泰勒級數(shù)展開式的前幾項進(jìn)行描述,通常使用前兩項,即k1和k2,對于畸變很大的鏡頭,如魚眼鏡頭,可以增加使用第三項k3來進(jìn)行描述,成像儀上某點(diǎn)根據(jù)其在徑向方向上的分布位置,調(diào)節(jié)公式為:

公式里(x0,y0)是畸變點(diǎn)在成像儀上的原始位置,(x,y)是畸變較真后新的位置,下圖是距離光心不同距離上的點(diǎn)經(jīng)過透鏡徑向畸變后點(diǎn)位的偏移示意圖,可以看到,距離光心越遠(yuǎn),徑向位移越大,表示畸變也越大,在光心附近,幾乎沒有偏移。

- 切向畸變
切向畸變是由于透鏡本身與相機(jī)傳感器平面(成像平面)或圖像平面不平行而產(chǎn)生的,這種情況多是由于透鏡被粘貼到鏡頭模組上的安裝偏差導(dǎo)致。畸變模型可以用兩個額外的參數(shù)p1和p2來描述:

下圖顯示某個透鏡的切向畸變示意圖,大體上畸變位移相對于左下——右上角的連線對稱的,說明該鏡頭在垂直于該方向上有一個旋轉(zhuǎn)角度。

徑向畸變和切向畸變模型中一共有5個畸變參數(shù),在Opencv中他們被排列成一個5*1的矩陣,依次包含k1、k2、p1、p2、k3,經(jīng)常被定義為Mat矩陣的形式,如Mat distCoeffs=Mat(1,5,CV_32FC1,Scalar::all(0));這5個參數(shù)就是相機(jī)標(biāo)定中需要確定的相機(jī)的5個畸變系數(shù)。求得這5個參數(shù)后,就可以校正由于鏡頭畸變引起的圖像的變形失真,下圖顯示根據(jù)鏡頭畸變系數(shù)校正后的效果:
