MRが楽しい

MRやVRについて学習したことを書き残す

OpenMVGをWindows環境で試す その2(実行編)

本日は画像解析に関する技術調査枠です。
前回の続きとなります。
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 フォルダに配置します。
f:id:bluebirdofoz:20171106022623j:plain

カメラ画像を解析するにあたり、撮影したカメラの情報が必要となるようです。
Gitでダウンロードしたディレクトリの以下ファイルにカメラのデータベースファイルが存在します。
・src\openMVG\exif\sensor_width_database\sensor_width_camera_database.txt
これと写真のEXIFデータを比較し、カメラの情報を取得するようです。
f:id:bluebirdofoz:20171106022652j:plain
このリストに含まれないカメラを利用する場合は自身で情報を追加する必要があります。

参照しやすいように以下の通り、コピーしました。
・D:\OpenMVG\ProjectTest\SfmTest\sensor_width_camera_database.txt
f:id:bluebirdofoz:20171106022702j:plain

EXIFデータはファイルのプロパティの詳細から確認できます。
f:id:bluebirdofoz:20171106022709j:plain
今回用いるサンプルデータは「Canon Powershot A10」で撮影された写真のようです。

sensor_width_camera_database.txtを確認すると、以下の通りデータが含まれていました。問題なさそうです。
f:id:bluebirdofoz:20171106022717j:plain

では解析を開始します。
解析を実行するフォルダで Shift + 右クリック -> PowerShellウィンドウをここに開く を選択します。
f:id:bluebirdofoz:20171106022727j:plain

解析用の実行ファイル群はビルドを行ったディレクトリに含まれています。
前回、Debug,x64 でビルドを行ったので、私の環境では以下のディレクトリに実行ファイルがありました。
・build64\Windows-AMD64-\Debug
f:id:bluebirdofoz:20171106022737j:plain
利用するのは以下の実行ファイルです。(実行順)
・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
f:id:bluebirdofoz:20171106022744j:plain

以下のようなメッセージが表示されれば成功です。
f:id:bluebirdofoz:20171106022752j:plain
matches ディレクトリに以下の sfm_data.json ファイルが出力されています。
f:id:bluebirdofoz:20171106022801j:plain
なお、前述のカメラのデータベースファイルにカメラ情報の不足があれば、ここでエラーが発生するようです。

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\
f:id:bluebirdofoz:20171106022815j:plain

以下のようなメッセージが表示されれば成功です。
f:id:bluebirdofoz:20171106022825j:plain
matches ディレクトリに以下の特徴点の抽出ファイルが出力されています。
f:id:bluebirdofoz:20171106022834j:plain

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\
f:id:bluebirdofoz:20171106022843j:plain

ここで私の環境では以下のエラーメッセージが表示されました。
「'neato'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません」

調べてみると、Graphviz というライブラリのコマンドのようです。
d.hatena.ne.jp

以下にインストール手順をまとめました。
bluebirdofoz.hatenablog.com

インストール後、再実行するとエラーが発生しなくなることを確認しました。
以下のようなメッセージが表示されれば成功です。
f:id:bluebirdofoz:20171106022921j:plain
matches ディレクトリに以下の特徴点のマッチング結果ファイルが出力されています。
f:id:bluebirdofoz:20171106022933j:plain

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\
f:id:bluebirdofoz:20171106022943j:plain

途中で入力を求められます。初期ペアというものを選択する必要があるそうです。
f:id:bluebirdofoz:20171106023003j:plain
とりあえずは X:0 Y:1 を初期ペアとしました。ここで何を選ぶのが適切なのかは追々調べます。
f:id:bluebirdofoz:20171106022954j:plain

以下のようなメッセージが表示されれば成功です。
f:id:bluebirdofoz:20171106023013j:plain

出力先フォルダに3Dファイルが出力されています。
f:id:bluebirdofoz:20171106023022j:plain