2009年9月10日 星期四

[ARToolkit]Developing your First Application, Part 1

Introduction

為了說明中詳細介紹如何開發ARToolKit應用,我們將逐步的來源碼示例程序的現有:simpleTest(或簡單的根據您的ARToolKit版本)。 該程序被發現在該目錄的examples/simple/. 。


在SimpleTest計劃

該文件我們將注視的是simpleTest.c(或simple.c)。 這個程序非常簡單包括一個主例程和幾個圖形繪製程序。
對應的功能,應用程序的六個步驟前面描述見表1。相應的步驟2到5在主循環(主迴圈)功能。

最重要的功能在程序的main, init, mainLoop, draw跟 cleanup。 ,我們將解釋這些函數調用的細節。


main

主要的簡單程序如下:



在 init初始化例程包含的代碼啟動視頻捕獲,閱讀標記和相機參數,並設置了圖形視窗。這相當於第1步在development method。接下來,我們進入即時狀態,以函數arVideoCapStart視頻為起點。 之後,該argMainLoop函數被啟動主程序LOOP和連結程式 keyEvent任何鍵盤事件和主迴圈的主圖形渲染迴圈。argMainLoop的定義是包含在文件gsub.c。


init

在初始化中應用從主要程序和用於初始化視頻捕捉和讀取初步ARToolKit應用參數。

起初,視頻路徑是打開視頻圖像的大小發現:



該變量vconf包含了初步的視頻配置和定義頂部的simple.c。在功能上您的平台的內容可以真正不同:看video configuration page。對於每個平台的默認字符串的定義,一般而言,是開放的第一個可用的視頻流在你的架構。

之後,我們需要初始化ARToolKit應用參數。 關鍵參數的ARToolKit應用如下:

‧該模式將用於模板匹配的模式和虛擬物體的這些模式相對應。
‧視訊的特性被使用。

這些都是從閱讀的文件名可以是指定的命令行或使用默認的硬編碼文件名。

因此,相機參數讀取默認的攝像頭參數文件名數據/ camera_para.dat:



下一步,這些參數都轉化為當前圖像的大小,因為視訊參數的變化取決於圖像的大小,即使使用相同的視訊也一樣。

將視訊參數設置讀入,並將視訊參數印在螢幕上:


之後,讀入模式定義默認的模式文件數據/ patt.hiro:



patt_id已被確定的模式識別。
最後一個圖形視窗打開:


第二個參數定義的argInit縮放功能,設置為1.0吻合的視頻圖像格式,設置為2.0倍大小(例如,有一個VGA AR display 與320x240image顯示輸入)。
mainLoop
這是例行的ARToolKit函數應用,它包含的代碼對應步驟2至5所需的應用程序的步驟。
首先一個視頻幀抓到函數arVideoGetImage:

視頻圖像,然後顯示在螢幕上。 這可以是一個unwarped圖像,或圖像扭曲,以校準的視訊扭曲。變形的圖像產生更正常的形象,但可能導致大量減少在視頻的幀速率。在這個例子中的形象是不unwarped:


然後,arDetectMarker用於搜索視頻圖像中查詢有正確的標記模式:



標誌物的數目找到包含在變數marker_num,而marker_info是一個指標結構包含坐標信息的信任和認可的價值觀和資訊的每個標記。marker_info結構詳細的用法在API documentation
此時,視頻圖像已顯示和分析。因此,我們並不需要頻繁使用它:我們可以要求偵測啟動一個新的攫取的同時,才再次打開新的程式。為此剛才呼叫arVideoCapNext:


接下來,所有的信心值檢測到的標記是比較正確的標記關聯資訊最高的數值:



標記之間的轉換和視訊可以被發現使用arGetTransMat功能:



真正的視訊的位置和方向相對於標記對象i是包含在3x4矩陣,patt_trans。

最後,虛擬物體,可以得出在卡上使用的繪製功能:



一個簡單的步驟進行優化,如果沒有發現模式(k==- 1),我們可以直接交換緩衝區call to draw 和 return:

[ARToolkit] Development Principles

有兩個部分開發應用程序使用ARToolKit,編寫應用程序,和轉換圖像處理序對現實世界標誌,將用於在應用程序中。

編寫應用程序與ARToolKit很簡單:一個簡單的大綱是用於創建AR應用程序。 我們立足於它編寫新的應用。 同樣,轉換模式階段,主要是簡化,使用簡單的工具。

下面的步驟必須採取應用程序的主代碼:




步驟2至5的不斷重複,直至點選退出,而步驟1和6上執行,只是初始化和關閉應用程序的分別。 除了這些步驟的應用程序可能需要響應滑鼠、鍵盤或其他應用程序的特定事件。

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步驟。

[ARToolKit] How does ARToolKit Work?

ARToolKit



Documentation
→Beginner:Getting Started:How does ARToolKit Work?


(yahoo翻譯+google翻譯+me)



How does ARToolKit work?

Basic Principles(基本原則)

ARToolKit應用可以讓虛擬圖像是疊加在視訊畫面。
這個秘密在於將黑色方塊作為tracking(追蹤)標記。


該ARToolKit 的 tracking工作原理如下:



1. 該camera拍攝的視頻畫面,將其發送到電腦。
2. 在computer上的軟體,檢查通過每個視訊畫面的所有的方形。
3. 如果找到一個正方形,該軟體使用一些數學運算來計算黑色方塊對應camera 的位置。
4. 一旦camera的位置是已知的,computer graphics model 也會在同樣位置顯示。
5. model在視頻的現實世界顯示,出現在marker上的方塊。
6. 最終輸出顯示在手持式顯示器,因此當user通過顯示器看起來,他們看到的圖形疊加在真實的世界。



下圖總結了這些步驟。
ARToolKit能夠執行此camera的即時tracking,確保虛擬物件總是出現疊加在tracking markers上。



(看不清楚,請點圖.)


(圖內容待補...)


Limitations (限制)


有一些限制,純粹基於computer vision(顯示)的AR系統。
當然,如果是虛擬物件將只出現在tracking marks 的範圍內。
這可能會限制大小和虛擬物件的運動。
這也意味著,如果users他們的手或其他物體覆蓋部分圖像,虛擬物件將消失。


---------------(以下待補)---------------
There are also range issues.
The larger the physical pattern the further away the pattern can be detected and so the great volume the user can be tracked in.
Table 1 shows some typical maximum ranges for square markers of different sizes.
These results were gathered by making maker patterns of a range of different sizes (length on a side),
placing them perpendicular to the camera and moving the camera back until the virtual objects on the squares disappeared.




Table 1: Tracking range for different sized patterns.




This range is also affected somewhat by pattern complexity.
The simpler the pattern the better.
Patterns with large black and white regions (i.e. low frequency patterns) are the most effective.
Replacing the 4.25 inch square pattern used above,
with a pattern of the same size but much more complexity,
reduced the tracking range from 34 to 15 inches.




Tracking is also affected by the marker orientation relative to the camera.
As the markers become more tilted and horizontal,
less and less of the center patterns are visible and so the recognition becomes more unreliable.




Finally, the tracking results are also affected by lighting conditions.
Overhead lights may create reflections and glare spots on a paper marker and so make it more difficult to find the marker square.
To reduce the glare patterns can be made from more non-reflective material.
For example, by gluing black velvet fabric to a white base.
The 'fuzzy' velvet paper available at craft shops also works very well.







You will find more informations on computer vision principle at this page, or more informations on performance at this page.