【學習ARToolkit小記之三】 攝像頭標定(Camera Calibration)

利用ARToolkit對攝像頭進行標定設ARToolkit應用首先要做的一步,詳細內容可以參考官網教程Documentation裏面的Calibrating your camera(http://www.hitl.washington.edu/artoolkit/documentation/usercalibration.htm)。

在進行攝像頭標定之前需要建立ARToolkit的開發環境,具體的內容也可以參考官網教程Documentation裏面的Setup ARToolkit(http://www.hitl.washington.edu/artoolkit/documentation/usersetup.htm),這裏我們使用的是Windows 7 64位操作系統VS2010來實現的,按照教程中的步驟一步一步來實現,其中在64位系統中配置ARToolkit會遇到一些問題,可參考本人博客的前兩則的內容(http://blog.csdn.net/qingyang8513/article/details/45192677http://blog.csdn.net/qingyang8513/article/details/45195933),裏面提供了詳細的解決方法,下面是在上述內容完成之後進行的實驗。

本部分內容只用於個人的學習記錄與記錄,詳細內容請參考官方網站教程。

一、開發環境

1、操作系統:Windows 7(64位)

2、編程環境:Microsoft Visual Studio 2010

3、ARToolkit版本:ARToolKit-2.72.1


二、標定過程

1、簡介(Introduction)

ARToolkit程序默認的攝像機屬性保存在攝像機參數文件camera_para.dat中,每次程序執行時都會讀取文件的信息。而對於特定的攝像機,我們可以通過簡單的攝像頭標定技術產生單獨的參數文件,當已知攝像頭參數,ARToolkit程序就可以在運行時自動矯正攝像頭畸變。

利用ARToolkit進行攝像頭標定的方法有兩種,一種是兩部標定法,另一種是一步標定法。其中兩部標定法相對複雜一點,但是精度會相對較高。

下面的兩部分將分別採用這兩種方法實現攝像頭的標定。

2、兩部標定法(Two StepCalibration)

1)標定板打印:patterns文件下打印calib_cpara.pdf和calib_dist.pdf,按照實際尺寸打印,前者是間距40mm網格,後者是6*4間距也爲40mm的圓形標定點。打印出來的標定紙平整的固定在硬紙板上,如圖一和圖二所示。


圖1 calib_cpara.pdf標定板


圖2 calib_dist.pdf標定板

攝像機內部參數包括圖像中心點座標、鏡頭畸變參數和攝像機實際焦距,程序calib_dist用於測量圖像中心點座標和鏡頭畸變參數,而程序calib_cparam用於測量攝像機實際焦距。這兩個程序保存在bin文件夾下,其中源文件保存在utils文件夾下。下面首先需要運行calib_dist,然後運行calib_cparam,因爲calib_cparam用到了calib_dist程序輸出的數據。

2)運行calib_dist:

a)運行calib_dist程序,使用圖2所示的calib_dist標定板;

b)點擊鼠標左鍵獲取第一幅圖像,保證保定板上的所有點都在圖像座標系中;

c)選取標定點:用鼠標按照從左到右、從上到下的順序選取,選取時從標定點的左上角點擊右鍵拉到右下角畫一個方框,將標定點框在中間即可。如下圖3、圖4所示:


圖3 獲取第一幅圖像


圖4 選取標定點(從左到右,從上到下)

d)選定標定點的過程中可以使用鼠標右鍵從新選定;

e)選定一幅圖像結束之後,點擊鼠標左鍵重新獲取一幅圖像,按照b)~d)重複操作,建議3~5幅圖像(越多也好);

f)選取結束之後,點擊鼠標右鍵結束圖像的選取,程序自動運行,並計算攝像頭圖像中心和畸變參數,這需要一段時間,同時程序界面會動態顯示計算過程,如圖5所示。


圖5 圖像中心和畸變參數計算過程

g)結束之後顯示計算結果,如圖6和圖7所示;


圖6 計算參數結果


圖7 圖像結果顯示

h)查看所有結果後,程序結束,此時第一步完成。


3)運行calib_cparam:

a)使用calib_cparam標定板(7條水平線,9條垂直線);

b)運行calib_cparam,按照提示輸入參數,其中用到了上一步計算出來的參數;

c)將標定板放在攝像頭前面,保證和攝像頭垂直;

d)點擊鼠標左鍵,獲取一幅圖像,此時會出現一條白色的水平線,如圖8所示;


圖8 獲取圖像

e)使用鍵盤上下方向鍵移動中間白線,左右方向鍵調整白線角度,使白線和標定板最上面水平線重合,按下Enter鍵;

f)重複e),繪製所有7條水平線,順序嚴格按照從上到下順序;

g)水平線繪製完成後開始繪製垂直線,方法和上面類似,結果如圖9所示;


圖9 繪製網格線

h)完成之後,移動標定板遠離攝像頭100mm,重新獲取圖像,並重覆上述過程,知道結束5幅圖像的繪製;

i)標定結果如圖10所示;


圖10 實際焦距標定結果

j)輸入文件名,保存標定參數,標定結束。

k)如果需要修改網格大小和一定距離,可以參考calib_cparam_sub.c,修改如下代碼即可:

inter_coord[k][j][i+7][0] = 40.0*i;
inter_coord[k][j][i+7][1] = 40.0*j;
inter_coord[k][j][i+7][2] = 100.0*k;
*loop_num = 5;


3、一步標定法(One Step Calibration)

一步標定法的方法和兩部標定法第一步的方法相同,只需運行calib_camera2即可。

calib_cparam2
Input the length between each markers: 40

-----------
Mouse Button
Left : Grab image.
Right : Quit.
-----------


標定結束之後,即獲得攝像頭的參數文件,如果需要使用,只需要將文件名修改爲camera_para.dat,並放在bin/Data文件夾下即可。




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