0

Camera Calibration Toolbox for MatLab pt.2

続き.今度はステレオカメラのキャリブレーション.

前提:

  • ステレオカメラで同じシーンを撮影している.
  • 2台のカメラともcalib_guiで内部・外部パラメータ共にキャリブレーション済み.
  1. mainの実行
    >> stereo_gui
  2. 各カメラの内部・外部パラメータのロード
    >> Load left and right calibration files
  3. ステレオのキャリブレーション
    >> Run stereo calibration
  4. 結果の保存
    >> Save stereo calib results

こっからが大事.
stereo_triangulation.mを使うと,点の3次元座標を計算できる.
各画像の格子点情報は以下の変数として格納されている(n = 画像の数).
x_left_1, x_left_2, x_left_3, …, x_left_n
x_right_1, x_right_2, x_right_3, …, x_right_n
サイズが2×格子点の数のdouble型の行列で,以下のようにデータが格納されている.
|x1 x2 x3 … xm|
| | (m = 格子点の数)
|y1 y2 y3 … ym|

stereo_triangulationを実行するためには,各カメラの対応点群(e.g., x_left_1, x_right_1)とカメラ間の外部パラメータ(om and T)及び各カメラの内部パラメータが必要.
各カメラ画像中の点の3次元座標をXc_1_left,Xc_1_rightに格納するとすると,以下のようにして求める.
[Xc_1_left,Xc_1_right] = stereo_triangulation(x_left_1, x_right_1, om, T, fc_left, cc_left, kc_left, alpha_c_left, fc_right, cc_right, kc_right, alpha_c_right);
返戻値として返ってくるXc_1_left,Xc_1_rightは以下のようなデータ.
|x1 x2 x3 … xl|
|y1 y2 y3 … yl| (l = 対応点の数)
|z1 z2 z3 … zl|
ちゃんと読みきれてないが,データを見る限りでは,この3次元座標は各カメラ座標系における3次元座標に見える.

Advertisements
0

Camera Calibration Toolbox for MatLab

キャリブレーション用Toolboxのメモ
ここからダウンロード.

  1. main関数の実行
    >> calib_gui
    選択肢が以下の二つ.3000×2000画素x9枚の画像で実行したらエラーになったので,後者を選択した.
    • Standard(全ての画像をメモリに格納)
    • Memory efficient(画像を一つずつ読み込む
  2. 画像シーケンスの選択
    >> Image names
  3. 格子点の検出
    >> Extract grid corners
    常に同じ場所が原点になるように,クリックする点の順番に注意.
    画像は拡大しないと期待するほどの精度は出なさそう.
  4. キャリブレーション
    >> Calibration
  5. 外部パラメータの確認
    カメラ固定・チェスボード移動orカメラ移動・チェスボード固定での3次元的な位置関係をプロットしてくれる.
    >> Show Extrinsic
  6. 格子点の再計算
    中身は知らないけど,計算したパラメータか何かから,格子点をもう一度計算.
    >> Recomp. corners
  7. 結果の保存
    >> Save
  8. 結果の読み込み
    >> Load

こんな感じ.
格子点を指定する処理の時に,実際の格子点のサイズを聞かれる(m単位)ので,あらかじめ計測しておいた方が吉.

大事そうなデータについてのメモ
格子点の座標は以下のように保存される.
| x1 x2 x3 … xn |
| |
| y1 y2 y3 … yn |

0

RAW画像の抽出

一眼レフで撮影した画像からRAW画像(未処理)を抽出したい.
dcrawというものを使えばRAW画像を抽出できると教えてもらった.
シンプルなCのコードで使いやすいよ-と宣伝されているが,こちらのexe形式に変換された方を選択.

色々選択できるみたいだけど,今回はキャノンの20Dで撮影した画像(CR2形式)をシンプルにRAW画像として抽出したいだけなので,以下のようなコマンドに.
dcrawMS -6 -T -W -h -g 1 1 -t 5 Canon.CR2
-6 16bit画像として出力
-T tiff形式で出力
-W 画像の明るさ補正をしないで出力
-h 画像サイズを半分にして出力
-g 1 1 ガンマ変換のパラメータを(1, 1)で出力
-t 5 画像を回転させて出力

で,この変換をフォルダ内の全てのCR2に適用するバッチファイルは,以下のような感じ.
for %%i in (*.CR2) do (
dcrawMS -6 -T -W -h -g 1 1 -t 5 %%i
)

0

Bracketing

異なるカメラパラメータで対象シーンを撮影する事.一般的には,exposure bracketingを指す.

カメラで対象シーンを撮影する時に,完璧に理想的な画像を得られる事はあまり無い.露光時間や焦点距離によって,部分的にover (under) exposureな画像になったり,焦点が合っていない領域を含んだ画像になってしまう.
Bracketingによって,異なるカメラパラメータ(露光時間,焦点距離)で撮影された画像群をマージする事で,一枚の画像より良い(ダイナミックレンジが大きくとれている,合焦点領域が広い).

一般的には,exposure bracketingをする事で,HDR (High Dynamic Range)画像を取得する事を指し示す.