Flashでステレオビジョン入門


Demo: Experiments in Stereo Vision
(ByteArrayキャッシュ利用)

実は何年か前に試みたことがあるのですが、たしかFlash CS3とかで作っていて、
その時の.flaファイルが行方不明、、、諦めてリトライしようかと。
今度はちょっと真面目にFlex (Flex SDK 4)で作ってみます。

ステレオグラムを寄り目とかにしながら見て立体視するみたいな、
「人間ががんばる」話ではなく、あくまで機械で立体視をシミュレーションします。
ただ、相当デリケートな処理が必要な難しい分野なので、入門レベルで留めたいと思います。
サブピクセルレベルでの推定などはFlashだと馬力不足な感じもしますので。。

今回は視差マップ(Disparity Map)を生成する所まで。
扱うステレオペア画像は定番のTsukuba stereo pairです。
使用するアルゴリズムは入門レベルということでブロックマッチングを、
一致度評価にはSAD (Sum of Absolute Differences)をコストとしています。
(ただし、エピポーラ拘束条件の下で探索を行うこととする)
このアルゴリズムは動的計画法(DP)を用いて実装されるのが普通ですが、
今回はアルゴリズムの形が分かりやすいように素朴な実装を載せます。

・StereoVision.mxml (メインビュー)

・ViewHelper.as (ヘルパークラス)
※ debert さんのBulkLoaderクラスを使用させていただいています。感謝!

・StereoMatcher.as (ステレオマッチング処理用クラス)

・StereoPair.as (ステレオペア画像保持用クラス)

・IState.as (各ステレオマッチング用データクラスのインタフェース)
※ 現在は StateBM しか作っていないのであまり意味無いです

・StateBM.as (ステレオマッチング用データクラス)
※ 現在は未使用のパラメータやメソッドがいくつかあります

算出された視差マップを少し大きめに載せておきます。
良質なステレオペア画像を使っているせいもありますが、そこそこな精度が出ているかと。
(白色に近いほどカメラから近いことを表す)

この視差データを元に、三角測量による位置検出を行うことができるので、
Papervision3Dとかに算出した位置データを渡して三次元空間に再投影してやると、
ビジュアル的に分かりやすい結果を得られると思います。

・関連記事
ステレオ画像処理

あわせて読む:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です