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
関連記事
ガメラ生誕50周年
ラクガキの立体化 3Dプリント注文
Unityで学ぶC#
ZBrushでゴジラ2001を作ってみる 身体のシルエット出...
Python拡張モジュールのWindows用インストーラー配...
fSpy:1枚の写真からカメラパラメーターを割り出すツール
OpenCVで動画の手ぶれ補正
Maya LTのQuick Rigを試す
Paul Debevec
疑似3D写真が撮れるiPhoneアプリ『Seene』がアップ...
Super Resolution:OpenCVの超解像処理モ...
OpenGVの用語
世界一下品なクマと世界一紳士なクマ
SIGGRAPH ASIA 2009で学生ボランティア募集し...
OpenCVの超解像(SuperResolution)モジュ...
コンピュータビジョンの技術マップ
色んな三面図があるサイト
Blenderでよく使うaddon
ZBrushでアヴァン・ガメラを作ってみる 甲羅の修正・脚の...
HD画質の無駄遣い その2
Unityで画面タッチ・ジェスチャ入力を扱う無料Asset『...
Unityをレンダラとして活用する
オープンソースのネットワーク可視化ソフトウェアプラットフォー...
Amazon Web ServicesでWordPress
PSPNet (Pyramid Scene Parsing ...
オープンソースのロボットアプリケーションフレームワーク『RO...
マルコフ連鎖モンテカルロ法
Unreal Engine 5の情報が公開された!
顔モデリングのチュートリアル
オープンソースの顔認識フレームワーク『OpenBR』
Dlib:C++の機械学習ライブラリ
Raspberry PiでIoTごっこ
3Dスキャンに基づくプロシージャルフェイシャルアニメーション
OpenGVのライブラリ構成
『ローグ・ワン/スター・ウォーズ・ストーリー』のVFXブレイ...
Mayaのプラグイン開発
ポイントクラウドコンソーシアム
素敵なパーティクル
OpenVDB:3Dボリュームデータ処理ライブラリ
写真に3Dオブジェクトを違和感無く合成する『3DPhotoM...
viser:Pythonで使える3D可視化ライブラリ
クラスの基本
コメント