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が無料で公開されている。

Mastering OpenCV With Practical Computer Vision Projects: Step-by-step Tutorials to Solve Common Real-world Computer Vision Problems for Desktop or Mobile, from Augmented Reality and Number Plate Recognition

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

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


スポンサーリンク

日本語で読める参考書籍

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

コンピュータビジョン最先端ガイド5 (CVIMチュートリアルシリーズ)

コンピュータビジョン勉強会@関東の第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


スポンサーリンク

関連記事

ZBrushでアヴァン・ガメラを作ってみる モールドの彫り込み・身体の形出し
OpenMesh:オープンソースの3Dメッシュデータライブラリ
Transformers ”Reference & Bulid” Siggraph 2007
Twitter APIのPythonラッパー『python-twitter』
日本でMakersは普及するだろうか?
OpenCV 3.3.0-RCでsfmモジュールをビルド
フルCGのウルトラマン!?
PeopleSansPeople:機械学習用の人物データをUnityで生成する
Windows Server 2008にAutodesk Maya 2009をインストール
映画『シン・仮面ライダー』 メイキング情報まとめ
ガメラ生誕50周年
Kinect for Windows V2のプレオーダー開始
ZBrushで仮面ライダー3号を造る 仮面編 横顔のシルエットをリファレンスに合わせる
ZBrushで仮面ライダー3号を造る 仮面編 ZRemesher
アニゴジ関連情報
ZBrush 2018での作業環境を整える
スターウォーズ エピソードVIIの予告編
MFnMeshクラスのsplit関数
Google Colaboratoryで遊ぶ準備
Pythonの自然言語処理ライブラリ『NLTK(Natural Language Toolkit)』
Google Chromecast
OpenCVのfindEssentialMat関数を使ったサンプルを読んでみる
オープンソースの人体モデリングツール『MakeHuman』のAPI開発プロジェクトがスタート
ZBrushでゴジラ2001を作ってみる 頭の概形作り
マルコフ連鎖モンテカルロ法
ZBrushで仮面ライダー3号を造る 仮面編 Clay Polish
ニンテンドー3DSのGPU PICA200
ZBrushで仮面ライダー3号を造る 仮面編 DynaMesh
『PIXARのひみつ展』に行ってきた
書籍『開田裕治 怪獣イラストテクニック』
Open3D:3Dデータ処理ライブラリ
Maya には3 種類のシェーダSDKがある?
Qlone:スマホのカメラで3Dスキャンできるアプリ
『ゴジラ キング・オブ・モンスターズ』のVFXブレイクダウン
科学技術計算向けスクリプト言語『Julia』
動的なメモリの扱い
ZBrushで基本となるブラシ
顔モデリングのチュートリアル
iPhone x ロボットハッカソン~RomoのiPhone用SDKで目覚ましアプリを作る~
オープンソースの物理ベースGIレンダラ『appleseed』
立体視を試してみた
PGGAN:段階的に解像度を上げて学習を進めるGAN

コメント