【AR實驗室】ARToolKit之概述篇

0x00 - 前言


我從去年就開始對AR(Augmented Reality)技術比較關注,可是去年AR行業一直處於偶爾發聲的狀態,絲毫沒有其"異姓同名"的兄弟VR(Virtual Reality)火爆。至於MR(Mixed Reality)更像是Google Glass事情以後對AR的洗白。可是今年AR行業出了件大事,沒錯,別左右看了,說的就是你 —— Pokemon GO。暫且不討論這款遊戲是否是AR遊戲,畢竟爭議挺大,可是這款遊戲着實是讓AR火了一把。AR應用開發貌似也有了燎原之勢。算法

0x01 - AR技術定義


目前對AR技術的常見理解就是CV(Computer Vision)+CG(Computer Graphic)。CV的方法不少,簡單些好比FREAK+ICP(ARToolKit中的NFT),複雜些就是SLAM(Magic Leap)。CG就沒什麼好說的,利用CV算法獲取到的圖形相關信息(好比CG中的模型矩陣、視圖矩陣、投影矩陣)進行繪製。從這一點上來講Pokemon GO確實不能算做AR遊戲,畢竟人家只是基於LBS的。性能

知乎上有一個話題 - 我想給你們說下AR的昨天今天明天能夠嗎?歡迎一塊兒討論 關於將來的AR形態?裏面提到了AR兩種被普遍接受的定義:學習

1. 一種是Paul Milgram和Fumio Kishino於1994年定義的「現實-虛擬連續體」。他們描述了從真實環境到虛擬環境的連續體。如圖1-2所示,真實場景和虛擬場景分佈在兩端,在這二者之間接近真實環境的是加強現實,接近虛擬場景的是加強虛擬(擴增虛境),而位於中間的部分叫作混合實境。spa

AR定義

2. 另一種定義是1997年北卡大學的Ronald Azuma提出的加強現實的定義。他認爲加強現實技術應具備三個具體特徵:三維註冊、虛實融合以及實時交互。
做者:AR學院歸海
連接:https://www.zhihu.com/question/33214635/answer/56058935
來源:知乎
著做權歸做者全部,轉載請聯繫做者得到受權。
視頻

若是從這兩個定義來講,Pokemon GO也是能夠算一種簡單形式的AR遊戲,至少給人在感官上的體驗是符合AR的。其雖然我知道不少人認爲下面這樣才叫AR……可是咱們仍是要有信心的嘛!對象

口袋妖怪概念圖

這裏我表達一下我我的對AR的見解:blog

不論是vision based仍是LBS,AR在技術上的目標其實就是創建一個和現實場景1:1的虛擬世界。從CG的角度,AR最關鍵的技術點是創建一個相機座標系,並能獲取到現實場景中相應的模型信息(網格、位姿、材質等等)。那麼vision based的方法目前能夠作到對於已經註冊過的識別對象,是能夠獲取到它在相機座標系中的位姿信息。而LBS的方法更符合通常CG開發的流程,首先利用GPS創建一個世界座標系,就能夠獲取到每一個物體在世界座標系的位置(包括相機),這樣你就能夠將這些物體轉化到相機座標系中,思路差很少是這樣,只是精度上存在必定問題。目前給AR下一個精準的定義還太早,我認爲用戶感官上以爲是虛實融合就能夠算是AR。遊戲

0x02 - AR技術現狀


雖然上面提到了不少次Pokemon GO,可是LBS的AR系統並非我想研究的重點,畢竟從目前來看vision based的AR系統纔是主流。可是侷限於我我的的見識,只使用過Vuforia、EasyAR、ARToolKit。你們有興趣的話,能夠看一下知乎上的討論 - 有哪些比較優秀的AR開源項目,或者SDK?圖片

Vuforia沒得說,商業SDK,支持的特性也比較多,好像能夠支持3D Object Tracking,具體支持到什麼程度,尚未嘗試,你們感興趣能夠登陸Vuforia官網。EasyAR是國內的一款SDK,AR識別性能仍是要贊一個,你們能夠去看EasyAR官網視頻,仍是很真實地反映了其性能(不像Magic Leap以前那個鯨魚的視頻),我的仍是很看好的,比起Vuforia最大優點是無償使用時不須要水印(^_^;)。而ARToolKit相對上述兩個SDK在識別性能和特性上表現的不是很突出,可是ARToolKit勝在開源,若是你須要作一些AR業務擴展,而Vuforia和EasyAR不能知足你,ARToolKit是一個很好的選擇。並且AR其中一個趨勢就是集成到現有App中,那麼使用Vuforia和EasyAR的代價就比較大了。另外做爲一個學生,抱着研究學習的心態,ARToolKit就再合適不過了。開發

因此後期我仍是專一於ARToolKit的研究上,據說今年秋天ARToolKit6將發佈,仍是很期待的,ARToolKit官網連接請戳

0x03 - ARToolKit概述


ARToolKit系統核心思路是這樣的:

ARToolKit簡化流程圖

下面以NFT(天然圖片追蹤,Natural Feature Tracking)爲例,簡述AR實現流程

1. 經過相機校準(標定),獲取到由於相機制造工藝誤差而形成的畸變參數,也就是相機內參(intrinsic matrix),來複原相機模型的3D空間到2D空間的一一對應關係。這對後面的特徵提取步驟有很大做用。

2. 根據相機自己的硬件參數,咱們能夠計算出相應的投影矩陣(Projection Matrix)。

3. 對待識別的天然圖片(也就是任意的一張二維圖片)進行特徵提取,獲取到一組特徵點{P1}。

4. 實時對相機獲取到的圖像進行特徵提取,也是一組特徵點{P2}。

5. 使用ICP(Iterative Closest Point)算法來迭代求解這兩組特徵點的RT矩陣(Rotation&Translation),即Pose矩陣,也就是圖形學中常說的模型視圖矩陣(Model View Matrix)。

6. 有了MVP矩陣(Model View Projection),就能夠進行圖形繪製了。

0x04 - ARToolKit支持特性


目前來講,ARToolKit支持天然圖片/Marker/2D BarCode的識別。

  • 天然圖片處理

這個應用比較普遍,對用戶的限制也會小不少。不過最好使用一些特徵比較明顯的圖像,效果會更好。

  • Marker/MultiMarker

這是一種通過特殊處理的圖像,須要在邊緣包裹兩層,最外側是包裹了白色/淺色邊緣,內側是包裹了黑色邊緣,你們猜也能猜出來這樣作主要是提升識別度,同時也方便計算Pose(由於能夠直接提取邊緣來計算Pose)。以下圖:

hiro_marker

  • 2D BarCode(二維碼)

這個沒什麼好說的,最多見的。

另外ARToolKit目前支持的渲染引擎是OSG(OpenSceneGraph),不過版本比較低。固然,你也可使用OpenGL ES進行繪製。畢竟咱們只須要獲取到了MVP矩陣,理論上繪製部分是能夠徹底分開的。

0x05 - 參考資料


相關文章
相關標籤/搜索