複数カメラキャリブレーション (multi camera calibration) |
2018-10-09 - 2018-10-10 (update) |
|
|
複数台のカメラを利用することで実現できるアプリケーションがいくつかあります.代表例として,自由視点映像生成や物体の三次元再構成などが挙げられます.これらのアプリケーションのためには,カメラのキャリブレーションも正確に計算する必要があります.
*複数台のカメラをキャリブレーションする
1台,2台のカメラのキャリブレーションを行いたい場合は,OpenCVで関数が提供されています.
ただ,3台以上のカメラをキャリブレーションするとなると,専用の関数はOpenCVにはなかったと思います.
また,撮影するキャリブレーション用の物体(ボードなど)も工夫する必要があります.
[img:91tr]
{{small:図1 ステレオカメラと複数台のカメラ 緑色の点群はキャリブレーションボードの特徴点}}
ここでは,複数台のカメラのキャリブレーションを実行したいときのポイントを解説します.
**全体最適化
個々のカメラの内部パラメータについては,各カメラで撮影したキャリブレーションボードの画像を利用することで計算できます.一方,カメラの外部パラメータ(カメラ間の相対的な位置姿勢)については,全体のカメラ間の位置姿勢の整合性を考えた計算が必要になります.
まず不適切なキャリブレーションの方法から先に説明します.例えば図1のように10台のカメラを円形に配置したとします.そして,1台目と2台目,2台目と3台目,...9台目と10台目 というようにペアを作って,各ペアの相対的な位置姿勢を推定したとします.そうすれば,任意のカメラの位置姿勢,例えば1台目と10台目の位置姿勢も,各ペアの位置姿勢を掛け合わせれば計算できます.
しかし,各ペアから推定した位置姿勢にはノイズが乗ります.そうなると,それを掛け合わせて計算した1台目と10台目の位置姿勢には他と比較して大きなノイズが乗ることになります.
「1台目と2台目の位置姿勢に比べ,1台目と10台目の位置姿勢は精度が悪い」 となるといろいろと都合が悪い場合が出てくると思います.
そこで登場するのが全体最適化です.カメラの位置姿勢や特徴点に注目する問題設定ではバンドル調整と呼ぶ場合もあります.基本原理としては,キャリブレーション用の物体の位置姿勢,各カメラの位置姿勢(或いはさらに内部パラメータ),を変数として物体上の特徴を画像上に投影し,それが画像上で検出した特徴点となるべく一致するように全体の変数を推定します.
バンドル調整について詳しく学習したい場合,[1]や[2]の文献が参考になると思います.
{{small:[1]金谷健一, 菅谷保之, 金澤靖, "3次元コンピュータビジョン計算ハンドブック", 森北出版, 2016}}
{{small:[link:http://www.morikita.co.jp/books/book/3016] }}
{{small:[2]岩元祐輝, 菅谷保之, 金谷健一, "3次元復元のためのバンドル調整の実装と評価", 情報処理学会研究報告, 2011}}
{{small:[link:http://www.iim.cs.tut.ac.jp/~kanatani/papers/budjust.pdf] }}
**キャリブレーション用の物体
1台,2台のカメラであれば,平面のボードを利用する方法が一般的です.そしてその模様は市松模様や円模様を使う場合が多いと思います.しかし,複数台のカメラを利用する場合,それでは都合が悪い場合があります.
***模様について
一般的によく利用するキャリブレーションボードの模様は回転対称のものが多いです.回転対称ですので,ボードを回転させてもカメラには同じように映ります.ここで,複数台のカメラで,様々な向きでボードを観察しているような場合を考えると,カメラによってボードの回転を間違えてしまう場合がありそうです.そのため,キャリブレーションボード上の特徴点を正しく認識できるような工夫を加える必要があります.
例えば回転対称の模様の代わりに,[link:ARマーカー]などを利用するのが,簡単だと思います.
[img:wmp7]
{{small:図2 回転対称の模様とARマーカー}}
***平面と立体
これは必須ではありませんが,例えば立体形状の物体を利用する方法があります.例えばサイコロのように複数の面を持ち,各面にキャリブレーション用の模様を張り付けます.平面であれば前方からしか特徴点を観察できませんが,複数の面があれば反対側からも特徴点を観察できます.
*サンプルコード (C++)
ライブラリ:[link:simplesp]
サンプルコード:simplesp/sample/gl/multicam
シミュレーションで設定したマーカーの検出点を入力として,複数台のカメラの外部パラメータを推定します.
なお,カメラは円形に配置した条件をシミュレーションで設定してます.
>> ご意見・ご質問など お気軽にご連絡ください.info