2017-02-12 - 2018-11-07 (update) |
|
|
*ARマーカー とは
AR (Augmented Reality 拡張現実) による表示の,位置や角度を決めるために利用するマーカーです.例えば、画像上のマーカーに合わせて文字やCGを表示したいとします.これは,画像上でマーカーを検出することで実現できます.{{small:関連:[link:ARマーカーの応用]}}
図1は実際にマーカーを検出し,そこに立方体のフレームを表示した例を示します.
[img:f1lt]
{{small:図1 ARマーカーとその検出結果}}
{{small:(ネコのイラストは,stohnqo様の作品です.GATAG|フリーイラスト素材集から頂戴しました.[link:http://free-illustrations.gatag.net])}}
*サンプルコード (C++)
ライブラリ:[link:simplesp]
サンプルコード:simplesp/sample/cv/bitmarker_neko
Webカメラで撮影中の画像からネコのマーカーを検出します.
*アルゴリズム
ここでは,四角形タイプのマーカーを検出する一般的な手順を,次の3つの段階で説明します.
1.撮影した画像上から、マーカーの角の4点を検出する
2.マーカーの角の4点の位置から,カメラとマーカーの位置と角度の関係を推定する
3.マーカーの模様から、マーカーの回転とIDを特定する
**マーカーの角の検出
シンプルな方法ですが,2値化に基づく方法が良く利用されます.画像を2値化することで,コントラストの高いマーカーの輪郭(2値化した領域の外周)を特定できるようにします.次に,その輪郭をなぞるように移動してカーブの強さを調べることで角を検出します.この時,輪郭の形状やサイズなどから,マーカーではなさそうな候補は外れ値として除外します.
検出までの流れを図2に示します.
[img:t1zr]
{{small:図2 左から入力画像,2値化画像,輪郭と角の検出結果}}
**位置と角度の推定
マーカーの4点の物理的な間隔と,画像上から検出した4点の座標が分かれば,位置と角度を推定できます.これは,PnP(perspective-n-point) problem と呼ばれる問題として知られています(ちなみに,数学のミレニアム問題P≠NP予想とは別物です).具体的な解き方は,別途説明したいと思います.なお,この時点では四角形の回転(0度,90度,180度,270度)は不定です.この不定性は,実世界のマーカーの4点と検出した4点との組み合わせが4通り考えられるため発生します.
**マーカーの回転とIDの特定
マーカーの回転は,内側の模様や何かしらの特徴を手掛かりに決定します.内側の模様を手掛かりにする場合は,回転を特定できるような模様が必要です(回転対称の模様はNG).また,何かしらの特徴を手掛かりにする場合は,他の処理をできるだけ邪魔しない特徴を考える必要があります.図1に示すマーカーについては,マーカーの四角形の1辺に小さな切れ込みを加え,その位置をもとに回転を特定します.
次に,マーカーのIDを特定します.マーカーの種類は少なくとも1つ以上あるとします.その種類のうちどれか,或いはどれでもないか(つまり外れ値か)を判定します.その判定は,入力画像上のマーカーと,マーカーの理想画像とを比較することで計算します.ここで、前段の処理で推定した位置と角度の情報から,画像上のマーカーの見た目を正方形に変形しておくと,画像の比較は簡単に実行できます.
画像上のマーカーを正方形に変形した例を図3に示します.
[img:d3qr]
{{small:図3 入力画像上のマーカーを正方形に変形した画像と,マーカーの理想画像}}
>> ご意見・ご質問など お気軽にご連絡ください.info