雙目立體視覺-相機標定之張正友棋盤標定

圖片複製不過來,直接看原網頁就好了叭:

https://blog.csdn.net/JennyBi/article/details/85764988

 

爲什麼需要相機標定?
一個是由於每個鏡頭的在生產和組裝過程中的畸變程度各不相同,通過相機標定可以校正這種鏡頭畸變,生成矯正後的圖像——矯正透鏡畸變;
另一個是根據標定後的到的相機參數建立相機成像幾何模型,由獲得的圖像重構出三維場景。具體來說:當我們用攝像機拍照時,從照片裏得到一些空間信息(比如距離,尺寸等),是要利用二維圖像得到三維信息。我們拍照的時候把空間物體信息通過攝像機變成了二維圖像,這個過程本來是不可逆的。但如果我們可以找到一個攝像機的數學模型,就可以 :從二維圖像+模型逆推得到原來三維信息。標定就是在找這個模型。

相機標定可以做什麼?
相機在出廠之前都需要進行相機標定,用軟件的方法校正生成的圖像,避免拍攝出的圖像產生桶形和枕形畸變;

根據相機成像的幾何模型,將世界座標系中的3D物體映射到2D成像平面上;
求解多個相機對之間的映射關係。
相機標定後可以得到什麼?
相機的內參矩陣A(dx,dy,r,u,v,f),外參矩陣[R|T]、畸變係數[k1,k2,k3,~,p1,p2,~]。
•內參矩陣各元素意義:一個像素的物理尺寸dx和dy,焦距f,圖像物理座標的扭曲因子r,圖像原點相對於光心成像點的的縱橫偏移量u和v(像素爲單位)。

•外參矩陣:世界座標系轉換到相機座標系的旋轉R和平移T矩陣。

•畸變係數:包括相機的徑向畸變係數k1,k2,k3,~,和相機的切向畸變係數p1,p2,~。

什麼情況下需要藉助相機標定的方法?
所有輔助攝像頭的系統,需要根據捕獲的圖像重構出三維場景,如單目或雙目測距,三維重建,SLAM,AR等。
相機標定的原理
四個座標系:
世界座標系(world coordinate system):用戶定義的三維世界的座標系,爲了描述目標物在真實世界裏的位置而被引入。單位爲m。

相機座標系(camera coordinate system):在相機上建立的座標系,爲了從相機的角度描述物體位置而定義,作爲溝通世界座標系和圖像/像素座標系的中間一環。單位爲m。

圖像座標系(image coordinate system):爲了描述成像過程中物體從相機座標系到圖像座標系的投影透射關係而引入,方便進一步得到像素座標系下的座標。 單位爲m。

像素座標系(pixel coordinate system):爲了描述物體成像後的像點在數字圖像上(相片)的座標而引入,是我們真正從相機內讀取到的信息所在的座標系。單位爲個(像素數目)。


               1.從世界座標系到相機座標系 3D->3D

         

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

即爲前文提到的外參矩陣,之所稱之爲外參矩陣可以理解爲只與相機外部參數有關,且外參矩陣隨剛體位置的變化而變化。

               2.從相機座標系到理想圖像座標系(不考慮畸變) 3D->2D

這一過程進行了從三維座標到二維座標的轉換,也即投影透視過程(用中心投影法將形體投射到投影面上,從而獲得的一種較爲接近視覺效果的單面投影圖,也就是使我們人眼看到景物近大遠小的一種成像方式)。

               3.從理想圖像座標系到實際圖像座標系(考慮畸變):

透鏡的畸變主要分爲徑向畸變和切向畸變(還有薄透鏡畸變等等,但都沒有徑向和切向畸變影響顯著,所以我們在這裏只考慮徑向和切向畸變)。

徑向畸變是由於透鏡形狀的製造工藝導致。且越向透鏡邊緣移動徑向畸變越嚴重。實際情況中我們常用r=0處的泰勒級數展開的前幾項來近似描述徑向畸變。矯正徑向畸變前後的座標關係爲:

•xcorrected = x(1+k1r2+k2r4+k3r6)

•ycorrected = y(1+k1r2+k2r4+k3r6)

由此可知對於徑向畸變,我們有3個畸變參數需要求解。

切向畸變是由於透鏡和CMOS或者CCD的安裝位置誤差導致。切向畸變需要兩個額外的畸變參數來描述,矯正前後的座標關係爲:

•xcorrected = x + [ 2p1y + p2 (r2 + 2x2) ]

•ycorrected = y + [ 2p2x + p1 (r2 + 2y2) ]

由此可知對於切向畸變,我們有2個畸變參數需要求解。

綜上,我們一共需要5個畸變參數(k1、k2、k3、p1和p2 )來描述透鏡畸變。

注意:

               4.從實際圖像座標系到像素座標系:

由於定義的像素座標系原點與圖像座標系原點不重合,假設像素座標系原點在圖像座標系下的座標爲(u0,v0),每個像素點在圖像座標系x軸、y軸方向的尺寸爲:dx、dy,且像點在實際圖像座標系下的座標爲(xc,yc),於是可得到像點在像素座標系下的座標爲:

 

化爲齊次座標表示形式可得:

若暫不考慮透鏡畸變,則將式2與式5的轉換矩陣相乘即爲內參矩陣M:

 

之所以稱之爲內參矩陣可以理解爲矩陣內各值只與相機內部參數有關,且不隨物體位置變化而變化。

 

最後用一幅圖來總結從世界座標系到像素座標系(不考慮畸變)的轉換關係:

實現相機標定的方法
MATLAB(matlab calibration toolbox-Matlab標定工具箱使用(單目標定和雙目標定)

OpenCV標定函數 cv::calibrateCamera(...);

具體實現方案:

棋盤是一塊由黑白方塊間隔組成的標定板,我們用它來作爲相機標定的標定物(從真實世界映射到數字圖像內的對象)。之所以我們用棋盤作爲標定物是因爲平面棋盤模式更容易處理(相對於複雜的三維物體),但與此同時,二維物體相對於三維物體會缺少一部分信息,於是我們會多次改變棋盤的方位來捕捉圖像,以求獲得更豐富的座標信息。

下面將依次對剛體進行一系列變換,使之從世界座標系進行仿射變換、投影透射,最終得到像素座標系下的離散圖像點,過程中會逐步引入各參數矩陣。

標定圖片需要使用標定板在不同位置、不同角度、不同姿態下拍攝,最少需要3張,以10~20張爲宜。標定板需要是黑白相間的矩形構成的棋盤圖,製作精度要求較高,如下圖所示:

常用術語

標定步驟:

1、打印一張棋盤格,把它貼在一個平面上,作爲標定物。
2、通過調整標定物或攝像機的方向,爲標定物拍攝一些不同方向的照片。
3、從照片中提取棋盤格角點。
4、估算理想無畸變的情況下,五個內參和六個外參。
5、應用最小二乘法估算實際存在徑向畸變下的畸變係數。
6、極大似然法,優化估計,提升估計精度。
 

 

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

返回到命令窗口,即可看到相機參數,在命令行輸入cameraParams.IntrinsicMatrix可得到內參矩陣和徑向畸變

查看標定結果和程序


————————————————
版權聲明:本文爲CSDN博主「JennyBi」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/JennyBi/article/details/85764988

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