本ライブラリは、カメラの撮像画像又はその座標上の点座標を レンズによる放射歪みを取り除いた上でワールド座標上での 画像または点座標に変換するためのライブラリです。
- カメラキャリブレーションとは
- 撮像画像上での座標をワールド空間上の座標へ変換するためには、 カメラ及びレンズがどのような特性を持っているか、そのカメラが 3Dワールド空間上のどこに設置されているか、という情報が必要になります。 この情報をあらかじめ物体形状が分かっている基準モデルを撮像することにより ライブラリに推定させる行為がカメラキャリブレーションです。
- 具体的には、カメラキャリブレーションでは カメラの内部パラメータと外部パラメータの推定を行います。 カメラ内部パラメータとはカメラとレンズの組み合わせによる特性を表現する数値で、 焦点距離、スキュー、画素の縦横比、撮像デバイスにおける光軸の中心、レンズ歪みなどを表現します。 カメラ外部パラメータとはカメラとワールド座標の位置関係を表現する数値で、 ワールド座標系に対する回転・並進などを表現します。 これらのパラメータを推定するため、カメラキャリブレーションでは、 物理的な座標の手がかりになる物体をキャリブレーションを行いたいカメラで撮像し、 その画像座標上の点と物体の座標系上の点の多数の対応関係を利用します。
- 当ライブラリの手法について
- 当2次元カメラキャリブレーションライブラリでは、立体状に図形を配置した校正リグ等は用いず、 2次元の校正リグ、平面上に図形を印刷したキャリブレーションテンプレートを用います。 キャリブレーションテンプレート上の特徴点座標をあらかじめライブラリに入力しておき、 キャリブレーションを行いたい一つのカメラに対する角度・位置を変えながら複数回の撮像を行って、 その画像から取得した特徴点の位置との対応関係を入力することでカメラ内部パラメータの算出を行います。 なお、本ライブラリでは Microsoftの米国特許技術 "US Patent 6,437,823 - Method and system for calibrating digital cameras" を使用しています。
- 当ライブラリ利用の手順
- 当ライブラリは下記のような手順で使用されることを想定しています。
- 基準モデル点列を用意し fnFIE_calib_open() でキャリブレーションデータオブジェクトを作成します。
- 様々な姿勢でモデルを撮像し fnFIE_calib_add_data() で追加します。
- fnFIE_calib_calc_intrinsic_parameters() でカメラ内部パラメータと放射歪み係数を計算します。
- fnFIE_calib_calc_extrinsic_parameters() でカメラ外部パラメータを計算します。
- 計算した結果を利用して各種の座標変換を行います。
ライブラリ利用の手順
- 座標変換
- 当ライブラリを用いると以下のような座標変換が可能になります。
上記の表において
とは、 各パラメータ行列(またはその逆行列)を fnFIE_geotrans_perspective_point(), fnFIE_geotrans_perspective_npoints(), fnFIE_geotrans_perspective() 等に用いて座標変換することを示しています。
※ 説明をわかりやすくするために単位をmmと記載していますが、 実際には任意の単位を使用することが出来ます。
- パラメータ行列の算出法
- 内部パラメータ行列
が必用な場合は fnFIE_calib_calc_intrinsic_parameters() によりカメラ内部パラメータ F_CAMERA_PARAM を算出した後、その構造体のメンバ値を用いて 次式により生成してください。
- 外部パラメータ行列
が必用な場合には fnFIE_calib_calc_extrinsic_parameters() で算出されるカメラ外部パラメータ
と
の成分
を用いて、次式により生成してください。
- 混合パラメータ行列
は、 fnFIE_calib_calc_extrinsic_parameters() にて算出できます。
- 参考文献:
- "A Flexible New Technique for Camera Calibration", Zhengyou Zhang, Microsoft Research, 1998