【AR實驗室】ARToolKit之製做本身的Marker/NFT

0x00 - 前言


看過example後,就會想本身動動手,這裏改改那裏修修。咱們先試着添加本身喜歡的marker/nft進行識別。php

好比我作了一個法拉利的marker:工具

image

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

ferrari-nft

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

1

0x01 - marker製做流程


1.製做marker圖片3d

首先咱們找到doc/patterns/Blank pattern.png,使用這個空白的marker圖片製做出本身想要的marker。之因此使用這個blank pattern,是由於這個空白marker圖片的符合marker的基本要求:orm

  • 必須是方形。
  • 必須有連續的邊緣(通常來講全是白色或黑色)。另外在marker裏面的pattern部分,咱們使用差異較大的兩種顏色分別表示先後景(好比此處我用黑色表示法拉利logo,白色做爲其背景)。默認狀況下,邊緣的厚度佔pattern圖片的1/4。

     - 被邊緣所包圍的部分就是咱們所稱的pattern,其必須具備旋轉不對稱性。pattern能夠是黑白的,也能夠是彩色的。blog

咱們將法拉利的logo弄成黑白的,再添加到blank pattern中。獲得如下maker:圖片

image

2.訓練marker圖片ci

咱們使用這個在線工具"Tarotaro"進行訓練(若是想離線訓練,可使用ARToolKit提供的mk_patt的離線工具)。get

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 - 參考資料


相關文章
相關標籤/搜索