|
目錄
為什么需要相機(jī)標(biāo)定?
相機(jī)標(biāo)定可以做什么?
相機(jī)標(biāo)定后可以得到什么?
什么情況下需要借助相機(jī)標(biāo)定的方法?
相機(jī)標(biāo)定的原理
實現(xiàn)相機(jī)標(biāo)定的方法
-
為什么需要相機(jī)標(biāo)定?
- 一個是由于每個鏡頭的在生產(chǎn)和組裝過程中的畸變程度各不相同,通過相機(jī)標(biāo)定可以校正這種鏡頭畸變,生成矯正后的圖像——矯正透鏡畸變;
- 另一個是根據(jù)標(biāo)定后的到的相機(jī)參數(shù)建立相機(jī)成像幾何模型,由獲得的圖像重構(gòu)出三維場景。具體來說:當(dāng)我們用攝像機(jī)拍照時,從照片里得到一些空間信息(比如距離,尺寸等),是要利用二維圖像得到三維信息。我們拍照的時候把空間物體信息通過攝像機(jī)變成了二維圖像,這個過程本來是不可逆的。但如果我們可以找到一個攝像機(jī)的數(shù)學(xué)模型,就可以 :從二維圖像+模型逆推得到原來三維信息。標(biāo)定就是在找這個模型。

-
相機(jī)標(biāo)定可以做什么?
- 相機(jī)在出廠之前都需要進(jìn)行相機(jī)標(biāo)定,用軟件的方法校正生成的圖像,避免拍攝出的圖像產(chǎn)生桶形和枕形畸變;
- 根據(jù)相機(jī)成像的幾何模型,將世界坐標(biāo)系中的3D物體映射到2D成像平面上;
- 求解多個相機(jī)對之間的映射關(guān)系。
-
相機(jī)標(biāo)定后可以得到什么?
- 相機(jī)的內(nèi)參矩陣A(dx,dy,r,u,v,f),外參矩陣[R|T]、畸變系數(shù)[k1,k2,k3,~,p1,p2,~]。
-
·內(nèi)參矩陣各元素意義:一個像素的物理尺寸dx和dy,焦距f,圖像物理坐標(biāo)的扭曲因子r,圖像原點相對于光心成像點的的縱橫偏移量u和v(像素為單位)。 -
·外參矩陣:世界坐標(biāo)系轉(zhuǎn)換到相機(jī)坐標(biāo)系的旋轉(zhuǎn)R和平移T矩陣。 ·畸變系數(shù):包括相機(jī)的徑向畸變系數(shù)k1,k2,k3,~,和相機(jī)的切向畸變系數(shù)p1,p2,~。 -

-
什么情況下需要借助相機(jī)標(biāo)定的方法?
- 所有輔助攝像頭的系統(tǒng),需要根據(jù)捕獲的圖像重構(gòu)出三維場景,如單目或雙目測距,三維重建,SLAM,AR等。
-
相機(jī)標(biāo)定的原理
- 四個坐標(biāo)系:
-
世界坐標(biāo)系(world coordinate system):用戶定義的三維世界的坐標(biāo)系,為了描述目標(biāo)物在真實世界里的位置而被引入。單位為m。 相機(jī)坐標(biāo)系(camera coordinate system):在相機(jī)上建立的坐標(biāo)系,為了從相機(jī)的角度描述物體位置而定義,作為溝通世界坐標(biāo)系和圖像/像素坐標(biāo)系的中間一環(huán)。單位為m。 圖像坐標(biāo)系(image coordinate system):為了描述成像過程中物體從相機(jī)坐標(biāo)系到圖像坐標(biāo)系的投影透射關(guān)系而引入,方便進(jìn)一步得到像素坐標(biāo)系下的坐標(biāo)。 單位為m。 像素坐標(biāo)系(pixel coordinate system):為了描述物體成像后的像點在數(shù)字圖像上(相片)的坐標(biāo)而引入,是我們真正從相機(jī)內(nèi)讀取到的信息所在的坐標(biāo)系。單位為個(像素數(shù)目)。 
1.從世界坐標(biāo)系到相機(jī)坐標(biāo)系 3D->3D


其中,R為旋轉(zhuǎn)矩陣,t為平移向量,因為假定在世界坐標(biāo)系中物點所在平面過世界坐標(biāo)系原點且與Zw軸垂直(也即棋盤平面與Xw-Yw平面重合,目的在于方便后續(xù)計算),所以zw=0,可直接轉(zhuǎn)換成式1的形式。其中變換矩陣

即為前文提到的外參矩陣,之所稱之為外參矩陣可以理解為只與相機(jī)外部參數(shù)有關(guān),且外參矩陣隨剛體位置的變化而變化。
2.從相機(jī)坐標(biāo)系到理想圖像坐標(biāo)系(不考慮畸變) 3D->2D


這一過程進(jìn)行了從三維坐標(biāo)到二維坐標(biāo)的轉(zhuǎn)換,也即投影透視過程(用中心投影法將形體投射到投影面上,從而獲得的一種較為接近視覺效果的單面投影圖,也就是使我們?nèi)搜劭吹骄拔锝筮h(yuǎn)小的一種成像方式)。
3.從理想圖像坐標(biāo)系到實際圖像坐標(biāo)系(考慮畸變):
透鏡的畸變主要分為徑向畸變和切向畸變(還有薄透鏡畸變等等,但都沒有徑向和切向畸變影響顯著,所以我們在這里只考慮徑向和切向畸變)。
徑向畸變是由于透鏡形狀的制造工藝導(dǎo)致。且越向透鏡邊緣移動徑向畸變越嚴(yán)重。實際情況中我們常用r=0處的泰勒級數(shù)展開的前幾項來近似描述徑向畸變。矯正徑向畸變前后的坐標(biāo)關(guān)系為:
·xcorrected = x(1+k1r2+k2r4+k3r6)
·ycorrected = y(1+k1r2+k2r4+k3r6)
由此可知對于徑向畸變,我們有3個畸變參數(shù)需要求解。
切向畸變是由于透鏡和CMOS或者CCD的安裝位置誤差導(dǎo)致。切向畸變需要兩個額外的畸變參數(shù)來描述,矯正前后的坐標(biāo)關(guān)系為:
·xcorrected = x + [ 2p1y + p2 (r2 + 2x2) ]
·ycorrected = y + [ 2p2x + p1 (r2 + 2y2) ]
由此可知對于切向畸變,我們有2個畸變參數(shù)需要求解。
綜上,我們一共需要5個畸變參數(shù)(k1、k2、k3、p1和p2 )來描述透鏡畸變。
注意:
4.從實際圖像坐標(biāo)系到像素坐標(biāo)系:
由于定義的像素坐標(biāo)系原點與圖像坐標(biāo)系原點不重合,假設(shè)像素坐標(biāo)系原點在圖像坐標(biāo)系下的坐標(biāo)為(u0,v0),每個像素點在圖像坐標(biāo)系x軸、y軸方向的尺寸為:dx、dy,且像點在實際圖像坐標(biāo)系下的坐標(biāo)為(xc,yc),于是可得到像點在像素坐標(biāo)系下的坐標(biāo)為:

化為齊次坐標(biāo)表示形式可得:

若暫不考慮透鏡畸變,則將式2與式5的轉(zhuǎn)換矩陣相乘即為內(nèi)參矩陣M:

之所以稱之為內(nèi)參矩陣可以理解為矩陣內(nèi)各值只與相機(jī)內(nèi)部參數(shù)有關(guān),且不隨物體位置變化而變化。
最后用一幅圖來總結(jié)從世界坐標(biāo)系到像素坐標(biāo)系(不考慮畸變)的轉(zhuǎn)換關(guān)系:


實現(xiàn)相機(jī)標(biāo)定的方法
MATLAB(matlab calibration toolbox-Matlab標(biāo)定工具箱使用(單目標(biāo)定和雙目標(biāo)定)
OpenCV標(biāo)定函數(shù) cv::calibrateCamera(...);
具體實現(xiàn)方案:
棋盤是一塊由黑白方塊間隔組成的標(biāo)定板,我們用它來作為相機(jī)標(biāo)定的標(biāo)定物(從真實世界映射到數(shù)字圖像內(nèi)的對象)。之所以我們用棋盤作為標(biāo)定物是因為平面棋盤模式更容易處理(相對于復(fù)雜的三維物體),但與此同時,二維物體相對于三維物體會缺少一部分信息,于是我們會多次改變棋盤的方位來捕捉圖像,以求獲得更豐富的坐標(biāo)信息。
下面將依次對剛體進(jìn)行一系列變換,使之從世界坐標(biāo)系進(jìn)行仿射變換、投影透射,最終得到像素坐標(biāo)系下的離散圖像點,過程中會逐步引入各參數(shù)矩陣。
標(biāo)定圖片需要使用標(biāo)定板在不同位置、不同角度、不同姿態(tài)下拍攝,最少需要3張,以10~20張為宜。標(biāo)定板需要是黑白相間的矩形構(gòu)成的棋盤圖,制作精度要求較高,如下圖所示:

常用術(shù)語

標(biāo)定步驟:
1、打印一張棋盤格,把它貼在一個平面上,作為標(biāo)定物。 2、通過調(diào)整標(biāo)定物或攝像機(jī)的方向,為標(biāo)定物拍攝一些不同方向的照片。 3、從照片中提取棋盤格角點。 4、估算理想無畸變的情況下,五個內(nèi)參和六個外參。 5、應(yīng)用最小二乘法估算實際存在徑向畸變下的畸變系數(shù)。 6、極大似然法,優(yōu)化估計,提升估計精度。

圖片大小要一致,最好加入20張左右為佳,加入完成后點擊Calibrate

返回到命令窗口,即可看到相機(jī)參數(shù),在命令行輸入cameraParams.IntrinsicMatrix可得到內(nèi)參矩陣和徑向畸變



查看標(biāo)定結(jié)果和程序


|