這節博客介紹一下計算機視覺中的幾何問題之一:相機模型和座標轉換,希望對各位讀者有所幫助!
1.針孔相機模型——幾何建模
數碼相機,手機鏡頭可以簡單看作是一組透鏡和圖像傳感器構成的整個光學成像系統。透鏡用於約束進入的光線,而傳感器則用於對光進行感受、採樣和量化。相機模型是對光學成像系統的簡化,目前相機模型有線性模型和非線性模型兩種。實際的成像系統是透鏡成像的非線性模型。在這裏,我們簡要描述一下小孔成像模型,如下圖所示:
由上圖可以看到,小孔成像成的是倒立的圖像,隨着成像平面距離小孔的遠近不同,像的大小也不一樣,通常的相機其成像平面,一般放置在焦平面的位置。
2.世界座標系
世界座標系,也就是真實世界的立體空間座標,是一個三維座標系,點在世界座標系中的座標通常用 來表示,世界座標系可以任意選取。單位:m
3.相機座標系
設相機座標系用來表示,如下圖所示,在相機座標系中,Z 軸指向相機前方,X 向右,Y 向下,O 爲攝像機的光心,也是針孔模型中的針孔。單位:m
4.圖像座標系(物理)
設圖像座標系爲,現實世界的空間點 P ,經過小孔O投影之後,落在物理成像平面上,成像點爲 P ′。圖像座標系的原點落在了光心在成像平面上的投影,X指向右,Y指向下。單位:m
5.像素座標系
像素座標系一般用來表示,其原點在圖像的左上角,u指向右邊,v指向左邊,像素座標是整數。單位:pixel
6.內參:從相機座標系到圖像座標系到像素座標系
把世界座標系定爲相機座標系,設空間中一點P在相機座標系下的座標爲[X,Y,Z],在圖像座標系下的座標爲[x,y],那麼這兩個座標之間滿足什麼樣的關係呢?
如上圖所示,設相機的焦距爲f,根據小孔成像模型,利用三角相似性原理可以得到:
其中負號表示成的像是倒立的。爲了簡化模型,我們把可以成像平面對稱到相機前方,和三維空間點一起放在攝像機座標系的同一側,如下圖樣子所示。
這樣做可以把公式中的負號去掉,使式子更加簡潔:
經過整理可得:
上式描述了點 P 和它的像之間的空間關係。不過,在相機中,我們最終獲得的是一個個的像素,這需要在成像平面上對像進行採樣和量化。爲了描述傳感器將感受到的光線轉換成圖像像素的過程,我們設在物理成像平面上固定着一個像素平面。我們假設在像素平面得到了的像素座標:,像素座標系通常的定義方式是:原點位於圖像的左上角,u 軸向右與 x 軸平行,v軸向下與 y 軸平行。像素座標系與成像平面之間,相差了一個縮放和一個原點的平移。我們設像素座標在 u 軸上縮放了 α 倍,在 v 上縮放了 β 倍。同時原點平移了。那麼的座標與像素座標的關係爲:
將該式與上式合併整理得到:
其中,的單位爲米,,的單位爲像素每米,所以 ,的單位爲像素。把該式寫成矩陣形式,會更加簡潔,不過左側需要用到齊次座標:
該式中,我們把中間的量組成的矩陣稱爲相機的內參數矩陣K(Camera Intrinsics)。通常認爲相機的內參在出廠之後是固定的,不會在使用過程中發生變化。有的相機生產廠商會告訴你相機的內參,而有時需要你自己確定相機的內參,也就是所謂的標定。
7.外參:從世界座標系到相機座標系
除了內參之外,自然還有相對的外參。內參表達了從相機座標系到像素座標系下的座標轉換,而外參則表達了從世界座標系到相機座標系下的座標轉換。假設P的世界座標記爲,相機的當前位姿由它的旋轉矩陣 R 和平移向量 t 來描述,那麼有:
上式中P的座標都採用了齊次座標(注意後一個式子隱含了一次齊次座標到非齊次座標的轉換),其中T稱爲外參矩陣:
8.畸變
爲了獲得好的成像效果,我們在相機的前方加了透鏡。透鏡的加入對成像過程中光線的傳播會產生新的影響: 一是透鏡自身的形狀對光線傳播的影響,二是在機械組裝過程中,透鏡和成像平面不可能完全平行,這也會使得光線穿過透鏡投影到成像面時的位置發生變化。由透鏡形狀引起的畸變稱之爲徑向畸變。在針孔模型中,一條直線投影到像素平面上還是一條直線。可是,在實際拍攝的照片中,攝像機的透鏡往往使得真實環境中的一條直線在圖片中變成了曲線 。越靠近圖像的邊緣,這種現象越明顯。由於實際加工製作的透鏡往往是中心對稱的,這使得不規則的畸變通常徑向對稱。它們主要分爲兩大類,桶形畸變和枕形畸變,如下圖所示:
桶形畸變是由於圖像放大率隨着離光軸的距離增加而減小,而枕形畸變卻恰好相反。在這兩種畸變中,穿過圖像中心和光軸有交點的直線還能保持形狀不變。除了透鏡的形狀會引入徑向畸變外,在相機的組裝過程中由於不能使得透鏡和成像面嚴格平行也會引入切向畸變,如下圖所示:
對於徑向畸變,無論是桶形畸變還是枕形畸變,由於它們都是隨着離中心的距離增加而增加。我們可以用一個多項式函數來描述畸變前後的座標變化,這類畸變可以用和距中心距離有關的二次及高次多項式函數進行糾正:
在上式描述的糾正模型中,對於畸變較小的圖像中心區域,畸變糾正主要是 k1起作用。而對於畸變較大的邊緣區域主要是 k2 起作用。普通攝像頭用這兩個係數就能很好的糾正徑向畸變。對畸變很大的攝像頭,比如魚眼鏡頭,可以加入 k3 畸變項對畸變進行糾正。
另一方面,對於切向畸變,可以使用另外的兩個參數 p1 ,p2 來進行糾正:
故得到:
9.相機標定
前面已經說明,相機標定是獲取相機內參的方法。對於針孔模型相機最爲常用的相機標定方法是張正友標定法,使用Matlab的標定工具箱可以輕鬆實現相機標定。