サイトアイコン NegativeMindException

Structure from Motion (多視点画像からの3次元形状復元)

3DCGをガッツリ学んでたもんで、「2次元の画像処理よりも3次元のCGの方が抽象度が高くて美しい」という感覚があって、コンピュータビジョンに対して「お前らとは次元が違うんだよ」とか思ってたんだけど、最近のコンピュータビジョンは結構3次元なのよね。

Structure from Motion (多視点画像からの3次元形状復元)とは?

Structure from Motion(SfM)は、視点の違う複数枚の画像から被写体の3次元形状、及びカメラの相対位置を復元するというジャンル。理論上、5視点あればカメラ位置は推定できるらしい。最近では、ネット上の画像を使って大規模に街の形状を復元する研究とかもある。
CG分野から見れば、これはモデリングのプロセスで、広い意味では現実物体の3次元スキャン手法と言えるかも。
SSII2013のチュートリアルセッション「多視点画像からの3次元復元 ~基本原理から大規模復元まで~」で知りました。


この手法の特性

この手法は複数画像間の対応を求めるために局所特徴量を使うので、被写体にはそれなりに模様とかパターンが分布していないと上手くいかない。当然、光沢のある被写体は対応が上手く取れないので形状が復元できない。よくある例だと、ぬいぐるみみたいにふさふさして光沢がないオブジェクトは上手くいく。
画像間の対応を求めるのはパノラマ画像の合成と似た感じ。文献によると、対応点を求めるには視差が15度以下であることが望ましいらしい。

手軽に試すなら

フリーのツールやオープンソースのライブラリもいくつかあり、Youtubeでもいっぱい例が見つかる。
こちらは有名なフリーツールのVisualSFM

参考資料

処理の中身を詳しく知りたいなら、↓こちらの書籍の第4章 Exploring Structure from Motion Using OpenCVが無料で公開されている。



ソースコードはGitHubにある。これをビルドするには、OpenCVとは別にPoint Cloud Library(PCL)Simple Sparse Bundle Adjustment (SSBA)が必要。

参考記事:【新書情報】Mastering Opencv with Practical Computer Vision (洋書) - 実践的なCompute Vision応用のOpenCVによる習得を目指す本


スポンサーリンク

日本語で読める参考書籍

3次元復元系の日本語解説本ならこちら↓



コンピュータビジョン勉強会@関東の第28回はこの書籍の輪読会だった。

第28回 コンピュータビジョン勉強会@関東

2015/03/28 CV勉強会@関東 「複数画像からの三次元復元手法」

2015/03/28 CV勉強会@関東「複数画像からの三次元復元手法」ツイートまとめ

1.はじめに – 2.1 画像収集


2.2 カメラパラメータ推定 – 2.2.1 Structure-from-Motion


2.3 密な形状復元 – 2.3.1 最先端のMVS研究例


3. 多眼ステレオ – 3.1 二枚の画像からのphoto-consistency


3.1 複数枚の画像からのphoto-consistency – 3.2 デプスマップ復元


3.3 デプスマップからのメッシュ復元 – 4 むすび


その他参考記事:

画像から3次元形状を復元!OpenMVGでSfMを試してみた
VisualSfMの使い方 その1 -最も単純な使い方-
VisualSfMの使い方 その2 -時系列画像からの復元-
VisualSfMの使い方 その3 -既知のカメラパラメータを用いた復元-
VisualSfMの使い方 その4 -対応点リストの読み込み-
VisualSfMの使い方 その5 -三次元点の追加-

2015/01/17追記:
上記とは別にOpenCVを使った実装例を見つけた。
Structure from Motion and 3D reconstruction on the easy in OpenCV 2.3+ [w/ code]
ソースコードはこちら↓
Toy Structure From Motion Library using OpenCV


スポンサーリンク

関連記事

  • OpenCVの超解像(SuperResolution)モジュールを試す
  • Digital Emily Project:人間の顔をそっくりそのままCGで復元する
  • ROMOハッカソンに行ってきた
  • KelpNet:C#で使える可読性重視のディープラーニングライブラリ
  • Facebookの顔認証技術『DeepFace』
  • ガメラ生誕50周年
  • ラクガキの立体化 反省
  • OpenCVでカメラ画像から自己位置認識 (Visual Odometry)
  • 疑似3D写真が撮れるiPhoneアプリ『Seene』がアップデートでついにフル3Dモデルが撮影できる...
  • ZBrushでアヴァン・ガメラを作ってみる 下アゴの付け根を修正
  • トランスフォーマーロストエイジのメイキング
  • ZBrushでアヴァン・ガメラを作ってみる パーツ分割
  • CGALDotNet:計算幾何学ライブラリ CGALのC#ラッパー
  • 映画から想像するVR・AR時代のGUIデザイン
  • UnrealCV:コンピュータビジョン研究のためのUnreal Engineプラグイン
  • Google App EngineでWordPress
  • Vancouver Film Schoolのデモリール
  • 機械学習で遊ぶ
  • 読みやすくて高速なディープラーニングのフレームワーク『Caffe』
  • 映画『ミュータント・タートルズ』を観てきた
  • UnrealCLR:Unreal Engineで.NET Coreを利用できるプラグイン
  • スクラッチで既存のキャラクターを立体化したい
  • 統計的な顔モデル
  • 中学3年生が制作した短編映像作品『2045』
  • COLMAP:オープンソースのSfM・MVSツール
  • ZBrushでUndo Historyを動画に書き出す
  • PyDataTokyo主催のDeep Learning勉強会
  • PGGAN:段階的に解像度を上げて学習を進めるGAN
  • ZBrushでアヴァン・ガメラを作ってみる おでこ(?)のバランス調整
  • Regard3D:オープンソースのStructure from Motionツール
  • Point Cloud Consortiumのセミナー「3D点群の未来」に行ってきたよ
  • 書籍『OpenCV 3 プログラミングブック』を購入
  • オープンソースのテクスチャマッピングシステム『Ptex』
  • 定数
  • 立体視を試してみた
  • OpenGVのライブラリ構成
  • Google Colaboratoryで遊ぶ準備
  • CGレンダラ研究開発のためのフレームワーク『Lightmetrica (ライトメトリカ)』
  • OpenCV3.3.0でsfmモジュールのビルドに成功!
  • TeleSculptor:空撮動画からPhotogrammetryするツール
  • Iridescence:プロトタイピング向け軽量3D可視化ライブラリ
  • ZBrushで基本となるブラシ
  • モバイルバージョンを終了