本日は画像解析に関する技術調査枠です。
前回の続きとなります。
bluebirdofoz.hatenablog.com
写真から三次元点群データを生成する技術、所謂 SfM(Structure for Motion) を試します。
今回利用するのはオープンソースで公開されている OpenMVG です。
以下の記事を参考に、Windows環境での動作確認を試みます。
blog.goo.ne.jp
blog.goo.ne.jp
公式のドキュメントページは以下です。
・openMVG documentation
https://openmvg.readthedocs.io/en/latest/software/SfM/SfM/
今回はビルドしたモジュールを実際に利用してみます。
まず実行用のディレクトリ構成を作成します。
参考記事に従い、以下のようにディレクトリを作成してみました。
・D:\OpenMVG\ProjectTest\build64
ビルドしたOpenMVGのプロジェクトがあるフォルダ
・D:\OpenMVG\ProjectTest\SfmTest\images
解析対象の写真を置くフォルダ
・D:\OpenMVG\ProjectTest\SfmTest\matches
特徴点およびマッチング結果を出力するためのフォルダ
・D:\OpenMVG\ProjectTest\SfmTest\outReconstruction
3Dデータ出力先フォルダ
解析対象の写真として以下の異なるSfMであるBundlerからサンプル写真を拝借しました。
github.com
取得した写真を images フォルダに配置します。
カメラ画像を解析するにあたり、撮影したカメラの情報が必要となるようです。
Gitでダウンロードしたディレクトリの以下ファイルにカメラのデータベースファイルが存在します。
・src\openMVG\exif\sensor_width_database\sensor_width_camera_database.txt
これと写真のEXIFデータを比較し、カメラの情報を取得するようです。
このリストに含まれないカメラを利用する場合は自身で情報を追加する必要があります。
参照しやすいように以下の通り、コピーしました。
・D:\OpenMVG\ProjectTest\SfmTest\sensor_width_camera_database.txt
EXIFデータはファイルのプロパティの詳細から確認できます。
今回用いるサンプルデータは「Canon Powershot A10」で撮影された写真のようです。
sensor_width_camera_database.txtを確認すると、以下の通りデータが含まれていました。問題なさそうです。
では解析を開始します。
解析を実行するフォルダで Shift + 右クリック -> PowerShellウィンドウをここに開く を選択します。
解析用の実行ファイル群はビルドを行ったディレクトリに含まれています。
前回、Debug,x64 でビルドを行ったので、私の環境では以下のディレクトリに実行ファイルがありました。
・build64\Windows-AMD64-\Debug
利用するのは以下の実行ファイルです。(実行順)
・openMVG_main_SfMInit_ImageListing.exe
・openMVG_main_ComputeFeatures.exe
・openMVG_main_computeMatches.exe
・openMVG_main_IncrementalSfM.exe
紹介記事の実行手順に基づき、コマンドを実行します。
1つ目は openMVG_main_SfMInit_ImageListing.exe です。
・D:\OpenMVG\ProjectTest\build64\Windows-AMD64-\Debug\openMVG_main_SfMInit_ImageListing.exe -i D:\OpenMVG\ProjectTest\SfmTest\images -d D:\OpenMVG\ProjectTest\SfmTest\sensor_width_camera_database.txt -o D:\OpenMVG\ProjectTest\SfmTest\matches
以下のようなメッセージが表示されれば成功です。
matches ディレクトリに以下の sfm_data.json ファイルが出力されています。
なお、前述のカメラのデータベースファイルにカメラ情報の不足があれば、ここでエラーが発生するようです。
2つ目は openMVG_main_ComputeFeatures.exe です。
・D:\OpenMVG\ProjectTest\build64\Windows-AMD64-\Debug\openMVG_main_ComputeFeatures.exe -i D:\OpenMVG\ProjectTest\SfmTest\matches\sfm_data.json -o D:\OpenMVG\ProjectTest\SfmTest\matches\
以下のようなメッセージが表示されれば成功です。
matches ディレクトリに以下の特徴点の抽出ファイルが出力されています。
3つ目は openMVG_main_computeMatches.exe です。
・D:\OpenMVG\ProjectTest\build64\Windows-AMD64-\Debug\openMVG_main_computeMatches.exe -i D:\OpenMVG\ProjectTest\SfmTest\matches\sfm_data.json -o D:\OpenMVG\ProjectTest\SfmTest\matches\
ここで私の環境では以下のエラーメッセージが表示されました。
「'neato'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません」
調べてみると、Graphviz というライブラリのコマンドのようです。
d.hatena.ne.jp
以下にインストール手順をまとめました。
bluebirdofoz.hatenablog.com
インストール後、再実行するとエラーが発生しなくなることを確認しました。
以下のようなメッセージが表示されれば成功です。
matches ディレクトリに以下の特徴点のマッチング結果ファイルが出力されています。
4つ目は openMVG_main_IncrementalSfM.exe です。
・D:\OpenMVG\ProjectTest\build64\Windows-AMD64-\Debug\openMVG_main_IncrementalSfM.exe -i D:\OpenMVG\ProjectTest\SfmTest\matches\sfm_data.json -m D:\OpenMVG\ProjectTest\SfmTest\matches\ -o D:\OpenMVG\ProjectTest\SfmTest\outReconstruction\
途中で入力を求められます。初期ペアというものを選択する必要があるそうです。
とりあえずは X:0 Y:1 を初期ペアとしました。ここで何を選ぶのが適切なのかは追々調べます。
以下のようなメッセージが表示されれば成功です。
出力先フォルダに3Dファイルが出力されています。