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

関連記事

イタリアの自動車ブランドFiatとゴジラがコラボしたCMのメ...

中学3年生が制作した短編映像作品『2045』

Vancouver Film Schoolのデモリール

Mitsuba 2:オープンソースの物理ベースレンダラ

オープンソースの物理ベースレンダラ『Mitsuba』をMay...

C++の抽象クラス

PolyPaint

ドラマ『ファーストクラス』のモーショングラフィックス

写真から3Dメッシュの生成・編集ができる無料ツール『Auto...

Adobe Photoshop CS5の新機能

ZBrushのキャンバスにリファレンス画像を配置する

Unityからkonashiをコントロールする

konashiのサンプルコードを動かしてみた

単純に遊びに行くのはだめなのか?

ZBrushでゴジラ2001を作ってみる 身体のSubToo...

UnityでShaderの入力パラメータとして行列を渡す

ZBrushでアヴァン・ガメラを作ってみる 下アゴの付け根を...

iPhoneアプリ開発 Xcode 5のお作法

2012のメイキングまとめ(途中)

リメイク版ロボコップスーツのメイキング

AR (Augmented Reality)とDR (Dim...

Leap MotionでMaya上のオブジェクトを操作できる...

ZBrushで仮面ライダー3号を造る 仮面編 Clay Po...

PSPNet (Pyramid Scene Parsing ...

WordPressのサーバ引っ越し方法を考える

PyDataTokyo主催のDeep Learning勉強会

GAN (Generative Adversarial Ne...

FacebookがDeep learningツールの一部をオ...

ZBrushでゴジラ2001を作ってみる 身体のシルエット出...

オープンソースのネットワーク可視化ソフトウェアプラットフォー...

ZBrushでアヴァン・ガメラを作ってみる 甲羅の修正・脚の...

OpenCVの超解像(SuperResolution)モジュ...

ZBrushのTranspose Masterでポーズを付け...

Photogrammetry (写真測量法)

Windows10でPyTorchをインストールしてVSCo...

SDカードサイズのコンピューター『Intel Edison』

無料で使える人体3DCG作成ツール

Open3D:3Dデータ処理ライブラリ

UnityのTransformクラスについて調べてみた

OpenCVで動画の手ぶれ補正

昔Mayaでモデリングしたモデルをリファインしてみようか

ZBrushで仮面ライダー3号を造る 仮面編 リファレンス画...

コメント