サイトアイコン NegativeMindException

OpenMVSのサンプルを動かしてみる

この前見つけたOpenMVSをビルドしてみようと思ってドキュメント見たら、すでにサンプルをWindows用にビルドしたバイナリが配布されているではないか!



公式ドキュメントのUsageページの内容も、配布されているopenMVS_sampleを使えばできそうな感じ。

ただ、ドキュメントがやや古いのか、書いてある実行ファイルの名称が配布されているものとちょっと食い違っているみたい。
たぶん、ドキュメントで”openMVG_main_openMVG2openMVS“って書かれているのは、現在のサンプルの中にある”InterfaceOpenMVG“のこと。ソースコードのInterfaceOpenMVG.cppの中身をちょっと見てみると、ドキュメント記載の”openMVG_main_openMVG2openMVS“と同じ引数を受け取りそうな感じ。

openMVGでSFMデータ(sfm_data.bin)を作成する

とりあえず、OpenMVSに食わせるためのsfm_data.binをopenMVGでちゃちゃっと生成してしまう。この前ビルドしたopenMVGのSfM toolsを使う。



OpenMVSの使い方の例に合わせてSceaux Castleの画像セットを使用する。

Sceaux Castle画像セットを入力として以下のツールを順に実行すると、最終的にsfm_data.binが出力される。コマンドライン引数はそれぞれのドキュメント参照。

  1. openMVG_main_SfMInit_ImageListing:画像リストの作成
  2. openMVG_main_ComputeFeatures:画像特徴の検出・記述
  3. openMVG_main_ComputeMatches:画像の対応関係の計算
  4. openMVG_main_IncrementalSfM:3次元再構築(Structure from Motion)

sfm_data.binと一緒にいくつか.plyファイルも出力される。この.plyファイルをMeshLabで開けば3次元再構築の結果を確認できる。

で、出力されたsfm_data.binを使ってOpenMVSのMulti-View Stereoによる密な点群の復元を試すわけだけど、まずは現在配布されているOpenMVSの最新のサンプルの構成に合わせて、やや古いOpenMVS公式のドキュメントの記述を読み換えながら訳してみる。


OpenMVSモジュールの使い方

次は、利用可能なモジュールの使い方の説明です。
今回は、OpenMVGのパイプラインを使い、Sceaux Castle画像セットからカメラ位置と疎な点群の復元を行いました。
ここで示すアウトプットは、全てOpenMVSのパイプラインで自動的に生成したものであり、手作業による調整は一切行っていない結果であることに注意してください。
完全なサンプル(モジュール用のWindows x64バイナリを含む)はOpenMVS_Sampleにあります。

OpenMVSのバイナリは、全てコマンドライン引数をサポートしています。引数の詳細については、引数無し、または-hコマンドで実行すると表示されます。
@FlachyJoe氏がOpenMVGとOpenMVSの連携プロセスを自動化した、コマンド1つで実行できるscriptを提供しています。
以下のコマンドを実行すれば同様の結果が得られるはずです:

python MvgMvs_Pipeline.py


スポンサーリンク

OpenMVGのシーンを変換する

シーンの再構築後、OpenMVGはデフォルトでカメラ位置と疎な点群情報の入ったsfm_data.binファイルを生成します。
エクスポーターツールを以下コマンドで実行すれば、このファイルをOpenMVSのプロジェクトファイルscene.mvsへ変換できます。

InterfaceOpenMVG -i sfm_data.bin -o scene.mvs

OpenMVGが古い.jsonアスキー形式のファイルを使っている場合は、以下のように実行してください。

InterfaceOpenMVG -i scene.json -o scene.mvs

ここまでのステップで得られた疎な点群は以下の画像のようになるはずです:


密な点群の再構築(オプション)

シーンに欠けている部分があっても、dense reconstruction(密な再構築)モジュールを使って密な点群を推定すれば復元することができます。

DensifyPointCloud scene.mvs

得られた高密度の点群は以下の画像のようになります(頂点の色は可視化のためのおおよそのものであり、以降の処理には影響しないことに注意):


ラフなメッシュの再構築

ここまでのステップで得られた疎、密な点群をmesh reconstruction(メッシュの再構築)モジュールの入力として使うことができます。

ReconstructMesh scene_dense.mvs

mesh reconstructionモジュールを実行して得られるメッシュ:


メッシュのリファイン(オプション)

疎、密な点群から得られたメッシュには、まだディティールや大きな欠落部分をリファインできる余地があります。
以下のコマンドで、疎な点群から得たラフなメッシュのリファインを行ってみます:

RefineMesh scene_mesh.mvs

リファイン前と後:




メッシュにテクスチャを貼る

ここまでのステップで得られたメッシュをmesh texturing(メッシュにテクスチャを貼る)モジュールの入力として使います。

TextureMesh scene_dense_mesh.mvs

メッシュにテクスチャを貼った状態:

openMVG_main_openMVG2openMVS“を”InterfaceOpenMVG“と読み替えるだけでちゃんと動いたぞ。さらにOopenMVS_sampleにはopenMVGだけでなく、VisualSFMのファイルを変換するInterfaceVisualSFMも入っているので、VisualSFMで疎な点群の復元まで終えたデータからOpenMVSで密な点群の復元ができるわけだな。

まあ、もちろんPMVSCMVSとかCMPMVSでも良いんですが。


スポンサーリンク

関連記事

  • ROMOハッカソンに行ってきた
  • Paul Debevec
  • SegNet:ディープラーニングによるSemantic Segmentation手法
  • 『手を動かしながら学ぶエンジニアのためのデータサイエンス』ハンズオンセミナーに行ってきた
  • クラスの基本
  • 機械学習について最近知った情報
  • 画像認識による位置情報取得 - Semi-Direct Monocular Visual Odome...
  • Unity ARKitプラグインサンプルのドキュメントを読む
  • マルコフ連鎖モンテカルロ法
  • PythonでMayaのShapeノードプラグインを作る
  • Gource:バージョン管理の履歴を可視化するツール
  • Live CV:インタラクティブにComputer Visionコーディングができるツール
  • Rerun:マルチモーダルデータの可視化アプリとSDK
  • trimesh:PythonでポリゴンMeshを扱うライブラリ
  • フォトンの放射から格納までを可視化した動画
  • R-CNN (Regions with CNN features):ディープラーニングによる一般物体...
  • Unityで画面タッチ・ジェスチャ入力を扱う無料Asset『TouchScript』
  • 機械学習に役立つPythonライブラリ一覧
  • UnityでARKit2.0
  • 網元AMIで作ったWordpressサイトのインスタンスをt1microからt2microへ移行した
  • Point Cloud Consortiumのセミナー「3D点群の未来」に行ってきたよ
  • Raspberry Piでセンサーの常時稼働を検討する
  • Theia:オープンソースのStructure from Motionライブラリ
  • MFnDataとMFnAttribute
  • このブログのデザインに飽きてきた
  • 第1回 3D勉強会@関東『SLAMチュートリアル大会』
  • オープンソースのプリント基板設計ツール『KiCad』
  • OpenGVのライブラリ構成
  • Qlone:スマホのカメラで3Dスキャンできるアプリ
  • Cartographer:オープンソースのSLAMライブラリ
  • Open Shading Language (OSL)
  • Digital Emily Project:人間の顔をそっくりそのままCGで復元する
  • Google App Engine上のWordPressでFlickrの画像を貼る
  • Kaolin:3Dディープラーニング用のPyTorchライブラリ
  • BlenderのPython環境にPyTorchをインストールする
  • AndroidもopenGLも初心者さ (でもJavaは知ってるよ)
  • Quartus II
  • オープンソースのロボットアプリケーションフレームワーク『ROS (Robot Operating S...
  • WebGL開発に関する情報が充実してきている
  • .NETで使えるTensorFlowライクなニューラルネットワークライブラリ『NeuralNetwo...
  • PGGAN:段階的に解像度を上げて学習を進めるGAN
  • GoogleのDeep Learning論文
  • モバイルバージョンを終了