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

estimateCameraParameters

単一カメラまたはステレオ カメラをキャリブレーションします。

説明

[cameraParams,imagesUsed,estimationErrors] = estimateCameraParameters(imagePoints,worldPoints) は、単一カメラの内部パラメーターと外部パラメーター、および歪み係数を含む cameraParameters オブジェクト、cameraParams を返します。この関数は、カメラ パラメーターの推定に使用されたイメージと、単一カメラのキャリブレーションの標準推定誤差も返します。

[stereoParams,pairsUsed,estimationErrors] = estimateCameraParameters(imagePoints,worldPoints) は、ステレオ カメラのパラメーターを含む stereoParameters オブジェクト、stereoParams を返します。この関数は、ステレオ パラメーターの推定に使用されたイメージと、ステレオ カメラのキャリブレーションの標準推定誤差も返します。

cameraParams = estimateCameraParameters(___,Name,Value) は、上記の構文のいずれかを使用して、1 つ以上の Name,Value 引数ペアによって指定された cameraParams オブジェクト プロパティを構成します。プロパティが未指定の場合は既定値になります。

すべて折りたたむ

一連のキャリブレーション イメージを作成します。

images = imageSet(fullfile(toolboxdir('vision'),'visiondata',...
            'calibration','mono'));
imageFileNames = images.ImageLocation;

キャリブレーション パターンを検出します。

[imagePoints, boardSize] = detectCheckerboardPoints(imageFileNames);

四角形のコーナーのワールド座標を生成します。

squareSizeInMM = 29;
worldPoints = generateCheckerboardPoints(boardSize,squareSizeInMM);

カメラのキャリブレーションを行います。

I = readimage(images,1); 
imageSize = [size(I, 1),size(I, 2)];
params = estimateCameraParameters(imagePoints,worldPoints, ...
                                  'ImageSize',imageSize);

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

showReprojectionErrors(params);

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

figure;
showExtrinsics(params);

drawnow;

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

figure; 
imshow(imageFileNames{1}); 
hold on;
plot(imagePoints(:,1,1), imagePoints(:,2,1),'go');
plot(params.ReprojectedPoints(:,1,1),params.ReprojectedPoints(:,2,1),'r+');
legend('Detected Points','ReprojectedPoints');
hold off;

キャリブレーション イメージを指定します。

leftImages = imageDatastore(fullfile(toolboxdir('vision'),'visiondata', ...
    'calibration','stereo','left'));
rightImages = imageDatastore(fullfile(toolboxdir('vision'),'visiondata', ...
    'calibration','stereo','right'));

チェッカーボードを検出します。

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

チェッカーボード キーポイントのワールド座標を指定します。正方形のサイズはミリメートル単位です。

squareSize = 108;
worldPoints = generateCheckerboardPoints(boardSize,squareSize);

ステレオ カメラ システムをキャリブレーションします。両方のカメラの解像度は同じです。

I = readimage(leftImages,1); 
imageSize = [size(I,1),size(I,2)];
params = estimateCameraParameters(imagePoints,worldPoints, ...
                                  'ImageSize',imageSize);

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

  showReprojectionErrors(params);

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

figure;
showExtrinsics(params);

入力引数

すべて折りたたむ

キャリブレーション パターンのキー ポイント。[x,y] 内部パラメーター イメージ座標の配列として指定します。

キャリブレーション[x,y] キー ポイントの入力配列
単一カメラ点 [x,y] の M x 2 x numImages の配列。
  • イメージの数を示す numImages は、2 より大きくなければなりません。

  • 各パターンのキー ポイント座標の数を示す M は、3 より大きくなければなりません。

ステレオ カメラ点 [x,y] の M x 2 x numPairs x 2 の配列。
  • numPairs は、キャリブレーション パターンを含むステレオ イメージのペアの数です。

  • 各パターンのキー ポイント座標の数を示す M は、3 より大きくなければなりません。

  • imagePoints(:,:,:,1) はカメラ 1 の点です。

  • imagePoints(:,:,:,2) はカメラ 2 の点です。

データ型: single | double

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

データ型: single | double

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

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

ワールド座標点の単位。'WorldUnits' と単位を表す文字ベクトルで構成されるコンマ区切りのペアとして指定します。

せん断推定。'EstimateSkew' と logical スカラーで構成されるコンマ区切りのペアとして指定します。このプロパティを true に設定すると、関数はイメージの座標軸のせん断を推定します。false に設定すると、イメージの座標軸が厳密に直行し、関数はせん断をゼロに設定します。

推定する半径方向歪み係数の数。'NumRadialDistortionCoefficients' と値 2 または 3 で構成されるコンマ区切りのペアとして指定します。半径方向の歪みは、レンズの光学中心からエッジに向かうにつれて光線の屈折率が大きくなる現象を指しています。この歪みはレンズが小さいほど大きくなります。

半径方向の歪み係数は、このタイプの歪みをモデル化します。歪んだ点は (xdistorted, ydistorted) として次のように表されます。

xdistorted = x(1 + k1*r2 + k2*r4 + k3*r6)

ydistorted= y(1 + k1*r2 + k2*r4 + k3*r6)

  • x、y — 歪み補正後のピクセル位置。x と y は正規化されたイメージ座標内にあります。正規化されたイメージ座標は、光学的中心への変換後にピクセル単位の焦点距離で除算したピクセル座標から求められます。したがって、x と y は次元がありません。

  • k1、k2 および k3 — レンズの半径方向の歪み係数。

  • r2: x2 + y2

一般に、キャリブレーションを行うには 2 つの係数で十分です。広角レンズなどの歪みが大きい場合には、3 つの係数を選択して k3 を含めることができます。

円周方向歪みフラグ。'EstimateTangentialDistortion' と logical スカラーで構成されるコンマ区切りのペアとして指定します。このプロパティを true に設定すると、関数は円周方向の歪みを推定します。false に設定すると、円周方向の歪みを無視できます。

円周方向の歪みは、レンズとイメージ平面が平行にならない場合に生じます。円周方向の歪み係数は、このタイプの歪みをモデル化します。

歪んだ点は (xdistorted, ydistorted) として次のように表されます。

xdistorted = x + [2 * p1 * x * y + p2 * (r2 + 2 * x2)]

ydistorted = y + [p1 * (r2 + 2 *y2) + 2 * p2 * x * y]

  • x、y — 歪み補正後のピクセル位置。x と y は正規化されたイメージ座標内にあります。正規化されたイメージ座標は、光学的中心への変換後にピクセル単位の焦点距離で除算したピクセル座標から求められます。したがって、x と y は次元がありません。

  • p1 および p2 — レンズの円周方向の歪み係数。

  • r2: x2 + y2

カメラの内部パラメーターの初期推定。'InitialIntrinsicMatrix' と 3 行 3 列の行列で構成されるコンマ区切りのペアとして指定します。初期値を指定しない場合、関数は線形最小二乗法を使用して内部パラメーターの初期行列を計算します。

半径方向歪み係数の初期推定。'InitialRadialDistortion' と 2 要素または 3 要素のベクトルで構成されるコンマ区切りのペアとして指定します。初期値を指定しない場合、関数はすべての係数の初期値に 0 を使用します。

カメラによって生成されるイメージのサイズ。'ImageSize' と 1 行 2 列のベクトル [mrows, ncols] で構成されるコンマ区切りのペアとして指定します。

出力引数

すべて折りたたむ

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

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

関数は、ワールド座標点と各イメージで検出された点の間のホモグラフィを計算します。イメージのホモグラフィの計算が失敗すると、関数は警告を発行します。このイメージの点はカメラ パラメーターの推定に使用されません。関数はさらに、imagesUsed の対応する要素を false に設定します。

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

ステレオ システムのカメラ パラメーター。stereoParameters オブジェクトとして返されます。このオブジェクトには、ステレオ カメラ システムの内部パラメーター、外部パラメーターおよびレンズ歪みパラメーターが含まれます。

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

アルゴリズム

すべて折りたたむ

キャリブレーションのアルゴリズム

カメラ キャリブレーター アプリは 95 度の視野 (FOV) までカメラと一緒に使用することができます。

キャリブレーションのアルゴリズムでは、次のピンホール カメラ モデルを想定しています。

w[xy1]=[XYZ1][Rt]K

(X,Y,Z): 点のワールド座標
(x,y): 対応するイメージ点の座標
w: 任意のスケール係数
K: カメラの内部パラメーターの行列
R: カメラの 3 次元回転を表す行列
t: ワールド座標系に対するカメラの並進

カメラのキャリブレーションでは、内部パラメーター、外部パラメーターおよび歪み係数の値を推定します。カメラのキャリブレーションには次の 2 つの手順が含まれます。

  1. レンズ歪みをゼロと仮定して、内部パラメーターおよび外部パラメーターについて閉形式で解きます。[1]

  2. 非線形最小二乗の最小化 (リーベンバーグ・マルカート アルゴリズム) を使用して、歪み係数を含むすべてのパラメーターを同時に推定します。前の手順で求めた閉形式の解を、内部パラメーターと外部パラメーターの初期推定値として使用します。その後、歪み係数の初期推定値をゼロに設定します。[1][2]

参照

[1] Zhang, Z. “A Flexible New Technique for Camera Calibration”. IEEE Transactions on Pattern Analysis and Machine Intelligence.Vol. 22, No. 11, 2000, pp. 1330–1334.

[2] Heikkila, J, and O. Silven. “A Four-step Camera Calibration Procedure with Implicit Image Correction”, IEEE International Conference on Computer Vision and Pattern Recognition, 1997.

[3] Bouguet, J.Y. “Camera Calibration Toolbox for Matlab”, Computational Vision at the California Institute of Technology. Camera Calibration Toolbox for MATLAB.

[4] Bradski, G., and A. Kaehler. Learning OpenCV : Computer Vision with the OpenCV Library. Sebastopol, CA: O'Reilly, 2008.

R2014b で導入