Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

estimateFisheyeParameters

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

説明

[fisheyeParams,imagesUsed,estimationErrors] = estimateFisheyeParameters(imagePoints,worldPoints,imageSize) は、魚眼カメラの内部パラメーターと外部パラメーターの推定値を含む fisheyeParameters オブジェクトを返します。この関数は、カメラ パラメーターの推定に使用されたイメージと、魚眼カメラのキャリブレーションの標準推定誤差も返します。

[___] = estimateFisheyeParameters(___,Name,Value) は、前の構文を使用して、Name,Value ペアの引数を 1 つ以上指定した fisheyeParams オブジェクト プロパティを構成します。プロパティが未指定の場合は既定値になります。

すべて折りたたむ

キャリブレーション イメージを使用して、チェッカーボードのキャリブレーション パターンを検出します。パターンから抽出されたコーナーを使用してカメラのキャリブレーションを行い、キャリブレーションの結果を可視化します。

イメージ データストアを使用してキャリブレーション イメージを読み込みます。

calibrationImages = imageDatastore("calibImages");
imageFileNames = calibrationImages.Files;

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

[imagePoints,boardSize,imagesUsed] = detectCheckerboardPoints(imageFileNames,HighDistortion=true);

チェッカーボードが検出されたキャリブレーション イメージを収集します。

usedImageFileNames = imageFileNames(imagesUsed);
images = imageDatastore(usedImageFileNames);

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

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

イメージ点およびワールド ポイントに基づいて魚眼カメラのキャリブレーション パラメーターを推定します。

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

キャリブレーションの精度を可視化します。

figure
showReprojectionErrors(params);

Figure contains an axes object. The axes object with title Mean Reprojection Error per Image, xlabel Images, ylabel Mean Error in Pixels contains 3 objects of type bar, line. This object represents Overall Mean Error: 1.67 pixels.

カメラの外部パラメーターを可視化します。

figure
showExtrinsics(params);

Figure contains an axes object. The axes object with title Extrinsic Parameters Visualization, xlabel X (mm), ylabel Z (mm) contains 25 objects of type patch, text, line.

drawnow

検出され再投影された点をプロットします。

figure 
imshow(I); 
hold on
plot(imagePoints(:,1,10),imagePoints(:,2,10),"go");
plot(params.ReprojectedPoints(:,1,10),params.ReprojectedPoints(:,2,10),"r+");
legend("Detected Points","Reprojected Points");
hold off

Figure contains an axes object. The axes object contains 3 objects of type image, line. One or more of the lines displays its values using only markers These objects represent Detected Points, Reprojected Points.

入力引数

すべて折りたたむ

キャリブレーション パターンのキー ポイント。[x,y] 内部パラメーター イメージ座標からなる M×2×numImages の配列として指定します。イメージ数 numImages は 2 より大きくなければなりません。各パターンのキー ポイント座標の数を示す M は、3 より大きくなければなりません。部分検出パターンを推定に含めるには、欠損キーポイントの x-y 座標として [NaN,NaN] を使用します。

データ型: single | double

ワールド座標のキャリブレーション パターンのキー ポイント。M 個の [x,y] ワールド座標からなる M 行 2 列の行列として指定します。パターンは平面でなければならないため、z 座標はゼロになります。

データ型: single | double

イメージ サイズ。[mrows ncols] のベクトルとして指定します。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: 'WorldUnits','mm' は、ワールド ポイントの単位をミリメートルに設定します。

座標軸の配置の推定。'EstimateAlignment'false または true から構成されるコンマ区切りのペアとして指定します。魚眼レンズの光軸がイメージ平面に対して垂直でない場合に true に設定します。

ワールド ポイント単位。'WorldUnits' と、文字ベクトルまたは string スカラーで構成されるコンマ区切りのペアとして指定します。この引数は、単位の種類を格納するためだけに使用され、計算には影響しません。

出力引数

すべて折りたたむ

魚眼カメラ パラメーター。fisheyeParameters オブジェクトとして返されます。

カメラ パラメーターの推定に使用されたイメージ。P 行 1 列の logical 配列として返されます。P はイメージの数に対応します。logical の true 値は、カメラ パラメーターの推定に使用されたイメージのインデックスを示します。

推定されたパラメーターの標準誤差。fisheyeCalibrationErrors オブジェクトとして返されます。

参照

[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 2006). Beijing, China, October 7–15, 2006.

[2] Urban, S., J. Leitloff, and S. Hinz. "Improved Wide-Angle, Fisheye and Omnidirectional Camera Calibration." ISPRS Journal of Photogrammetry and Remove Sensing. Vol. 108, 2015, pp.72–79.

バージョン履歴

R2017b で導入