0x00 - 前言
看過example后,就會想自己動動手,這里改改那里修修。我們先試着添加自己喜歡的marker/nft進行識別。
比如我做了一個法拉利的marker:
還有網上找了一個法拉利logo的圖片用於NFT(Natural Feature Tracking):
對應顯示的模型是這樣的(僅供參考^_^!)
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:
2.訓練marker圖片
我們使用這個在線工具"Tarotaro"進行訓練(如果想離線訓練,可以使用ARToolKit提供的mk_patt的離線工具)。
a.打開Tarotaro網站並點擊下面紅框鏈接。
b.會打開如下的工具。這時將你需要訓練的marker放入攝像頭視野中,直到marker邊緣出現紅色邊框。
界面介紹:
Mode Select:有Camera Mode和Load marker image兩種方式。我們下面使用的就是Camera Mode方式。Load marker image是直接輸入本地的marker圖片進行訓練。
Marker Segments和Marker Size我還不是很清楚是什么。我們這選擇默認參數即可。
c.當marker邊緣出現紅色邊框后,我們點擊Get Pattern按鈕,就可以得到下圖,我們可以看到marker邊框變成綠色了,此時我們選擇Save Current按鈕就可以得到對應的pattern文件,此處將其命名為ferrari.patt(初始后綴是pat,可以自己修改為patt)。
3.修改配置文件
我們選擇example中的ARApp2的配置文件進行更改。主要是更改models.dat和markers.dat文件。
我們先將ferrari.patt文件和網上搜羅來的ferrari模型文件導入到ARApp2中。
在markers.dat添加
在model.dat添加
4.編譯運行
配置文件修改完成后,我們就可以編譯運行了。請看結果:
![]() |
![]() |
0x02 - NFT制作流程
1.選擇圖片
NFT其實就是提取圖片的Natural Feature(自然特征)然后進行跟蹤。ARToolKit中會先對圖片進行處理,得到一組數據,后續追蹤過程使用的其實是處理得到的數據集。並不是什么圖片都可以進行NFT,對於進行NFT的圖片,有以下一些要求:
- 追蹤的圖片必須是矩形圖片。
- 圖片必須是jpeg格式。(大部分商用AR SDK支持多種圖片格式,比如EasyAR)
- 圖片本身要有足夠多的細節和邊緣(自相似度較低,並且空間頻率較高)。如果圖片帶有大量模糊或者細節較少的色塊,追蹤效果會比較差。
- 圖片分辨率的提升會使ARToolKit提取出更多的特征點,這對於相機接近圖片的情況或者使用高精度相機的情況,會大大提升追蹤效果。
所以我選擇下面這張圖片做NFT:
2.提取圖片特征
利用genTexData來生成對應的追蹤數據
選擇提取圖片特征的程度,數值越大提取的特征越多。當相機離圖片越近的時候,追蹤效果會越好。此處使用默認值。
使用Photoshop查看該圖片:
發現其分辨率是72,所以Enter resolution to use這部分輸入72。
而最大最小分辨率范圍,根據Training ARToolKit Natural Feature Tracking (NFT) to Recognize and Track an Image文章中提到的,根據不同相機分辨率及相機遠近有不同取值,一般使用20~120最為合適。而我們這邊最大分辨率只有72,所以我選擇20~72。
得到image set(ferrari-nft.iset)和featureList(ferrari.fset&ferrari.fset3)兩組數據
我們使用dispFeatureSet工具可以顯示一下看看特征點提取情況:
3.修改配置文件
我們修改ARAppNFT的配置文件來試驗我們的成果。
首先添加對應訓練數據:
修改markers.dat
和上面marker圖片訓練一樣,添加法拉利模型,並在models.dat中添加法拉利模型顯示信息:
4.編譯運行