1 カメラキャリブレーション

カメラとは,3次元空間内の点を,2次元画像上の点に対応させる装置である.
カメラ座標系で(X, Y, Z)の点と,画像上の点(x, y)との対応は,
次のように記述される.

s(x, y, 1)^T= proj_matrix(X Y Z 1)^T

ここでproj_matrixは,カメラの画角や光軸の位置などの情報を含んでおり,
内部パラメータ行列と呼ばれる.内部というのは,レンズを含んだカメラの
筐体内の諸元を含んでいるからである.
一方で外部パラメータはカメラの位置や姿勢を表しており,両方を合わせて
カメラパラメータと呼ばれることが多い.
またカメラパラメータで表現できない情報は,ピンホールカメラモデルでは考慮
されないものである.レンズの絞りやそれに伴って生じる被写界深度,
レンズ歪みといった非線形の画像変換がそれにあたる.

画像上で抽出できたマーカの情報から,マーカの3次元位置姿勢を求めるためには,
カメラの内部パラメータ行列が必要である.
ここでは,内部パラメータを求める方法について解説する.

カメラパラメータを得るための方法の一つに,平面マーカを用いたZhangの方法が
あり,OpenCVでも実装されている.
本稿で紹介するGML C++ Camera Calibration Toolboxは,Zhangの方法をグラフィカルに
実行可能としたものであり,カメラキャリブレーションを効率的に行うことが
できる.

1.1 方法

キャリブレーションの基本は,形状が既知のマーカを,姿勢を変えながら
カメラにより観測することで,マーカ上の各点と画像上の各点の対応を
知り,内部パラメータ(姿勢によらない)と外部パラメータ(姿勢による)に
関する未知数からなる連立方程式を解くことである.連立方程式の数が
未知数よりも多いため,一般的には最適化計算により未知数の値が決定される.

1.2 GML Camera Calibration Toolbox

カメラキャリブレーションを手軽に行うためのツールの一つが,
Moscow State University (モスクワ大学)
Department of Computational Mathematics and Cyberneticsの
Graphics and Media Labで作成された
GML C++ Camera Calibration Toolbox である.
http://graphics.cs.msu.ru/en/node/909

各学生の環境ではインストーラが実行できないため,
以下からzipファイルをダウンロードして,適当なフォルダ(Z:\など)に展開する.

GML Camera Calibration

1.3 マーカを印刷する

キャリブレーション用のマーカが必要である.
A4横,格子数が横8縦5,格子サイズ30mmの平面マーカを作成した.
本日は私の手元に2枚ある.これらを共有して使用する.

1.4 マーカが映った画像を複数枚取得する

次に,カメラに対して,様々な姿勢でチェッカーボードパターンを提示した
画像群が必要である.大きさ,位置,角度を様々に変更して画像を取得する.
こちらに,スペースキーを押すと,現在の画像がimura0000.jpg, image0001.jpg, …
と連番で保存されていくプログラムを置いておくので,適宜ビルドして利用する.

OnlyCapture.zip
なるべく位置と姿勢がまんべんなく計測されるようにする.

画像群の例を以下に示す.

GML00

1.5 GML Camera Calibration を実行する

GML Camera Calibration.exe を実行する.

File > New Project… あるいはメニュー左端のボタンで新規プロジェクトを開始.

GML01

  • テンプレート数は1.
  • テンプレートとはマーカーを印刷したシートのこと.
  • テンプレート1の設定をする.
  • Object Size は 5 8
  • Square Size は 30.0

GML02GML03

次に撮影した画像ファイルを追加.
Object Detection > Add Image… あるいはメニュー左から4番目のボタン.

GML04
画像ファイルを全て選択して,「開く」をクリック.

GML05

チェッカーパターンの交点を検出.
Object Detection > Detect All あるいは
メニュー右から5番目のボタンをクリックすると,全登録画像に対して
検出処理が実行される.

GML06

画像で結果を確認する.

GML07
検出できている画像がある程度の枚数あれば,問題無い.
うまく検出できていない画像が多数の場合は,

  • チェッカーパターンの周囲に余白があるか.
  • チェッカーパターンの黒の部分が鏡面反射により白く見えていないか.
  • チェッカーパターンの一部を手で隠していないか.
  • チェッカーパターンにピントが合っているか.

を確認する.

内部パラメータ(および各画像の撮像時の外部パラメータ)を求める.
Calibraction > Calibrate あるいはCalibration > Calibrate

GML08

キャリブレーション結果が表示される.

GML09

パラメータの解説:

  • Focal length 焦点距離 単位はpixel
  • Principal point 主点の位置,おおむね画像の中心になるはず 単位はピクセル
  • The camera matrix カメラの内部パラメータ.

Reproject タブを開くと,各画像について,再投影結果(マーカ上のチェッカーの角の
座標を,求められたカメラパラメータで画像に再投影した結果を見ることができる.

GML10
赤色の点が交点から大きく外れていなければ,カメラパラメータの推定はおおむね
正しいと考えてよい.

また Point Density タブを開くと,パラメータの算出に用いられた点の分布が
表示される.画像内に偏りなく分布していることが望ましい.