Minoruによる距離画像

ステレオカメラの視差によって距離を推定することができます。
今日購入したMinoruを買っていちばん最初に試したいことはこれでした。
ThinkPadリカバリしてたので、できることは限られていたのですが、とりあえずOpenCVをつかって視差画像まで取得したので書き留めておきます。

環境

Lenovo ThinkPad x100e
Windows 7 Home Premium
Microsoft Visual C++ 2008 Express
OpenCV 2.1
Minoru 3D Webcam

キャプチャ

ふつうにcvCreateCameraCapture()とかで使えます。MinoruはそのままだとVGAサイズの画像をよこします。
そのままだとThinkPad内蔵カメラも含めて引数のindexが0〜2まで指定できてしまうので、ThinkPad内蔵カメラのキャプチャを使わないよう制御します。
使用中は青白く目が光る。。。

視差画像

Schimaさんのエントリを参考に軽く組んでみました。ちょっと時間かかりましたが。
私までの距離は70cm程度でしょうか。なんかエラそうな顔しているのは気にしないでください。
cvFindStereoCorrespondenceBM()を用いたのが以下。荒いですね。。

cvFindStereoCorrespondenceGC()を用いたのが以下。これは直感的に理解できる感じ。

結果的には上記のエントリと似たような結果に。
ただグラフカットは処理が重く、画像サイズを小さくして対応していますが、それでもマシンスペックがよくないのでフレームレートは1FPSを切ります。
ブロックマッチングでも有効な情報を取り出せるような解析方法を検討中。
基線長、焦点距離ともに長めにとっている印象をうけました。Minoruの基線長は60mmで私とほぼ同じです。焦点距離も600mm以上あるようなので、距離が遠いものでも検出できます。
近い物体に対しては結果が発散してしまうのでつらいですが、研究用の移動ロボットとかに載せて使うぶんには問題ないように感じます。もちろんキャリブレーションは必要ですが。