最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

魚眼キャリブレーションの基礎

カメラのキャリブレーションは、カメラの外部パラメーターと内部パラメーターを計算するプロセスです。カメラのキャリブレーションを行うと、イメージ情報を使用して 2 次元イメージから 3 次元情報を復元できます。また、魚眼カメラで撮影したイメージの歪みを補正できます。

魚眼カメラはオドメトリで、同時位置推定とマッピング (SLAM) の問題を視覚的に解決するために使用されます。360 度の視野 (FOV) およびスティッチング アルゴリズムを取得する他のアプリケーションには、監視システム、GoPro、バーチャル リアリティ (VR) などがあります。これらのカメラは、複雑な一連のレンズを使用してカメラの視野を拡大して、この視野を有効にして広いパノラマ イメージや半球イメージを撮影します。ただし、レンズはイメージ内の投影の線を歪めることで、この極端な広角表示を達成します。

魚眼レンズが生成する極端な歪みのため、ピンホール モデルは魚眼カメラをモデル化できません。

魚眼カメラ モデル

Computer Vision System Toolbox™ のキャリブレーションのアルゴリズムは、Scaramuzza[1]が提唱する魚眼カメラ モデルを使用します。このモデルは 150 度の視野 (FOV) までカメラと一緒に使用することができます。モデルでは、無指向性カメラ モデルが使用されます。処理では撮像システムをコンパクトなシステムとして扱います。3 次元ワールド座標点を 2 次元イメージに関連付けるために、カメラの外部パラメーターと内部パラメーターを取得しなければなりません。ワールド座標点は外部パラメーターを使ってカメラ座標に変換されます。カメラ座標は内部パラメーターを使ってイメージ平面にマッピングされます。

外部パラメーター

外部パラメーターは、回転 R と変換 t で構成されています。カメラの座標系の原点はその光学的中心にあり、x 軸と y 軸でイメージ平面が定義されます。

ワールド座標点からカメラ点への変換は、次のように行われます。

内部パラメーター

魚眼カメラ モデルの場合、内部パラメーターには投影関数の多項式のマッピング係数が含まれます。配置係数は、センサー配置およびセンサー平面からカメラ イメージ平面のピクセル位置への変換に関連しています。

次の方程式は、イメージ点を対応する 3 次元ベクトルにマッピングします。

  • は、実際のワールド座標点の理想的なイメージ投影です。

  • は、スカラー係数を表します。

  • は、Scaramuzza モデルで記述される多項式です。ここで、 です。

  • は、(u,v) の関数であり、イメージの中心 からの点の距離のみに依存します。

内部パラメーターは、ストレッチおよび歪みも考慮します。ストレッチ行列は、センサーからレンズへの不整列を補正します。また歪みベクトルは、イメージ平面の (0,0) 位置を調整します。

次の方程式は、実際の歪んだ座標 (u'',v'') を理想的な歪んだ座標 (u,v) に関連付けます。

MATLAB での魚眼カメラ キャリブレーション

魚眼イメージからレンズ歪みを除去するために、チェッカーボード キャリブレーション パターンを検出してから、カメラのキャリブレーションを行うことができます。関数 detectCheckerboardPoints および generateCheckerboardPoints を使用して、チェッカーボード点を検出できます。関数 estimateFisheyeParameters は、検出された点を使用して、魚眼カメラの内部パラメーターと外部パラメーターを含む fisheyeParameters オブジェクトを返します。fisheyeCalibrationErrors を使用して、キャリブレーションの精度を確認できます。

魚眼イメージのレンズ歪みの修正

チェッカーボード キャリブレーション パターンを検出してから、カメラのキャリブレーションを行うことで、魚眼イメージからレンズ歪みを除去します。次に結果を表示します。

一連のチェッカーボードのキャリブレーション イメージを収集します。

images = imageDatastore(fullfile(toolboxdir('vision'),'visiondata', ...
    'calibration','gopro'));

イメージからキャリブレーション パターンを検出します。

[imagePoints,boardSize] = detectCheckerboardPoints(images.Files);

チェッカーボードの正方形のコーナーのワールド座標を生成します。

squareSize = 29; % millimeters
worldPoints = generateCheckerboardPoints(boardSize,squareSize);

イメージ点およびワールド座標点に基づいて魚眼カメラのキャリブレーション パラメーターを推定します。最初のイメージを使用してイメージのサイズを取得します。

I = readimage(images,1);
imageSize = [size(I,1) size(I,2)];
params = estimateFisheyeParameters(imagePoints,worldPoints,imageSize);

最初のイメージ I からレンズ歪みを除去して、結果を表示します。

J1 = undistortFisheyeImage(I,params.Intrinsics);
figure
imshowpair(I,J1,'montage')
title('Original Image (left) vs. Corrected Image (right)')

J2 = undistortFisheyeImage(I,params.Intrinsics,'OutputView','full');
figure
imshow(J2)
title('Full Output View')

参照

[1] Scaramuzza, D., A. Martinelli, and R. Siegwart. "A Toolbox for Easy Calibrating Omnidirectional Cameras." Proceedings to IEEE International Conference on Intelligent Robots and Systems, (IROS). Beijing, China, October 7–15, 2006.

参考

| | | | | |

関連するトピック