このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
魚眼キャリブレーションの基礎
カメラのキャリブレーションは、カメラの外部パラメーターと内部パラメーターを計算するプロセスです。カメラのキャリブレーションを行うと、イメージ情報を使用して 2 次元イメージから 3 次元情報を復元できます。また、魚眼カメラで撮影したイメージの歪みを補正できます。Computer Vision Toolbox™ には、ピンホール カメラ モデル用と魚眼カメラ モデル用のキャリブレーション アルゴリズムが含まれています。魚眼カメラ モデルで使用できる視野 (FOV) は 195 度までです。
魚眼カメラはオドメトリで、自己位置推定と環境地図作成の同時実行 (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)') J2 = undistortFisheyeImage(I,params.Intrinsics,'OutputView','same', 'ScaleFactor', 0.2); figure imshow(J2)
title('Output View with low Scale Factor')
参照
[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.
参考
関数
オブジェクト
fisheyeCalibrationErrors
|fisheyeIntrinsics
|fisheyeIntrinsicsEstimationErrors
|fisheyeParameters
関連するトピック
- Configure Monocular Fisheye Camera (Automated Driving Toolbox)
- Calibrate a Monocular Camera (Automated Driving Toolbox)
- 2 つのビューからの structure from motion
- 複数のビューからの structure from motion
- Configure Monocular Fisheye Camera (Automated Driving Toolbox)