2014年8月15日金曜日

カメラ位置・姿勢推定ライブラリOpenGV

2D-3Dの対応関係または複数画像間での2D-2Dの対応関係から、内部パラメータが既知のカメラの位置・姿勢を推定する様々なアルゴリズムが実装されているOpenGVというライブラリがある。
OpenGVには "A library for solving calibrated central and non-central geometric vision problems" とあるように、カメラの投影中心が一致していないマルチカメラシステムの位置・姿勢推定問題を解くためのアルゴリズムも実装されている。

Windows+Visual Studio 2012での利用方法

  1. ライブラリの生成
    OpenGVのサイトにインストール方法が載っているので、これに従ってソースコードのダウンロード及びコンパイルを行うと良い。具体的には、まず、GitHubからソースコードをダウンロードしてくる。次に、CMakeを使ってVisual Studio用のソリューションファイルを生成する。最後に、生成されたソリューションをビルドすると"opengv.lib"と"random_generators.lib"が生成される。
  2. プロジェクトファイルの設定
    追加のインクルードディレクトリに "/opengv/include" と "/opengv/third_party" を追加する。また、追加のライブラリディレクトリに "opengv.lib" へのパスを追加し、追加の依存ファイルとして"opengv.lib"を追加する。また、シミュレーションデータの生成などを行いたい場合は、追加のインクルードディレクトリに "/opengv/test" を追加し、追加の依存ファイルとして "random_generators.lib"を追加しておく。


各アルゴリズムには、三次元点の世界座標、画像上での観測座標、基準となるカメラ座標系から各カメラへの並進と回転(投影中心が一致している場合は並進は0ベクトルで回転行列は単位行列)を与えることでカメラ位置・姿勢を推定することができる。

ただし、画像上での観測座標は、カメラの投影中心と画像上での観測座標を結んだベクトルを正規化したBearing vectorで表されている必要がある。

以前の記事で紹介したようにOpenCVにもカメラ位置・姿勢を推定するための関数は用意されているが、Ladybugなどのマルチカメラシステムの位置・姿勢を推定したい場合には各カメラ間の位置関係を考慮して推定することのできるOpenGVを利用したほうがより高精度な推定を実現することができると思われる。

0 件のコメント:

コメントを投稿