MeshLab
FMS
VisualFMS
123Dcatch
Photogrammetry

画像から3Dモデル生成(Photogrammetry)に関する調査のまとめ

やりたいこと

  • 二次元画像複数枚から3次元モデルに変換したい。
  • 開発停止と有料化してしまった123DCatchのことが忘れられない。
  • どういう技術が使われてるのか知りたい。
  • できれば無料でやりたい。

検索ワード

  • SFM (Structure From Motion) 多視点画像からの3次元形状復元
  • PCL (Point Cloud Library) 点群データ処理ライブラリ
  • MVS (Multi-View Stereo) 多眼ステレオ

などなど

お手軽にアプリで試したい

Trino

http://www.trnio.com/

iOSアプリがあって、ナビにしたがってやればお手軽に3Dモデルを作ってくれる。
お手軽な分、精度とか機能は低め。

isSeez3D

https://itseez3d.com/
iPad限定のアプリ。 試せてないけど便利そう。

Artec3D iPhone 3D Scanner

https://www.iphone3dscanner.com/
まだ公開されてないけど、期待したい。

ReCap (有料)

https://www.autodesk.co.jp/products/recap/overview

Autodeskが提供する有料(購読)アプリ
ReCap Photo が123D Catchの後継となるアプリで、¥6000/月で試せるので、お金に余裕があったらこれがいちばん早い。

(Autodeskは有能なUIデザイナーを雇うべき)

Photoscan (有料

https://oakcorp.net/agisoft/
高機能なアプリ。お値段は問い合わせとなるのでハードルが高い。

Photomodeler (有料

http://www.photomodeler.com/index.html
こっちも高機能っぽい。お値段お問い合わせ。


などなど、ちょっと調べれば色々出てくる+陳腐化や開発終了も早いので、気になったらちゃんと調べてみることをおすすめします。

基礎技術とオープンソースのアプリ

3次元形状復元の基本となる技術ですが、大まかに

  1. SFM(Structure From Motion)
    1. 画像から特徴点の抽出
    2. 特徴点から3次元位置の推定アルゴリズム
    3. 点群データ(Point Cloud)への変換
  2. PointCloud(点群データ) をMesh化 (poisson surface reconstruction)
  3. テクスチャをマッピングしてExport

+MeshLabで頂点数減らしたり、いらない点を削除したりできます。

細かい解説は、記事最下部の参考リンクを参照してみて下さい。

VisualSFM

http://ccwu.me/vsfm/

複数の画像から特徴点を解析して、点群データにしてくれるアプリです。
Windowsならアプリとしてありますが、MacOS/Linuxはビルドが必要で、ハードルが高いです。

類似アプリとしてRegard3DCOLMAPなどがあります。

Regard3Dは手元のMacで試してみました。
扱いやすいのとMeshLabへの連携が取りやすい。また、設定項目もかなり細かくあるので、微調整もできるので、いろいろ試行錯誤できそうです。

諸々の計算にはかなり時間がかかるため、ハイスペックなPCで実行することをおすすめします。


ちなみに、点群データをMeshへと変換するPoisson Surface Reconstructionですが、
このポワゾン方程式アルゴリズムは他で色んな所に使われてるので、おもしろいです。

周りのランダムな点との勾配をポワゾン方程式に当てはめて計算すると、いい感じで点と点の間が埋まるらしい。

興味がある方は調べてみては?

PCL Point Cloud Library

http://pointclouds.org/

オープンソースのPoint Cloud (点群データ)を処理できるライブラリです。
プログラムのライブラリなので、プログラミング環境に組み込むことが必須です。

よりインタラクティブに、立体や平面をトラッキングしたい用途で主に使用します。
スマホアプリで平面推定したり、Kinnectなどの、DepthSensorと組み合わせて、対象物をリアルタイムにMesh化したり様々な用途に応用が効きます。

MeshLab

http://www.meshlab.net/

無料かつ点群データを扱える数少ないアプリで、クセはありますがかなり高機能です。
やりたいことを調べれば日本語の記事が結構できてきます。

機械学習系

時代は、DeepLarningなので、アルゴリズムに頼ったものより、大量のデータに基づいて推定されたモノの方が、精度いい世の中になってきています。

3D復元まわりは、3dモデルとして捉えると、精度面でお粗末になりやすい傾向になりやすく、適当に使うにはかなりクオリティ面でハードルが高い印象です。

⇣のリポジトリに3D系のDeepLearningライブラリがまとまってるので、暇な人は見てみては?
https://github.com/timzhang642/3D-Machine-Learning

DeMoN

https://lmb.informatik.uni-freiburg.de/people/ummenhof/depthmotionnet/

複眼画像から、点群を生成する。 tensorflow製

Neural 3D Mesh Renderer

https://github.com/hiroharu-kato/neural_renderer

シンプルな画像から、3Dメッシュを機械学習によって生成するプログラムです。

こういうのを見ると、知識のない人は騙されがちですが、
機械学習のデータと読み取るモノとの相性などで、精度が全然アテにならなかったりするので、注意です。
(サンプルの画像は理想的なモノを切り抜いてるので。)

日本語の解説記事

参考リンク

ChainerでDeep Learningをしない(SfMからSLAMまで)
Structure from Motion (多視点画像からの3次元形状復元)
2D→3D復元技術で使われる用語まとめ
乃木坂46メンバーを動画から三次元へ復元する
Awesome 3D reconstruction list