拡張現実(AR)は多くの記事に書かれています。 Habréには、この方向に専念するセクション全体があります。 つまり、拡張現実を作成するための2つの基本的なアプローチがあります。事前に準備されたマーカー ( まだ )を使用します。 「コンピュータービジョン」のアルゴリズムを使用する両方のアプローチは、フレーム内のオブジェクトを認識し、それらを補完します。
この記事は、事前に準備されたマーカーで追加の現実を作成する際の認識アルゴリズムに専念します。
マーカーとは何ですか?
理論的には、マーカーは任意の図形(オブジェクト)にできます。 しかし実際には、ウェブカメラ(電話)の解像度、カラーレンダリング、照明、および機器の処理能力(すべてがリアルタイムで発生するため、迅速に行う必要があります)によって制限されているため、通常は単純なフォームの白黒マーカーが選択されます。 原則として、それは内部に刻まれた識別子画像を持つ長方形または正方形です。
記事[1]では、次のような主要なマーカーの種類について説明しています。
ArToolKit(ATK)マーカーシステム。
Institut Graphische Datenverarbeitung(IGD)マーカーシステム。
シーメンスコーポレートリサーチ(SCR)マーカーシステム。
SCRおよびFramatome ANPで使用されるHo ff manマーカーシステム(HOM)。
同じ記事[1]は、異なるマーカー実装と認識のパフォーマンスを比較しています。
一般化されたマーカー認識アルゴリズム
要するに、マーカー認識アルゴリズムは次のようになります( ここで取り上げます )。
a)グレースケールで表示します。
b)画像の二値化(しきい値)。
c)閉鎖エリアの定義。
d)輪郭を選択します。
e)マーカーの角を選択します。
f)座標を変換します。
各ステップで何が起こるかを、イラストでさらに詳しく考えてみましょう。
グレースケールカラー画像の翻訳
以下は、グレースケールでカラー画像を翻訳するための3つのアルゴリズムです。
1.明度
GS =(最大(R、G、B)+最小(R、G、B))/ 2
2.明るさ
GS = 0.21×R + 0.72×G + 0.07×B
3.平均
GS =(R + G + B)/ 3
これらの3つの方法の例を次に示します。 原則として、彼らは「発光」を使用します。
元の画像:
明度:
輝度:
平均:
画像の二値化。 しきい値
画像を2色状態に変換するために特定のしきい値が使用されることは明らかです。 問題は、このしきい値がどのように、なぜ適用されるかです。 最も簡単な方法は、しきい値を設定することです。 たとえば、256色がある場合、しきい値を128に設定できます。少し複雑な場合は、色ヒストグラムを使用してしきい値を選択できます。 一般に、画像をb / wタイプに変換するすべての方法は、記事[2]にリストおよび分類されている6つの大きなグループに分けることができます。
1)ヒストグラムの「フォーム」に基づく方法。
2)クラスタリングに基づく方法。
3)エントロピーの研究に基づく方法。
4)グレーとb / w画像の類似性の検索に基づく方法。
5)相関依存関係と画像領域のピクセル間の統計分布の特徴を使用する方法。
6)画像内の各ピクセルのしきい値の局所適応に基づく方法。
ほとんどの場合、ローカル適応に基づく方法が使用されます。 40の二値化方法について、それらを比較すると、別の本格的な記事が得られるので、与えられたしきい値、 適応 、および大津法で画像を二値化する例を示します。
ハードセットのしきい値:
応答性:
大津メソッド:
閉鎖エリアの定義
白い背景に閉じた領域を定義する必要があります。 原則として、アルゴリズムの組み合わせがありますが、一般的な場合、原則として、白い領域を「塗りつぶす」ためのアルゴリズムが使用され、閉じた領域が選択されます。
ここで、人間は同様の問題などを解決しました。 この時点で変更が可能です。 最初に、輪郭が強調表示され、次に分離のチェックが行われます。 おそらく、このアプローチはより高速です。
このように:
または、まず輪郭を特定し、次に分離を確認しました。
アウトライン選択
画像の輪郭を選択するには、いくつかの方法があります。 見つかった主なものを示します[3]:
1)Marr-Hildrethエッジ検出器
2)Canny Edge Detector
3)ブール関数ベースのエッジ検出器
4)ユークリッド距離とベクトル角ベースのエッジ検出器
5)マルチフラッシュイメージングを使用した深度エッジ検出
6)Sobel Edge Detector
繰り返しになりますが、素材は非常に膨大であり、アルゴリズムの比較と説明には1ページ以上かかる場合があります。 ほとんどの場合、Canny and Sobelアルゴリズムが使用されます。
白い閉じた領域内で輪郭を探しています。
適用の結果、このような画像が得られます
キャニー(アルゴリズムのパラメーターをいじる必要があります)
ソーベル
マーカーコーナーの強調表示
輪郭を選択したら、それをマーカーと比較する必要があります。 多くの異なるアウトラインを画像内で強調表示できます。四角形に「似た」何かを見つける必要があります。
この問題を解決するには、 Douglas-Peckerアルゴリズム (別名Ramer-Douglas-Peckerアルゴリズム、反復最近傍点アルゴリズム、分割およびマージアルゴリズム)を適用します。これにより、より大きな一連の点で近似される曲線の点の数を減らすことができます。
たとえば、openCVには、これを既に行う約関数PolyPolyDPがあります。 結果をさらに処理すると、完全に適切な結果が得られます。
したがって、マーカーの角の座標を取得しました。
座標変換
これで、マーカーの角の座標ができました。これは、本質的には理想的には垂直ですが、実際には異なる角度で配置されています。 さらに、理想的にも現実的にも、正方形の辺は座標軸です。 したがって、オブジェクトに対する「カメラ」の位置と、原点の基準点を決定できます。
座標を決定する方法の基礎となるものは、次のようにグラフで表示できます[4]。
つまり アイデアは、カメラが見ている角度を変えると、投影サイズが変わるということです。 例:
図面と基本情報はこちらから 。 ここで数学について説明します[4]:
カメラと基準点の位置がわかっていれば、3Dモデルの投影を描くことができます。 この場合、キューブ。
ご覧のように、マーカーとしてクリーンフィールドのある正方形を使用すると、対称になり、部分的にしか回転を認識できません。 時にはこれで十分です。 そうでない場合は、正方形内に追加のマーカーを追加すると、次のようになります
また、 ハフ変換を使用して回転角を取得します
拡張現実を構築するために、 ARToolkitや関連するものなど、この方法を再度実行することなく使用できるライブラリが既にあります。
この記事は、拡張現実学習サイクルの最初の部分として考案されました。 第2部では、これがHabrausersの関心を引く場合、Android用の拡張現実を備えたアプリケーションの作成を検討します。 そして、特別に用意されたマーカーなしで拡張現実を作成することができます。
続き: AndroidエミュレーターでWebカメラを使用する方法
中古文学
1.チャン・チャン、ステファン・フロンツ、ナシル・ナバブ。 ARシステムにおける視覚マーカーの検出とデコード:比較研究。
2.メメット・セジン。 画像のしきい値処理技術と定量的なパフォーマンス評価に関する調査。
3.Ehsan Nadernejad。 エッジ検出技術:評価と比較。
4.加藤博一、マーク・ビリングハースト。 ビデオベースの拡張現実会議システムのマーカー追跡とHMDキャリブレーション