Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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

カメラのキャリブレーションは、カメラの外部パラメーターと内部パラメーターを計算するプロセスです。カメラのキャリブレーションを行うと、イメージ情報を使用して 2 次元イメージから 3 次元情報を復元できます。また、魚眼カメラで撮影したイメージの歪みを補正できます。Computer Vision Toolbox™ には、ピンホール カメラ モデル用と魚眼カメラ モデル用のキャリブレーション アルゴリズムが含まれています。魚眼カメラ モデルで使用できる視野 (FOV) は 195 度までです。

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

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

魚眼カメラ モデル

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

外部パラメーター

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

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

内部パラメーター

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

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

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

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

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

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

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

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

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

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

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

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

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

images = imageDatastore('calibrationImages');

イメージからキャリブレーション パターンを検出します。名前と値の引数 'PartialDetections' は、部分的にチェッカーボードを検出できるように、既定で true に設定されます。

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

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

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

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

I = readimage(images,10); 
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)')

Figure contains an axes object. The axes object with title Original Image (left) vs. Corrected Image (right) contains an object of type image.

J2 = undistortFisheyeImage(I,params.Intrinsics,'OutputView','same', 'ScaleFactor', 0.2);
figure
imshow(J2)
title('Output View with low Scale Factor')

Figure contains an axes object. The axes object with title Output View with low Scale Factor contains an object of type image.

参照

[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.

参考

関数

オブジェクト

関連するトピック