單目相機標定原理

一.相機標定主要涉及三個座標系:圖像座標系、攝像機座標系和世界座標系

【圖像座標系】

攝像機採集的圖像變換爲數字圖像後,每副數字圖像在計算機內爲M x N數組,M行N列的圖像中每一個元素(pixel)數值就是圖像點的亮度(灰度)。如圖,在圖像上定義直角座標系(U,V),每一個像素爲單位的圖像座標系座標,由於(u,v)只能表示像素位於數組中的列數與行數,並沒有使用物理單位表示該像素在圖像中位置,所以需要再建立以物理單位(mm)表示的圖像座標系,該圖像座標系以圖像內某一點O1爲原點,X軸和Y軸分別平行於U軸和V軸。

wpsA134.tmp

如圖中,(u、v)表示以像素爲單位的圖像座標系的座標,(x、y)表示以mm爲單位的圖像座標系的座標。在X、Y座標系中,原點O1定義在攝像機光軸與圖像平面的交點,該點一般位於圖像中心。但是由於製造原因,很多情況下會有偏移。若O1在U、V座標系中座標爲(u0,v0),每一個像素在X軸與Y軸方向上的無力尺寸爲dx、dy,則圖像任一像素在兩個座標系下有如下關係:

wpsA135.tmp

【攝像機座標系】

如圖,Oc點爲攝像機光心,Xc軸和Yc軸與圖像的X軸與Y軸平行,Zc軸爲攝像機光軸,它與圖像平面垂直。光軸與圖像平面的交點,即爲圖像座標系的原點。由點Oc與Xc、Yc、Zc軸組成的直角座標系稱爲攝像機座標系,OOc爲攝像機焦距:

wpsA136.tmp

由於攝像機可以安放在現實環境中任意位置,所以在環境中任選一個基準座標系來描述攝像機位置,並用它描述環境中任何物體的位置,該座標系爲世界座標系。它有Xw、Yw和Zw軸組成,攝像機座標系與世界座標系之間的關係可以用旋轉矩陣與平移向量t來描述。

wpsA147.tmp

總體來說,世界座標系到圖像座標系的關係可總結如下:

wpsA157.tmp

攝像頭成像幾何關係,其中Oc點稱爲攝像頭(透鏡)的光心,Xc軸和Yc軸與圖像的x軸和Y軸平行,Zc軸爲攝像頭的光軸,它與圖像平面垂直。光軸與圖像平面的交點O1,即爲圖像座標系的原點。由點Oc與Xc、Yc、Zc軸組成的座標系稱爲攝像頭座標系,Oc O1 的距離爲攝像頭焦距,用f表示。

圖像座標系是一個二維平面,又稱爲像平面,實際上就是攝像頭的CCD傳感器的表面。每個CCD傳感器都有一定的尺寸,也有一定的分辨率,這個就確定了毫米與像素點之間的轉換關係。舉個例子,CCD的尺寸是8mm X 6mm,幀畫面的分辨率設置爲640X480,那麼毫米與像素點之間的轉換關係就是80pixel/mm。”設CCD傳感器每個像素點的物理大小爲dx*dy,相應地,就有dx=dy=1/80。

二. 針孔模型

wpsA158.tmp

又稱爲線性攝像機模型,任何空間點M在圖像中的投影位置m,爲光心Oc與M的連線OcM與圖像平面的交點(各種相似三角形有木有,但是要注意像平面和現在討論的其實是關於Oc對稱的哦,所以計算的時候不要忘記了負號,不然出來的圖像就是倒着的啦),這種關係也稱爲重心攝影或者透視投影。此時有比例關係如下:

wpsA178.tmp

將上面的世界座標到攝像機座標的轉換代入,最後皆可以得到世界座標系與攝像機座標系之間的關係啦:

wpsA179.tmp

其中,很容易可以知道alph=f/dx,beta=f/dy,分別代表了以X軸與Y軸方向上的像素爲單位表示的等效焦距。gamma在較高精度的相機模型中引入,表示圖像平面中以像素爲單位的座標軸傾斜程度的量度,gamma=alpha*tan(theta),theta是相機CCD陣列v軸的偏斜角度。

由針孔模型我們可以知道,如果一直攝像機的內外參數,就知道投影矩陣M,這時候對任何空間點就可以求出其對應圖像座標,但是如果已知空間某點的像點m位置(u,v)即使已經知道攝像機內外參數,Xw也不能唯一確定,因爲在投影過程中消去了Zc的信息。

在上面的式子中M是3x4不可逆矩陣,當已知M與(u,v)時,由公式得到的三個方程中消去z,只可以得關於Xw,Yw與Zw的兩個線性方程,這個方程組即爲射線OP的方程,也就是說,投影點爲m的所有點均在該射線上,所以,該空間是不能唯一確定的。

三. 相機畸變

攝像頭由於光學透鏡的特性使得成像存在着徑向畸變,可由三個參數k1,k2,k3確定;由於裝配方面的誤差,傳感器與光學鏡頭之間並非完全平行,因此成像存在切向畸變,可由兩個參數p1,p2確定。單個攝像頭的定標主要是計算出攝像頭的內參(焦距f和成像原點cx,cy、五個畸變參數(一般只需要計算出k1,k2,p1,p2,對於魚眼鏡頭等徑向畸變特別大的才需要計算k3))以及外參(標定物的世界座標)。OpenCV中使用的求解焦距和成像原點的算法是基於張正友的方法,而求解畸變參數是基於 Brown 的方法。

1.徑向畸變

設(u、v)爲理想的圖像像素座標,相對應的,wpsA17A.tmp 爲真實獲得的像素座標。則(x,y)就爲理想的圖像物理座標,wpsA17B.tmp 爲實際獲得的圖像物理座標,可以得到如下的關係式:

wpsA18C.tmp

我們知道,(u0,v0)在求攝像機內參的時候可以知道,wpsA18D.tmp 在圓心提取排序後也可以知道,(u,v)可以通過OpenCV中cvProjectpoints函數求得反投影殘差。(x,y)可以通過wpsA18E.tmp 和wpsA19F.tmp求出,於是克得到如下公式:

wpsA1A0.tmp

設Dk=d,所以wpsA1A1.tmp可以求出畸變係數k1,k2.

在求得了徑向畸變的係數以後,就可以如下得到成像儀某點理想的徑向位置

wpsA1A2.tmp

其中,r就是當前點的所在透鏡半徑,k3只有在精度很高的時候才用得到(可以看到其實是將徑向畸變做了一個泰勒展開並忽略高階誤差得到的)

2.切向畸變(由於透鏡表面曲率不總是嚴格共線產生)

主要包括離心畸變和薄棱鏡畸變,其中,離心畸變是由攝像機的鏡頭中各個透鏡的光軸不能完全重合造成的。

離心畸變其數學模型可以表示爲:

wpsA1A3.tmp

薄棱鏡畸變是由鏡頭設計和製造缺陷等誤差造成(比如鏡頭與攝像機像面之間有很小的傾角,其不僅會引起徑向偏差,而且會引起切向誤差)其數學模型爲:

wpsA1A4.tmp

可以看到,薄棱鏡畸變的結果就是之前內參矩陣求解時候的那個gamma啦wpsA1A5.tmp

綜合考慮徑向畸變和切向畸變,就需要對小孔成像模型進行修正,理想的圖像點歸一化座標爲p=(x,y)T,有畸變的圖像點的歸一化座標爲Pd=(xd,yd)T之間關係爲:

wpsA1B5.tmp

特別說明:在opencv中求出了畸變係數和攝像機內參數以後,就可以用cvUndistort2( ImageC1, Show1, &intrinsic_matrix, &distortion_coeffs);來進行圖像矯正了(建議使用Matlab工具箱來矯正,Opencv自己的函數誤差不是一般大,而且對角點提取的精度要求超高(雖然用了亞像素級別),⊙﹏⊙b汗,之前自己按照書上來結果發現矯正以後圖像扭曲的不行還以爲自己的問題查錯查了好久,結果直接標定傳入參數進行矯正以後各種準確…….)。

附錄:cvUndistort2的函數說明

wpsA1B6.tmp

wpsA1C7.tmp

Fr:http://my.oschina.net/makeit/blog/314446

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