プロジェクタのキャリブレーション手法の開発

はじめに

ARtoolkitを用いてOpenCV Camera Calibrationをプロジェクタのキャリブレーションができるように改良しました. ここでは,その使い方を説明します.

計測

まず始めに計測を行います.黄色のARマーカーパターンを紙に印刷し,平らな板に貼り付けます(パターンはzipファイルに入っています).このパターンを手に持ちプロジェクタからシアンのARマーカーパターンを板に投影しつつ撮影することでキャリブレーションを行います.板の角度を変えつつ複数枚の撮影を行います.高精度な結果を得るには40枚以上の計測結果があることが望ましいです.画像を保存する際の拡張子はbmpで保存してください.

計測に関して

プロジェクタのキャリブレーションのためには,カメラとプロジェクタの配置は下図のようにカメラはできるだけパターンに近づけて撮影し,カメラとプロジェクタの距離は短くして計測をして下さい.(内部パラメータ推定の精度を上げるため)

キャリブレーション

exeファイルの実行

ARCalibGUI.exe を実行してください. コマンドプロンプトが起動し,しばらくした後にAR Calibrationのウィンドウが表示されます(起動まで数分間かかることがあります).

ボタンの名前

プロジェクトの作成

"File -> New Project" または "New Project"ボタンを押しプロジェクトを作成します. その際にプロジェクト用に新たなフォルダを作成することを推奨します.

キャプチャ画像の読み込み & 色分離

プロジェクトの作成後,"Open images"ボタンを押し,キャリブレーション用に撮影した画像が保存されているフォルダを選択します. その後,"isolation"ボタンを押しカメラプロジェクタキャリブレーション用の画像を色分離によって生成します.

ARマーカーの検出

"detect Cam"を押し,カメラキャリブレーション用の画像に対してARマーカー検出を行います. その際,下図のようなダイアログが出てきます. それぞれのパラメータの意味は以下のとおりです.
  • Projection image : プロジェクタで投影した画像ファイル
  • AR thresh : マーカー検出の信頼度に関する閾値
  • thresh first : 画像の2値化処理のための閾値の初期値
  • thresh interval : 画像の2値化処理における閾値のステップサイズ
  • thresh repeat number : 2値化処理の回数
  • Calib mode : プロジェクタ用かカメラ用か
  • 2D feature points : 特徴点として使用するのが、各ARマーカーの中心点か、4隅の点か
  • Adaptive thresh : Adaptive2値化検出を行うかどうか
  • Board rotation : 計測時のキャリブレーションボードが180°反転しているかどうか
  • Minimum marker number : 許容される最小のマーカー数
  • MARK SIZE : 各マーカーのサイズ(下図参照)
  • MARK SPACE X : x軸方向の各マーカー間の距離(下図参照)
  • MARK SPACE Y : y軸方向の各マーカー間の距離(下図参照)
それぞれのパラメータを設定後"Start to detect"ボタンを押します.(基本的にはデフォルト値で問題ありません.) マーカー検出終了後,検出されたマーカーのIDとそれぞれの信頼度が画像上に表示されます.
カメラキャリブレーション用の画像に対するARマーカー検出の終了後,プロジェクタキャリブレーション用の画像に対するARマーカー検出を行います.("detect Proj"ボタンを押す.)

Self Calibration

"Cam self calib"を押すことでダイアログが出てきます. 歪みパラメータの推定も行う場合は"ON"ボタンをクリックし"Start selfcalib"を押します. self calibration終了後,各特徴点の再投影画像が表示されます. 続いて"Proj self calib"ボタンを押します. プロジェクタに関しては歪みがないと仮定しているため,ここではダイアログは表示されません. (実際にはこのステップは次のステップ内でも行われるため必要ではないのですが,検出の確認のために行っています.)

歪み除去

前のステップにおいて歪みパラメータを推定した場合は"Undistort points"ボタンを押すことで検出された特徴点のundistortが行われます.

Stereo calibration

"Stereo calib"ボタンを押すことでかめら,プロジェクタそれぞれの内部パラメータおよび外部パラメータの推定が行われます.

OpenCV形式からI3D形式への変換

"convert openCV to I3D"ボタンを押すことでこれまで推定されたパラメータをI3D形式に変換することができます. 以下のファイルが'param'フォルダに出力されます.
  • i3d_camparam.txt : カメラの内部パラメータ
  • i3d_projparam.txt : プロジェクタの内部パラメータ
  • projtocam.txt : カメラ-プロジェクタ間の外部パラメータ
内部パラメータファイルの中身は以下の通りです.
<焦点距離> <歪みパラメータ> <ピクセルサイズ(x)> <ピクセルサイズ(y)> <画像中心(x)> <画像中心(y)> <解像度(x)> <解像度(y)>
外部パラメータファイルの中身は以下の通りです.
<並行移動(x)> <並行移動(y)> <並行移動(z)> <回転(x)> <回転(y)> <回転(z)>
なお,回転はオイラー角で表現されています.
このとき,I3D用のプロジェクトディレクトリがARCalibのプロジェクトファイルの親ディレクトリ内に生成されます. I3Dプロジェクトを使用する際はグレーコード画像等の画像ファイルのパスを修正してご使用ください.

リリースノート&ダウンロード

AR Calib by Python and OpenCV and AR toolkit: version 0.3.11 2020.09.02
  • [ Feature ] OpenCV のレンズ歪の問題を Ceres solverで回避
  • AR Calib by Python and OpenCV and AR toolkit: version 0.3.9 2020.03.07
  • [ Feature ] detectAR時のconfigurationで"thresh repeat number" を "thresh end" に変更
  • [ Feature ] New Project, Open Project, Open Imagesのボタンを押した時、前回使用したプロジェクトファイルがあるディレクトリを開くように修正
  • [ Feature ] カメラとプロジェクタで異なるパターン画像を指定できるように修正
  • [ Support ] ファイル表示窓での外部プレビュー表示機能とプレビュー窓での削除機能の追加
  • [ Support ] Toolタブ->Open in Explorerボタン でエクスプローラで開く機能の追加
  • [ Support ] Toolタブ->Open Manualボタン でマニュアルをブラウザで開く機能の追加
  • AR Calib by Python and OpenCV and AR toolkit: version 0.3.8 2020.02.25
  • [ Feature ] Stereo Calibrationの際のDist param推定の廃止:Cam-Projシステムにおけるステレオキャリブレーションについて,プロジェクタ側のDistortion parameterを常に0とするように修正
  • AR Calib by Python and OpenCV and AR toolkit: version 0.3.7.2 2020.02.01
  • [ Bug fix ] AR検出での閾値が低いときに落ちてしまうバグの解消
  • [ Support ] バージョンの表示:各ボタンを押したときに呼び出されるexeでのバージョンが表示されるようメッセージを追加
  • [ Feature ] Reprojectionの結果修正:Capture画像の解像度が高いときにCalibration後のReprojectionの画像の特徴点のマークが小さくなる問題の修正
  • AR Calib by Python and OpenCV and AR toolkit: version 0.3.7.1 2020.01.30
  • [ Support ] AR検出の許容解像度拡大:ARマーカー検出可能な画像サイズを変更(2048x2048 ==> 10000x10000)
  • [ Feature ] 検出結果の画像修正:ARマーカーの検出結果を可視化する際,誤検出があった場合に確認しやすいように文字の色を変更.
  • AR Calib by Python and OpenCV and AR toolkit: version 0.3.7 2020.01.29
  • [ Support ] Capture画像のUndistort:Undistortボタンを押した際にCapture画像のUndistort前後を表示する機能の追加
  • [ Support ] I3DプロジェクトのExport:キャリブデータをI3D形式に変換する際のI3DプロジェクトのExport時に自分で名前を決定できる機能を追加
  • [ Support ] Calibrationの精度のしきい値変更:Self Calibration及びStereo Calibrationの際の最適化のイテレーション回数を変更できるように修正
  • AR Calib by Python and OpenCV and AR toolkit: version 0.3.6 2020.01.20
  • 軽微なバグ修正.
  • AR Calib by Python and OpenCV and AR toolkit: version 0.3.4 2020.01.17
  • ログファイル出力のサポート
  • AR Calib by Python and OpenCV and AR toolkit: version 0.3.2 2020.01.16
  • Bug fixed.
  • パターン画像を追加
  • I3Dプロジェクトファイル生成のサポート
  • AR Calib by Python and OpenCV and AR toolkit: version 0.2 2019.11.05
  • exe化
  • 画像表示速度の改善
  • パターン画像を参照するボタンの追加
  • AR Calib by Python and OpenCV and AR toolkit: version 0.1 2019.9.23

    テスト用サンプルデータ: 2017/12/01 撮影

    FAQ

    Q. キャリブレーションの結果のパラメータはどこに出ますか?
    A. キャリブレーションの際に作成したプロジェクトのディレクトリ内にある"cam"ディレクトリと"proj"ディレクトリの内部にそれぞれある"param"ディレクトリに出力されます.
    またI3D用のパラメータはプロジェクトのディレクトリ直下の"param"ディレクトリに出力されます.
    その他,お問い合わせはこちらから

    Publications
    Kawasaki Laboratory