2D画像からの3D情報復元について調べていたらこんなオープンソースライブラリを見つけた↓
The OpenGV library
OpenGVライブラリは、キャリブレーション済みカメラの姿勢計算に必要となる幾何学アルゴリズムを効率的に行うために設計された単一のC++のライブラリです。OpenGVは”Open Geometric Vision”の略です。
このライブラリには、絶対・相対的カメラ姿勢計算アルゴリズムの主要な古典手法や、近年の手法が含まれており、三角測量や点群による位置合わせ機能などのように、全て非線形最適化やRANSACによって拡張されています。
このライブラリは、MatLab portのように柔軟なC++インターフェイスを備えており、異なる幾何学的ビジョンアルゴリズムの比較が容易です。
このライブラリについては、以下の文献でも解説されています(検索してみてください):
- L. Kneip, P. Furgale, “OpenGV: A unified and generalized approach to real-time calibrated geometric vision”, Proc. of The IEEE International Conference on Robotics and Automation (ICRA), Hong Kong, China. May 2014.
このライブラリは、以下の研究論文に基づいて開発されています。
- L. Kneip, D. Scaramuzza, R. Siegwart, “A Novel Parametrization of the Perspective-Three-Point Problem for a Direct Computation of Absolute Camera Position and Orientation“, Proc. of The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Colorado Springs, USA. June 2011.
- L. Kneip, M. Chli, R. Siegwart, “Robust Real-Time Visual Odometry with a Single Camera and an IMU“, Proc. of The British Machine Vision Conference (BMVC), Dundee, UK. August 2011.
- T. Kazik, L. Kneip, J. Nikolic, M. Pollefeys, R. Siegwart, “Real-Time 6D Stereo Visual Odometry with Non-Overlapping Fields of View“, Proc. of The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Providence, USA. June 2012.
- L. Kneip, R. Siegwart, M. Pollefeys, “Finding the Exact Rotation Between Two Images Independently of the Translation“, Proc. of The European Conference on Computer Vision (ECCV), Florence, Italy. October 2012.
- L. Kneip, P. Furgale, R. Siegwart, “Using Multi-Camera Systems in Robotics: Efficient Solutions to the NPnP Problem“, Proc. of The IEEE International Conference on Robotics and Automation (ICRA), Karlsruhe, Germany. May 2013.
- L. Kneip, S. Lynen, “Direct Optimization of Frame-to-Frame Rotation“, Proc. of The International Conference on Computer Vision (ICCV), Sydney, Australia. December 2013.
- L. Kneip, H. Li, “Efficient Computation of Relative Pose for Multi-Camera Systems“, In Proc. of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Columbus, USA. June 2014.
- L. Kneip, H. Li, Y. Seo, “UPnP: An optimal O(n) solution to the absolute pose problem with universal applicability“, In Proc. of The European Conference on Computer Vision (ECCV), Zurich, Switzerland. September 2014.
特定の問題でOpenGVを使用する際は、上記論文ならびにOpenGVの文献を引用してください。
スポンサーリンク
ソースコードはGitHubにある。→laurentkneip/opengv
同梱のtestプログラムがそのまま使い方のサンプルとして利用できる。
こちらのブログ記事でOpenGVの存在を知った↓
http://moitkfm.blogspot.fi/2014/08/opengv.html
OpenCVでもARのようなやり方でカメラの2次元画像から3次元位置・姿勢を求めることはできるんだけど、このOpenGVのアドバンテージは、複数のカメラ間の位置関係を容易に扱えるようにできている点。
この方のブログは、サンプルコードを載せているのでとても勉強になる。
以下はOpenCVを使った3次元復元系のサンプルが載っている記事↓
http://moitkfm.blogspot.jp/2014/06/2.html
http://moitkfm.blogspot.fi/2014/06/2d-3d.html
http://moitkfm.blogspot.fi/2014/06/5.html
追記:
Facebookで開発しているVR酔い軽減のためのブレ補正技術には、OpenGVに実装されているNisterの5点アルゴリズムをRANSACで解くモジュールが使われているらしい↓
https://code.facebook.com/posts/697469023742261/360-video-stabilization-a-new-algorithm-for-smoother-360-video-viewing/
触発されて公式ドキュメントを訳し始めた↓
以前購入した「コンピュータビジョン最先端ガイド5」は、3次元復元の全体像を理解するには最適な粒度の情報が載っているんだけど、それだけで実装に落とし込めるほどオイラは知識が無かったので非常にありがたい。
こちらの本では第2章が丸々複数画像からの三次元復元の解説になっている↓
追記:
OpenCVでARアプリを実装するなら、こちらの書籍の第6章のサンプルが参考になる(というかそのまんま)
本書で使われているソースコードはこちらから。chapter6のプロジェクトをビルドすれば試せます。
過去記事
スポンサーリンク