=== 今回したこと
今まで ARToolkit, NyARToolKit と 勉強させて頂きましたが、
どうしても自分で実装したくなり、D言語で組んでみました。
...といいながら結局のところ、OpenCVの関数に頼りっぱなし、
処理内容は大御所ライブラリと殆ど同じだったりします。..orz
=== プログラムの説明
単一マーカー("ane" Marker)のみ認識できます。
方向認識用カラーテンプレート画像は予め読み込まれています。
四角形が検出された場合、射影変換された画像(以下、射影画像)が
画面左下に表示されます。
=== 表示される文字の意味
"Lost":
画像から四角形を検出出来ません。
"Unknown":
四角形が検出されるものの、それが何か認識出来ません。
黄色の棒と赤い枠の交わるところが cvFindContours で検出された四頂点の始点です。
この状態の時、マーカーの方向が定まっていないので、射影画像は回転します。
"0 ~ 270[deg]":
検出された四角形の射影画像と、予め読み込まれたテンプレート画像(反時計周りに90度づつ回転)
を比較することによって、マーカーがどれだけ回転しているかわかります。
この状態の時、検出された四頂点に回転角度分だけ逆回転をかけることで、
緑色の棒と赤い枠の交わるところが 0[deg]時の射影画像左上に固定されます。
=== 勉強および参考にさせていただいたサイトなど
Square Detector(cvCvtColor, cvThreshold, cvFindContours , cvApproxPoly, cvContourArea, cvCheckContourConvexity)
OpenCV11pre1a\samples\c\squares.c
OpenCV11pre1a\cv\src\cvcalibinit.cpp
Homography (cvFindHomography, cvWarpPerspective)
http://chihara.naist.jp/opencv/?%BC%CD%B1%C6%CA%D1%B4%B9
Pattern Matching (cvMatchTemplate, cvMinMaxLoc)
http://opencv.jp/sample/matching.html#template
Camera Calibration (cvCalibrateCamera2, cvFindExtrinsicCameraParams2)
http://opencv.jp/sample/camera_calibration.html#calibration
Amazing! Good stuff!
BryceHillam 2 years ago