2009年9月9日 星期三

[ARToolkit]Calibrating your camera 如何校準視訊

Introduction

在目前的ARToolKit軟件,默認camera properties屬性包含在相機參數文件camera_para.dat,這是在每次讀取應用程時啟動。 參數足夠應用於多種不同的視訊。 不過使用相對簡單的camera calibration有可能產生一個單獨的參數文件來執行特殊的視訊裝置。 在一個通過AR interfac的video-see,如果相機參數是已知的話,視頻圖像可以扭曲校正視訊的扭曲。

Two Step Calibration Approach
很難使用,但結果更準確度(更好的三維測量)。

One Step Calibration Approach
易於使用,使精度不夠好圖像疊加。
下一節將介紹不同的步驟,您的視訊校正通過這兩種方法。


Two Step Calibration

本節我們介紹如何使用ARToolKit的two step method去校正視訊。 為了使用此方法的模式文件calib_cpara.pdf和calib_dist.pdf需要列印出來。 這些模式中找到的目錄。 該calib_cpara.pdf模式是網格線,使該線是完全相同40毫米分開。 該calib_dist.pdf模式包含一個6 × 4點的模式,使該點是40毫米分開。 一旦模式文件被列印出來,應該貼在紙板上讓文件平整。 下圖由視訊拍出的這些文件模式。

圖1:calib_dist模式和calib_cpara模式

相機性能的必須測量包括中心點視訊的圖像,鏡頭失真和焦距的鏡頭。 該計劃calib_dist是用來測量圖像中心點和鏡頭扭曲,而calib_param其他視訊生產性能。 這兩種程序都可以找到在 bin目錄中,其來源是在utils/calib_dist 跟 utils/calib_cparam目錄。

該calib_dist程序應該先運行,然後calib_cparam,因為使用calib_cparam輸出calib_dist。 其餘部分在本節中,我們解釋如何運行這些程序的每個。


Running calib_dist

calib_dist使用calib_dist.pdf圖像模式的6 × 4點間距同樣分開。 當認為通過視訊鏡頭,鏡頭變形導致pin cushion effect,產生不平衡的點之間的間距在視訊的圖像。 該calib_dist程序的措施之間的間距點,並使用這些信息來計算鏡頭扭曲。

運行calib_dist程序從命令提示符。 您將獲得此輸出:

> calib_dist
Image size (x,y) = (720,486)

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

將出現一個窗口顯示即時視訊。 站的攝像機校準模式,使所有的點都認為,然後點擊鼠標左鍵。 這停止視頻圖像,如圖2。 現在單擊並拖動圖像與鼠標左鍵繪製一個黑色矩形過每點。 開始與點最接近左上角的形象和繼續下去,直到所有的點被發現。 這些點必須包括以下順序:

1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
在每個矩形繪製圖像處理軟件將找到點封閉的矩形和地方紅十字為中心。 如果紅十字沒有出現重繪矩形點,直到找到。 圖2顯示了用戶繪製一個矩形超過最後點。

圖2:用戶標誌著校準點。

雖然每一個點是否被找到以下會出現在屏幕上:

-----------

Mouse ButtonLeft :

Rubber-bounding of feature. (6 x 4)

Right : Cansel rubber-bounding & Retry grabbing.

-----------

# 1/24

# 2/24

# 3/24

# 4/24

# 5/24

# 6/24

# 7/24

# 8/24

# 9/24

# 10/24

# 11/24

# 12/24

# 13/24

# 14/24

# 15/24

# 16/24

# 17/24

# 18/24

# 19/24

# 20/24

# 21/24

# 22/24

# 23/24

# 24/24

所有24點的形象,被發現點擊鼠標左鍵一次。 這將存儲點的位置和停止的視頻圖像。

-----------
Mouse ButtonLeft : Save feature position.
Right : Discard & Retry grabbing.
-----------
### No.1 ###
1, 1: 125.01, 102.84
2, 1: 198.73, 96.19
3, 1: 283.00, 94.30
4, 1: 369.78, 99.93
5, 1: 448.78, 110.33
6, 1: 514.39, 123.37
1, 2: 118.84, 173.96
2, 2: 192.13, 171.33
3, 2: 277.61, 171.27
4, 2: 366.40, 175.28
5, 2: 446.74, 181.88
6, 2: 512.50, 189.64
1, 3: 119.86, 246.72
2, 3: 191.37, 248.83
3, 3: 274.59, 251.42
4, 3: 361.36, 253.61
5, 3: 440.32, 255.61
6, 3: 505.38, 257.05
1, 4: 127.78, 313.80
2, 4: 196.05, 319.71
3, 4: 272.48, 327.11
4, 4: 355.03, 325.72
5, 4: 430.25, 324.01
6, 4: 493.18, 320.03
您現在應該採取另一種形象,並重複此過程5-10圖片從不同角度和立場。 在更多圖片所採取的更準確的校準。下面的數字顯示,典型的範例圖片。

所有24點的形象,被發現點擊鼠標左鍵一次。 這將存儲點的位置和停止的視頻圖像。

-----------

Mouse Button

Left : Grab next image.

Right : Calc parameter.

-----------

[360.0, 243.0, 174.0] 596.018289

[360.0, 243.0, 174.0] 596.018289

[360.0, 243.0, 174.0] 596.018289

[360.0, 243.0, 174.0] 596.018289

[360.0, 243.0, 174.0] 596.018289

[360.0, 243.0, 174.0] 596.018289

[360.0, 243.0, 174.0] 596.018289

[330.0, 223.0, 201.0] 590.288659

[330.0, 228.0, 201.0] 486.692482

[330.0, 233.0, 201.0] 400.390511

[325.0, 238.0, 201.0] 330.137494

[325.0, 243.0, 201.0] 276.447160

[325.0, 248.0, 201.0] 241.422442

[325.0, 253.0, 201.0] 227.895132

[325.0, 253.0, 201.0] 227.895132

[325.0, 253.0, 201.0] 227.895132

[325.0, 253.0, 201.0] 227.895132

[325.0, 253.0, 201.0] 227.895132

[325.0, 253.0, 201.0] 227.895132

[325.0, 253.0, 201.0] 227.895132

[325.0, 253.0, 201.0] 227.895132

[325.0, 253.0, 201.0] 227.895132

[325.0, 253.0, 201.0] 227.895132

[325.0, 253.0, 201.0] 227.895132

[325.0, 253.0, 201.0] 227.895132

[324.0, 253.5, 201.0] 227.334239

--------------

Center X: 324.000000

Y: 253.500000

Dist Factor: 201.000000

-----------

--------------

Mouse Button

Left : Check fittness.

Right :1/10.

-----------

這可能需要一段時間來計算這些參數,請耐心等待。 該中心x和y值和失真的因素是最終的核心價值所產生的calib_dist代碼。 這些值會有所不同,每視訊和應記下來,用於該calib_cparam程序。

為了檢查這些參數是正確的點擊鼠標左鍵一次。 這將顯示一個圖像抓住用紅色線繪製通過校準點。 這些行應通過中心在每一點(見圖3)。 每次被點擊鼠標左鍵在未來抓住圖像將顯示。

圖3:Two Sample Calibrated圖片結果。

一旦你感到滿意的結果,從calib_dist擊中鼠標按鈕以退出並運行calib_cparam代碼。

Running calib_cparam

calib_cparam用於查詢視訊焦距和其他參數。 它使用的模式所載calib_cparam.pdf,一個網格模式7水平線和垂直線,9(見圖2)。 這種模式應該被列印出來,並粘在一塊紙板或其他硬板。

calib_cparam是從控制台等calib_dist。 鍵入calib_cparam在命令提示符下,輸入的中心坐標和失真比發現calib_dist:

> ./calib_cparam
Input center coordinates: X = 324
: Y = 253Input distotion retio
: F = 201Image size (x,y) = (720,486)


1) 即時視頻窗口將出現。
2) 將校準板放在視訊前,使版面會垂直於相機,所有的網格線是可見的網格是盡可能大(見圖2)。
3) 點擊鼠標左鍵來獲取圖像。 白色橫線將出現疊加在圖像上。
4) 移動的白線,以覆蓋最黑網格線盡可能接近。 該生產線是上下移動使用向上和向下箭頭鍵,雖然它是順時針和逆時針旋轉使用左,右箭頭鍵。 一旦白線是從頂端網格線按下enter。 這行現在將變成藍色,另有白線就會出現(見圖4)。 這一進程應再重複所有的水平線。


一旦最後水平線已列入垂直白線就會出現,這個過程應該是重複的垂直線。 第一垂直白線,應放在了最左邊網格線和其他線路放在從左至右(見圖5)。

行的順序是非常重要的。 他們應該放在從上到下,然後從左至右,直到所有16條線,我們已制訂在螢幕上。



圖4:水平線就業 圖5:垂直線放置

5) 這個過程已經完成,一個圖像,網格模式應移到離100毫米視訊(視訊保持垂直模式)和進程一再重複。 圖6顯示了最後一行安置其中一個拍攝的圖片。

圖6:最後一行就業

6) 重複該過程的5倍,移動校準模式,總距離為500mm的鏡頭。 第五後的校準步驟,程序會自動計算攝像機參數。 你會被要求輸入一個文件名來存儲這些參數:

point_num = 315
--------------------------------------
SIZE = 720, 486
Distotion factor = 324.000000 253.000000 201.000000
372.97979 -24.50134 248.86941 0.00000
0.00000 327.03507 122.42421 0.00000
0.00000 0.00000 1.00000 0.00000
--------------------------------------
Input filename: wideAngleKeyence.dat


存儲在數據文件中的相機擊中鼠標按鈕以退出。

通過改變名稱,這台相機數據文件camera_para.dat,並把它在 bin /目錄中的數據可以立即使用的ARToolKit示例程序。 校準您的視訊應該改進追蹤結果。

距離之間的網格線在calib_cparam.pdf模式,正是40毫米,而格局待後每100毫米的測量和測量要重複5次。 這些值都是固定的源代碼calib_cparam_sub.c中的 util/calib_cparam下。

如果你想改變網格線之間的距離下面的源代碼應該修改:

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;


其中40.0是當前的距離,而距離是100.0模式應該退到從視訊每次。 測量的數目,需要採取可以通過改變變量:

*loop_num = 5;



One Step Calibration


一個步操作是完全相同的calib_dist。 您需要列印calib_dist.pdf和執行calib_camera2:

> calib_cparam2
Input the length between each markers: 40


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

之後,重複相同的指令的calib_dist步驟。

沒有留言: