ARToolKitの解析 その① 変換行列の計算

| | コメント(2)
安定化の次は、プログラムの高速化などをやってみようと思ってましたが、
高速化のためには、ARToolKitのソースをもっと理解していなければなりません。

そこで、次に「ARToolKitの解析」を行うことにしました。


解析のその1は、変換行列の計算アルゴリズムの解説をやってみます。
ここでいう変換行列とは、マーカー(オブジェクト)座標系から、グローバル(カメラ)座標系へ変換する行列のことです。

これは、ARToolKitの重要な仕組みの1つです。



---- < 変換行列計算の概要 > ----



BGM:エコテロニカ(sansuiさん)

 OpenGLなどの3DCGでは、3Dモデルの移動・回転などを行うために、座標系の変換行列を用います。
ARToolKitの場合も、この変換行列がないと、マーカー上にモデルを表示できません。

プログラムでは、スクリーン上に映ったマーカーの画像から、この変換行列を計算しています。
計算のプロセスは、大まかに以下のようになります。

1.マーカーの黒い四角形を認識する
2.四角形の枠である、4辺を計算する
3.それぞれの辺を、カメラの投影方向に伸ばし、面を作る
4.面の法線を計算
5.向かい合った面同士の法線から、外積を計算する
6.その外積同士から、さらに外積を計算
7.現在わかっている式を用いて、行列の残り値を計算する


今回は"スクリーン上の4角形の4辺"から、"変換行列の3×3の要素"を計算するとこまでを中心に、解説していきます。



---- < 1.マーカーの黒い四角形を認識 > ----

四角形の認識ではまず、カメラに映った画像を2値化(白黒に)します。
そして、その白黒画像から、4角形を探します。
さらに、見つけた4角形が登録されているマーカーかどうか調べます。

この部分の詳しいアルゴリズムについては、後日解説するつもりです。



---- < 2.四角形の枠である、4辺を計算する > ----

ここも、1と一緒に解説いたします。



---- < 3.それぞれの辺を、カメラの投影方向に伸ばし、面を作る > ----

4角形の辺が取得できたら、この辺を伸ばして、面にします。
伸ばし方は、辺がスクリーンへ投影された方向に伸ばします。

つまりこの面は、3次元空間上のマーカーの4辺も通ることになります。
カメラの視点、2Dのマーカーの辺、3Dのマーカーの辺を繋ぐ面です。



---- < 4.面の法線を計算 > ----

それぞれの面の法線(面に対して、垂直なベクトル)を計算します。



---- < 5.向かい合った面同士の法線から、外積を計算する > ----

法線が計算できたら、向かい合った面同士の法線から、外積を計算します。
外積は、2つの法線に対し垂直になります。

この外積は、マーカー座標系の1つの軸を表すベクトルになります。



---- < 6.その外積同士から、さらに外積を計算 > ----

さらに、外積同士の外積をとります。
この3つの外積が、それぞれマーカー座標系のX軸, Y軸, Z軸になります。

さらに値を補正すると、変換行列の3×3の要素になるわけです。



---- < 8.現在わかっている式を用いて、行列の残り値を計算する > ----

変換行列の3×3の要素は、回転や拡大縮小を表しています。
変換行列に必要な残りの要素は、平行移動です。

平行移動分を計算するには、それまでに用いられた行列等の式を使い、答えを出します。



以上が、僕が理解できた範囲でのアルゴリズムの説明です。
間違いや不足があった場合には、連絡をお願いします。

コメント(2)

kaz :

初めましてkazです。
ブログの内容はだいたい読みました。
かなりわかりやすい内容でびっくりしました。

自分もARToolkit使っているのですが、examplesの中のtwoviewのプログラムがどうしても実行できません。
WDM_camera_flipV.xml内のfriendly_nameを書き換えてもカメラ2台同時出力ができません。
何か意見が欲しいです。お願いします。

ちなみに、OSはWindows XPです。
USBカメラはBUFFALO BWC-30L01 USB PC Camera
を2台使用しています。
プログラムはMicrosoft Visual C++ 6.0を使って入力しています。

PipeR :

返事が遅くなってすみません。
twoviewに関しては、使ってみたいと思っていますが、
現在カメラが1台しかなく、実行できません。

ちょうど解析の後に、twoviewを使ったプロジェクトを作るつもりだったので、その時にはお役に立てるかもしれません。

コメントする

このブログ記事について

このページは、PipeRが2008年4月27日 16:38に書いたブログ記事です。

ひとつ前のブログ記事は「ARToolKitの安定化 その④ ソースの公開」です。

次のブログ記事は「ARToolKitの解析 その② マーカーの認識」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01a