【AR實驗室】ARToolKit之制作自己的Marker/NFT


0x00 - 前言


看過example后,就會想自己動動手,這里改改那里修修。我們先試着添加自己喜歡的marker/nft進行識別。

比如我做了一個法拉利的marker:

image

還有網上找了一個法拉利logo的圖片用於NFT(Natural Feature Tracking):

ferrari-nft

對應顯示的模型是這樣的(僅供參考^_^!)

1

0x01 - marker制作流程


1.制作marker圖片

首先我們找到doc/patterns/Blank pattern.png,使用這個空白的marker圖片制作出自己想要的marker。之所以使用這個blank pattern,是因為這個空白marker圖片的符合marker的基本要求:

  • 必須是方形。
  • 必須有連續的邊緣(一般來說全是白色或黑色)。另外在marker里面的pattern部分,我們使用差別較大的兩種顏色分別表示前后景(比如此處我用黑色表示法拉利logo,白色作為其背景)。默認情況下,邊緣的厚度占pattern圖片的1/4。

     - 被邊緣所包圍的部分就是我們所稱的pattern,其必須具有旋轉不對稱性。pattern可以是黑白的,也可以是彩色的。

我們將法拉利的logo弄成黑白的,再添加到blank pattern中。得到以下maker:

image

2.訓練marker圖片

我們使用這個在線工具"Tarotaro"進行訓練(如果想離線訓練,可以使用ARToolKit提供的mk_patt的離線工具)。

a.打開Tarotaro網站並點擊下面紅框鏈接。

image

b.會打開如下的工具。這時將你需要訓練的marker放入攝像頭視野中,直到marker邊緣出現紅色邊框。

界面介紹:

    Mode Select:有Camera Mode和Load marker image兩種方式。我們下面使用的就是Camera Mode方式。Load marker image是直接輸入本地的marker圖片進行訓練。

    Marker SegmentsMarker Size我還不是很清楚是什么。我們這選擇默認參數即可。

image

c.當marker邊緣出現紅色邊框后,我們點擊Get Pattern按鈕,就可以得到下圖,我們可以看到marker邊框變成綠色了,此時我們選擇Save Current按鈕就可以得到對應的pattern文件,此處將其命名為ferrari.patt(初始后綴是pat,可以自己修改為patt)。

image

3.修改配置文件

我們選擇example中的ARApp2的配置文件進行更改。主要是更改models.dat和markers.dat文件。

我們先將ferrari.patt文件和網上搜羅來的ferrari模型文件導入到ARApp2中。

imageimage

在markers.dat添加

image

在model.dat添加

image

4.編譯運行

配置文件修改完成后,我們就可以編譯運行了。請看結果:

ferrari_front ferrari_left

0x02 - NFT制作流程


1.選擇圖片

NFT其實就是提取圖片的Natural Feature(自然特征)然后進行跟蹤。ARToolKit中會先對圖片進行處理,得到一組數據,后續追蹤過程使用的其實是處理得到的數據集。並不是什么圖片都可以進行NFT,對於進行NFT的圖片,有以下一些要求:

  • 追蹤的圖片必須是矩形圖片。
  • 圖片必須是jpeg格式。(大部分商用AR SDK支持多種圖片格式,比如EasyAR)
  • 圖片本身要有足夠多的細節和邊緣(自相似度較低,並且空間頻率較高)。如果圖片帶有大量模糊或者細節較少的色塊,追蹤效果會比較差。
  • 圖片分辨率的提升會使ARToolKit提取出更多的特征點,這對於相機接近圖片的情況或者使用高精度相機的情況,會大大提升追蹤效果。

所以我選擇下面這張圖片做NFT:

ferrari-nft

2.提取圖片特征

image

利用genTexData來生成對應的追蹤數據

image

選擇提取圖片特征的程度,數值越大提取的特征越多。當相機離圖片越近的時候,追蹤效果會越好。此處使用默認值。

image

使用Photoshop查看該圖片:

image

發現其分辨率是72,所以Enter resolution to use這部分輸入72。

而最大最小分辨率范圍,根據Training ARToolKit Natural Feature Tracking (NFT) to Recognize and Track an Image文章中提到的,根據不同相機分辨率及相機遠近有不同取值,一般使用20~120最為合適。而我們這邊最大分辨率只有72,所以我選擇20~72。

image

得到image set(ferrari-nft.iset)和featureList(ferrari.fset&ferrari.fset3)兩組數據

image

image

我們使用dispFeatureSet工具可以顯示一下看看特征點提取情況:

image

image

3.修改配置文件

我們修改ARAppNFT的配置文件來試驗我們的成果。

首先添加對應訓練數據:

image

修改markers.dat

image

和上面marker圖片訓練一樣,添加法拉利模型,並在models.dat中添加法拉利模型顯示信息:

image

4.編譯運行

ferrari-nft-left

 

0x03 - 參考資料



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM