公開日:2011/9/1 0:00:00

ARToolKit NFT (ARToolKit NFT Version 3)

パターン作成 - 1

ここでは、ARToolKit NFT のツールを用いてトラッキング用のパターンファイルを作成する手順について説明します。

画像ファイルと印刷物の準備

まず、トラッキング対象画像のデジタルデータを準備します。
画像ファイルは、120DPI以上のjpeg画像となります。
もし、画像ファイルがなく、すでに印刷済みのものしかない場合は、150DPI以上でスキャナーなどを用いて作成してください。

なお、画像ファイルは実際に配布するものを基準としてください。印刷所等と相談の上、どの程度のDPIになるかの調整を必ず行ってください。
また、ウェブなどからダウンロードさせる場合は、オフセット印刷での配布物とカラープリンタで印刷したものの2つが対象となるため、カラープリンタで表現できるDPIに調整する必要があります。

今回はパターンファイルを作れればいいので、適当な写真を利用します。
下記画像は、携帯端末で撮影したものでウェブアップロード用のサイズにしたものです。
トラッキング対象画像にするのには向いていないのですが、適当なものがなかったので、今回のサンプルは下記を利用します。

トラッキング対象画像

なお、この画像は137x89mmで印刷するというよりしてしまったので、解像度は119DPIとなっています。
レーザープリンタをつかって適当に印刷しただけです。この文書を作成していて後に後悔しているので、真似しないでください。

どのくらいの解像度が適切?

ARToolworksのマニュアル内にもそれといった記述はなく、一概に決まっていないようです。 書かれているのは下記の点を考慮して適切に作成してくださいというものです。

  • 実際に印刷する時の正確なサイズ
  • アプリケーション使用中、ウェブカメラとトラッキング対象画像の距離とその時に得られる解像度

これ以外にカラーマッチングの問題(ディスプレイで見ているものと印刷物との差)や照明にも影響するので、画像作成については試行錯誤が必要になります。

v5.0 から使える genTexData を使う場合

ここで説明している内容を一つのコマンドで出来るようになっただけです。

いろいろとオプションがあるのですが、いろいろとやってみた結果、このくらいでいいのでは?と言うのは下記の通り。

  • ターゲットとする画像は、短辺が 480px 以上で、極端に細長くならないこと。(16:9くらいまでがいいかも)
  • DPIはコマンドラインオプションで矯正するので 72dpiの画像で構わない
  • 実行時のコマンドは、genTexData -dpi=110 -max_dpi=100 -min_dpi=40 [画像ファイル] とするのがおすすめ。

画像しかない場合でも、必ず印刷物を準備してください。
印刷物は可能な限り本番に近いものを準備してください。

イメージセット(iset)作成

画像ファイルからイメージセットを作成します。作成は、%ARTOOLKIT_NFT_ROOT%\bin\genImageSet.exeを使用します。

準備した画像ファイルをpatt01.jpgとして、%ARTOOLKIT_NFT_ROOT%\bin\Data\patt01に保存してください。
そのあとはコマンドプロンプトを開いて次のようにコマンドを実行します。

C:\User\ユーザー名> cd %ARTOOLKIT_NFT_ROOT%\bin

C:\ARToolworks\ARToolKitNFT\bin> genImageSet.exe Data\patt01\patt01.jpg
Reading JPEG file.
Unable to determine resolution of image 'Data\patt01\patt01.jpg'. Enter resoluti
on to use (in DPI): 119

解像度を問われるので、作成した画像のDPIを入力してください。
今回サンプルで使用している画像は、119DPIなのでその値を入力しています。

入力すると、次に他の解像度で印刷するかも問われるのである場合は入力してください。

    end.
Size = (640,416) DPI = 119.000000
Enter next output image resolution (in DPI), or press 'Return' to end.:

<エンタキー押下>

何もなければエンタキーを押して進めます。

No resolutions selected. Using default output image resolutions of (60, 40, 20)
DPI.
Selected resolutions (in DPI):  60.000000 40.000000 20.000000
Size = (640,416) Zoom = 1.000000
Generating ImageSet...
    Done.
Saving to Data\patt01\patt01.iset.
    Done.

ここまで表示されたタイミングで下記の画像が表示されます。
スペースキーを押すとiset内に確保されたイメージ画像が表示されるので適当に見てみるのも良いかもしれません。

iset iset iset

isetファイルは%ARTOOLKIT_NFT_ROOT%\bin\Data\patt01配下に保存されています。

特徴マップ(fmap)作成

続いてgenFeatureMap.exeを用いて特徴マップを作成します。これもコマンドプロンプトから実行します。

C:\ARToolworks\ARToolKitNFT\bin> genFeatureMap.exe Data\patt01\patt01.iset
Read ImageSet.
    end.
Start for 60.000000 dpi image.
            ImageSize =   67298[pixel]
Extracted features =    2273[pixel]
    Filtered features =    1346[pixel]
    208/ 209.
    Done.
Start for 40.000000 dpi image.
            ImageSize =   29885[pixel]
Extracted features =    1062[pixel]
    Filtered features =     601[pixel]
    138/ 139.
    Done.
Start for 20.000000 dpi image.
            ImageSize =    7383[pixel]
Extracted features =     251[pixel]
    Filtered features =     150[pixel]
    68/  69.
    Done.

コマンドの引数には先ほど作成した iset を使用します。
isetに含まれる解像度の数だけ fmap が作成されるので、高解像度の場合はそこそこ時間がかかるかもしれません。

特徴集合(fset)作成

続いてgenFeatureSet.exeを用いて特徴集合を作成します。これもコマンドプロンプトから実行します。

コマンドの引数には先ほど作成した iset を使用します。
isetファイルのある場所に fmap ファイルがないとエラーになるので注意してください。

また、特徴が無い……全体的に同系色でメリハリがない画像の場合、この時点で失敗します。
その場合、画像を加工するか異なるものに差し替える必要があります。

C:\ARToolworks\ARToolKitNFT\bin> genFeatureSet.exe Data\patt01\patt01.iset
MAX_THRESH = 0.850000
MIN_THRESH = 0.650000
SD_THRESH = 10.000000
Read ImageSet.
    end.
Read FeatureMap(60.000000 dpi).
    end.
Max feature = 36
    1: (136,145) : 0.677152 min=0.652448 max=0.908997, sd=25.222126
    2: (159, 84) : 0.736866 min=0.655353 max=0.918653, sd=25.915197
    3: (263,187) : 0.737071 min=0.693753 max=0.919495, sd=20.733706
    4: ( 92, 34) : 0.759169 min=0.677083 max=0.917014, sd=22.373602
    5: (193,137) : 0.767269 min=0.650871 max=0.892316, sd=21.736000
    6: (258,136) : 0.779149 min=0.669145 max=0.908261, sd=25.335350
    7: (132,194) : 0.807498 min=0.679059 max=0.952803, sd=23.356964
    8: ( 69, 85) : 0.814068 min=0.762417 max=0.946018, sd=22.133109
    9: (208,197) : 0.822139 min=0.740775 max=0.939624, sd=26.614491
---------------------------------------------------------------
Read FeatureMap(40.000000 dpi).
    end.
Max feature = 14
    1: ( 92, 98) : 0.687537 min=0.650604 max=0.892495, sd=25.309614
    2: ( 67, 32) : 0.733735 min=0.706563 max=0.904424, sd=21.436224
    3: (153,113) : 0.739142 min=0.700985 max=0.909461, sd=22.697871
---------------------------------------------------------------
Read FeatureMap(20.000000 dpi).
    end.
Max feature = 3
    1: ( 27, 17) : 0.689399 min=0.650202 max=0.891098, sd=17.930561
    2: ( 79, 53) : 0.763789 min=0.714321 max=0.903907, sd=22.017526
---------------------------------------------------------------
Save FeatureSet.
    end.

終わると画像の上に赤いボックスが表示されているウィンドウが開きます。

fset fset

スペースキーを押すと様々な解像度のものが見れますが、この中で赤い枠が画面中にまんべんなく出るのが良いパターン画像です。
特に実際に利用する場合の解像度での枠の少なさはトラッキングしにくい状態になります。

さて、最初にこの画像は向かないと書きましたが、上記を見てわかるように少ない上に偏りがあるのでダメダメです。
駄目とわかっていても手元にないので進めていきますが……

設定ファイル(dat)ファイル作成

付属サンプルの殆どで使用する設定ファイルを作成します。

新規にメモ帳などで下記の内容を作成し、patt01.datとして保存してください。

1

patt01.iset
    1.0000  0.0000  0.0000  0.0000
    0.0000  1.0000  0.0000  0.0000
    0.0000  0.0000  1.0000  0.0000

ファイルの意味ですが、下記のようになります。

[含まれるパターン数]

[対象とするトラッキング対象画像のisetファイル名]
[回転成分|並進ベクトル]

表示するオブジェクトを予め回転させたり、平行移動させる場合は4x3の行列部分を操作するのが簡単です。
もっとも、このマトリックス部分はコード中で読み込み、適応する処理がなされていないので意味が無いのですが……将来出てくるサンプルで対応される事を願いましょう。

なお、複数のパターンを登録する場合は、した2つの成分を改行を入れながら追加、最初の数字を増やすことになります。

KPMテンプレート(kpm)を画像ファイルから作成

webカメラ上から作成する方法もありますが、今回は画像から生成します。
やはりコマンドプロンプトから実行することになります。

C:\ARToolworks\ARToolKitNFT> makeKpmTemplateFromImageSet.exe Data\patt01\patt01.iset
01.iset
Read ImageSet.
    end.
Size = (322,209) Zoom = 1.000000

実行すると新たに書きのようなウィンドウが開きます。
開いたらその画面をクリックしてスペースキーを何回か押して下さい。

fset fset

スペースキーで解像度変更、Bキーでブラー変化できます。
これでキーポイントの位置が緑のXで示されているので、少なくないこと、どの程度のサイズでポイントが無くなってしまうかなどが確認できると思います。

ある程度確認したら、Sキーを押して、コマンドプロンプトに移ってKPMファイルを保存します。

Change to KpmProcQuatSize
40.000000[dpi] image. size=(215,139)
20.000000[dpi] image. size=(107,69)
60.000000[dpi] image. size=(322,209)
Enter filename: 

Data\patt01\patt01.kpm
saved.

さて、これでパターンファイル一式が作成できたので動作確認してみましょう。

動作確認

引き続きコマンドプロンプトから実行します。

C:\ARToolworks\ARToolKitNFT\bin> exampleNFT0.exe Data\patt01\patt01.dat
01.iset
Read ImageSet.
    end.
Size = (322,209) Zoom = 1.000000

印刷した画像をカメラで撮影すれば、枠とキューブが重畳されて表示されます。

exampleNFT0

コードがA4サイズのモノに合わせるように成っているので全然ブレていますが、トラッキング対象画像を認識して表示されるのが確認できると思います。

これで、パターンファイルの作成が終わりました。
次はウェブカメラを用いてKPMファイルを作成する方法を説明します。