複数視点画像から3次元形状を復元するライブラリ『openMVG』

最近、この手の2D→3D復元系のライブラリを色々と調べている。何となく、自分で3D復元ツールを作ってみたくてね。

この間のOpenGVは複数画像からカメラ(視点)の3次元位置・姿勢を推定するライブラリだった。↓



こっちのopenMVG(Multiple View Geometry)は、名前の通り、複数視点から3次元形状を復元するためのオープンソースのライブラリ。(中身の処理はあんまり違いが無い気もする)
ライセンスはMPL(Mozilla Public License)2.0なので、商用利用も可能。

openMVG: “open Multiple View Geometry”

openMVG

“open Multiple View Geometry”は、コンピュータビジョン研究者、特にMultiple View Geometryのコミュニティを対象としたライブラリです。このライブラリは、多視点幾何における古典的な手法を簡単に扱うことができ、多視点幾何の問題を正確に解けるように設計されています。
openMVGのポリシーは「シンプルに保つ、メンテナンス性を保つ」です。OpenMVGは、コミュニティでの変更が行いやすいように、コードの可読性を重視しています。機能とモジュールは全てユニットテスト済みです。このテスト駆動開発によって、コードの動作と再現性を保証します。また、この構造はユーザーが特定の機能を学び、理解する助けとなるでしょう。
より詳しく知りたい場合は、openMVG GitHubのリポジトリをご覧ください。


スポンサーリンク

と、公式ページに書いてあるので、アルゴリズムのお勉強にも有用なのではないでしょうか。公式ドキュメントはこちら


スポンサーリンク


以前Structure from Motionを調べた時にチラホラとopenMVGという名前は聞いてたんだけど、その頃はコンピュータビジョンについて知らなさ過ぎてスルーしちゃってた。
Structure from Motion (多視点画像からの3次元形状復元)
3DCGをガッツリ学んでたもんで、「2次元の画像処理よりも3次元のCGの方が抽象度が高くて美しい」という感覚があって、コンピュータビジョンに対して「お前らとは次元が違うんだよ」とか思ってたんだけど、最近のコンピュータビジョンは結構3次元なの...


Youtubeを見ると、openMVGとPMVS(Patch-based Multi-view Stereo Software)というツールと併用して3次元復元した動画がいくつかアップされている。

OpenMVG+PMVS dense cloud reconstruction

OpenMVG 3D reconstruction sparse vs dense

公式ページに

openMVG provides complete Structure from Motion implementations:
a sequential pipeline
a global pipeline

って書いてあるけど、”complete Structire from Motion implementations”ってのはカメラ姿勢と疎な点群の復元までですかね。

追記:openMVGにGUIを付けたツールを見つけた↓



スポンサーリンク

関連記事

adskShaderSDK
機械学習で遊ぶ
スクラッチで既存のキャラクターを立体化したい
1枚の画像からマテリアルを作成できる無料ツール『Materialize』
Fast R-CNN:ディープラーニングによる一般物体検出手法
.NETで使えるTensorFlowライクなニューラルネットワークライブラリ『NeuralNetwo...
Point Cloud Libraryに動画フォーマットが追加されるらしい
openMVGをWindows10 Visual Studio 2015環境でビルドする
UnityでShaderの入力パラメータとして行列を渡す
画像中の人物表面のUV座標を推定する『DensePose』
Quartus II
UnityでLight Shaftを表現する
Unityの薄い本
pythonもかじってみようかと
HerokuでMEAN stack
ニューラルネットワークと深層学習
Open Shading Language (OSL)
BlenderでPhotogrammetryできるアドオン
Amazon Web ServicesでWordPress
FacebookがDeep learningツールの一部をオープンソース化
UnityでPoint Cloudを表示する方法
Point Cloud Consortiumのセミナー「3D点群の未来」に行ってきたよ
OpenCV
Pythonの自然言語処理ライブラリ『NLTK(Natural Language Toolkit)』
『手を動かしながら学ぶエンジニアのためのデータサイエンス』ハンズオンセミナーに行ってきた
iPhoneアプリ開発 Xcode 5のお作法
このブログのデザインに飽きてきた
WordPressのサーバ引っ越し方法を考える
オープンソースのSfM・MVSツール『COLMAP』
書籍『ROSプログラミング』
OpenCV 3.3.0-RCでsfmモジュールをビルド
Adobe MAX 2015
C#で使える可読性重視のディープラーニングライブラリ『KelpNet』
疑似3D写真が撮れるiPhoneアプリ『Seene』がアップデートでついにフル3Dモデルが撮影できる...
オープンソースのStructure from Motionライブラリ『Theia』
コンピュータビジョンの技術マップ
Javaで作られたオープンソースの3DCGレンダラ『Sunflow』
続・ディープラーニングの資料
iOSデバイスと接続して連携するガジェットの開発方法
ディープラーニングに対応したPythonの機械学習ライブラリ『Pylearn2』
AfterEffectsプラグイン開発
OpenCV 3.1のsfmモジュールのビルド再び

コメント

  1. 千里 より:

    面白いブログ、ありがとうございます。
    OpenMVGについての質問ですが、複数のカメラ画面から室内の立体空間を再現する上、特定の場所にものが置いているかを判別することが可能ですか?もし、可能なら、その場合、カメラの台数や、撮影角度について、要求がありますか?

    • NegativeMind より:

      こんにちは。

      openMVGは画像から3次元形状を復元するためのライブラリですので、「特定の場所に物が置いてあるかを判別する」という目的での使用には適していません。
      要件を聞く限り、単純に2次元の背景差分で対処できる気がします。

      カメラを固定しておけば、「物が無い状態」と「物がある状態」で撮影画像の特定の領域の画素だけが変化しますので、その変化を検出すれば目的を果たせるのでは?

      OpenCVの背景差分機能や、BGSLibraryという背景差分用のライブラリを試してみてはいかがでしょうか?

      • 千里 より:

        早速のご返事、大変ありがとうございます。
        今回対象となっているのは、以下のような駐輪場です。
        http://www.sagamiharashi-machimidori.or.jp/img/uploads/3/20071023093446_1.jpg
        比較的に少ないカメラによって、各場所に自転車が止まっているかを判別したいです。

        自転車が重なっているため、背景差分だけでは、判別しにくいかと考えております。
        撮影場所によりますが、各場所を区切って空間情報を抽出して、その空間にものがあるかを判別できるなら、比較的に判別しやすいかもしれません。
        素人の考えですみませんが、色々と教えて頂ければ、幸いです。

        • NegativeMind より:

          なるほど、自転車の有無を検出したいのですか。確かに背景差分は難しそうですね。
          この場合、画像認識で対処するより、安価な物理的なスイッチ、あるいは距離センサーを各スペースに設置した方が確実な気はします。(お金かかりますね…)

          リンクの画像を見てふと思ったのですが、駐輪場に止まるのが自転車限定であれば、車輪(楕円形状)を検出するのもアリかもしれません。
          利用者がルール通りに駐輪してくれると仮定すると、撮影画像上での車輪(楕円形状)の位置はおおよそ予想がつきますから、その位置にならぶ楕円の数を数えるとか。
          遮蔽の関係で上手く検出できるか保証できませんが、カメラの配置を工夫して自転車の後輪が必ず撮影できるように設置してみれば実験ぐらいはできるかも。

          すみません、ちょっとお役に立ててないかも・・・

          ちなみに、openMVGを使って3次元復元する場合でも、各自転車が重なって写ったままの画像からは正しく形状復元できません。