1:概要
このプログラムについて
このプログラムは、階層グラフカットを用いたステレオマッチングのプログラムです。このプログラムにより、2つの視差画像から深度マップのような画像を生成できます。生成画像からは画像内のどのオブジェクトがどれくらい離れているかがわかります。
2:導入と実行
2.1:導入
はじめに
このプログラムはMacで制作しましたが、記述はC++とOpenCVを用いているため、WindowsやLinux等でも利用可能です。そちらでの利用の際にはコマンドラインからのコンパイルや、その他の統合開発環境によるビルドが必要になりますが、ここではMacのXcodeを用いた説明をします。
以降の解説では、Xcodeがインストールされていることを前提とします。Xcodeがインストールされていない場合は、Macに付属しているインストールディスクまたはAppStoreからダウンロードしてインストールを行って下さい。詳しくはAppleのホームページを参照して下さい。
OpenCVのインストール
OpenCVをインストールするときにはMacPortsを導入しておくと便利です。また、XcodeでOpenCVを使用するためにはXcode Command Line Toolsを導入する必要があります。なお、Xcode Command Line Toolsを導入する際にはApple Developerへの登録が必要のようです。
参考:『OpenCVをインストールしてXCodeで使う方法 - プログラミング講座 JProgramer』
ダウンロード
以下のリンクからファイルをダウンロードし、任意の場所へ解凍して下さい。
https://www.dropbox.com/s/l65shm6rfjiwpwy/HGSM.zip
MAXFLOWの導入
このプログラムはこちらのサイトのMAXFLOWというプログラムを使用しています。
- サイトへアクセスし、maxflow-v3.02.src.tar.gzと書かれたリンクからファイルをダウンロード。
- ダウンロードしたmaxflow-v3.02.src.tar.gzを解凍。
- フォルダの中にある全てのファイルを、前の項で解凍した"HGSM/src/"の中へ移動。
画像の用意
- ステレオマッチングを行うための、任意の画像ペアを用意する。
- 用意した画像は、どこに置いていても構いませんが"HGSM/res/"の中へ入れておくと実験の際に管理が楽になります。
- HGSM/res/main.cppの30行目と31行目の右辺を、それぞれ2.で用意した画像のファイルパスに書き換える。
⇒ 関連:『2.3:チューニング』
2.2:ビルド・実行
OpenCVダイナミックライブラリの準備
- Xcodeを起動し、ソースコードがまとめられたプロジェクトファイルを開く(ここではhgsm.xcodeprojとしています)。
- 左のカラムの、をクリック。
- 中央のカラムの"TARGETS"の欄から、を選択。(表示されていない場合は中央のカラム左上のをクリック。)
- Build Settingsタブを開く。
- Search Pathsセクションを開き、Library Search Pathsに先ほどインストールしたOpenCVのヘッダファイルが存在するパスを設定(基本的には/opt/local/include/)。
OpenCVダイナミックライブラリの選択
- 中央のカラムのBuild Phasesタブをクリック。
- Link Binary With Librariesセクションを開く。
- +を押して、出てきたダイアログのをクリック。
- ファイルを選択するダイアログが出たら、/opt/local/libにある以下の3つのダイナミックライブラリを選択。ちなみにファイルを選択するとき、⌘ + Shift + Gを押すとディレクトリパスによって移動することができます。
- libopencv_core〇〇.dylib
- libopencv_highgui〇〇.dylib
- libopencv_imgproc〇〇.dylib
コンパイルソースの選択
- 中央のカラムのBuild Phasesタブをクリック。
- Compile Sourcesセクションを開く。
- +を押して、出てきたダイアログのをクリック。
- ファイルを選択するダイアログが出たら、/opt/local/libにある以下の3つのダイナミックライブラリを選択。ちなみにファイルを選択するとき、⌘ + Shift + Gを押すとディレクトリパスによって移動することができます。
- libopencv_core〇〇.dylib
- libopencv_highgui〇〇.dylib
- libopencv_imgproc〇〇.dylib
プロジェクトのビルドと実行
- 中央のカラムのBuild Phasesタブをクリック。
- を開く。
- +を押して、出てきたダイアログのをクリック。
- ファイルを選択するダイアログが出たら、/opt/local/libにある以下の3つのダイナミックライブラリを選択。ちなみにファイルを選択するとき、⌘ + Shift + Gを押すとディレクトリパスによって移動することができます。
ウインドウ左上のをクリックすることで、ビルドと実行を同時に行うことができます。
2.3:チューニング
このセクションでは、プログラムを任意にチューニングして使用するための方法を示しています。
任意の画像を処理させたい
- 以下のようにプログラムを書き換える。 ・ main.cpp:30行目:rightInFileName = "右側の画像ファイルパス"
・ main.cpp:31行目:leftInFileName = "左側の画像ファイルパス"
コスト関数を変更したい
- 以下の関数を任意に書き換える。 ・ main.cpp:Dfunc():データコスト関数
・ main.cpp:Vfunc():スムーズネスコスト関数
データコスト関数とスムーズネスコスト関数については後述します。
α拡張アルゴリズムで実験したい
- 以下のようにプログラムを書き換える。 ・ main.cpp:28行目:USE_HIERARCHICAL_GRAPHCUT = false