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

cameraParameters

カメラ パラメーターを格納するオブジェクト

説明

cameraParameters オブジェクトには、カメラの内部パラメーター、外部パラメーターおよびレンズ歪みパラメーターが格納されます。

作成

ここで説明する関数 cameraParameters を使用して cameraParameters オブジェクトを作成できます。また、入力イメージ点の M x 2 x numImages の配列 (M は各パターンのキーポイント座標の数) の estimateCameraParameters を使用して cameraParameters オブジェクトを作成することもできます。

構文

cameraParams = cameraParameters
cameraParams = cameraParameters(Name,Value)
cameraParams = cameraParameters(paramStruct)

説明

cameraParams = cameraParameters は、カメラの内部パラメーター、外部パラメーターおよびレンズ歪みパラメーターを含む cameraParameters オブジェクトを作成します。

cameraParams = cameraParameters(Name,Value) は、1 つ以上の Name,Value ペアの引数を使用して cameraParameters オブジェクトのプロパティを設定します。指定していないプロパティは既定値を使用します。

cameraParams = cameraParameters(paramStruct) は、paramStruct に格納されているパラメーターを使用して既存の cameraParameters オブジェクトから同一の cameraParameters オブジェクトを作成します。

入力引数

すべて展開する

ステレオ パラメーター。ステレオ パラメーターの struct として指定します。既存の cameraParameters オブジェクトから paramStruct を取得するには、関数 toStruct を使用します。

プロパティ

すべて展開する

内部カメラ パラメーター:

射影行列。3 行 3 列の単位行列として指定します。オブジェクトは、行列形式に次の形式を使用します。

[fx00sfy0cxcy1]

座標 [cx cy] はピクセル単位の光学的中心 (主点) を表します。x 軸と y 軸が厳密に直交する場合、せん断パラメーター s は 0 に等しくなります。

fx = F*sx
fy = F*sy
F は焦点距離のワールド単位で、通常はミリメートル単位で表されます。
[sx, sy] は、それぞれ x と y 方向のワールド単位あたりのピクセル数です。
fx と fy はピクセル単位で表されます。

光学的中心。ピクセル単位の 2 要素ベクトル [cx,cy] として指定します。ベクトルには、カメラの光学的中心の座標が含まれます。

x と y の焦点距離。2 要素ベクトル [fx, fy] として指定します。

fx = F * sx
fy = F * sy
F はワールド単位 (通常はミリメートル単位) の焦点距離で、[sx, sy] はそれぞれ x 方向と y 方向におけるワールド単位あたりのピクセル数を表します。したがって、fx と fy はピクセル単位です。

焦点距離 F は画角に影響を与えるため、イメージ内で焦点が合っているように見えるシーンの領域に影響します。被写体の距離が固定されている場合、次のようになります。

  • 焦点距離が短いと画角が広くなり、シーンの広い領域に焦点を合わせてキャプチャできます。被写体とシーンの背景の両方を際立たせます。

  • 焦点距離が長いと画角が狭くなるため、焦点の合うシーンの領域が減ります。被写体がより強調され、キャプチャされる背景の量が制限されます。

カメラの軸のせん断。スカラーとして指定します。x 軸と y 軸が厳密に直交する場合、せん断を 0 に設定します。

カメラのレンズ歪み:

半径方向歪み係数。2 要素ベクトルまたは 3 要素ベクトルとして指定します。2 要素ベクトルを指定すると、オブジェクトでは 3 番目の要素が 0 に設定されます。半径方向の歪みは、レンズの光学的中心からエッジに向かうにつれて光線の屈折率が大きくなる現象を指しています。この歪みはレンズが小さいほど大きくなります。カメラ パラメーター オブジェクトは、点の半径方向歪み位置を計算します。歪んだ点は (xdistorted、ydistorted) として次のように表されます。

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

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

x, y = 歪み補正後のピクセル位置
k1、k2、および k3 = レンズの半径方向歪み係数
r2 = x2 + y2
通常は 2 つの係数で十分です。歪みが大きい場合は、k3 を含めることができます。歪み補正後のピクセル位置は、光学的中心を原点とする正規化されたイメージ座標に示されます。この座標はワールド単位で表されます。

円周方向歪み係数。2 要素ベクトルとして指定します。円周方向の歪みは、レンズとイメージ平面が平行にならない場合に生じます。カメラ パラメーター オブジェクトは、点の円周方向歪み位置を計算します。歪んだ点は (xdistorted, ydistorted) として表されます。歪み補正後のピクセル位置は、光学的中心を原点とする正規化されたイメージ座標に示されます。この座標はワールド単位で表されます。

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

歪んだ点は (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

外部カメラ パラメーター:

3 次元回転行列。P 個のパターン イメージを含む 3 x 3 x P として指定します。各 3 行 3 列の行列は、対応するベクトルと同じ 3 次元回転を表します。

次の式は、チェッカーボードのフレームのワールド座標 [X Y Z] と対応するイメージ点 [x y] を関連付ける変換を行います。

s[xy1]=[XYZ1][Rt]K

R は 3 次元回転行列です。
t は平行移動ベクトルです。
K は IntrinsicMatrix です。
s はスカラーです。
この式では歪みが考慮されていません。歪みは関数 undistortImage で削除されます。

3 次元回転ベクトル。M 回転ベクトルを含む M 行 3 列の行列として指定します。各ベクトルは、対応するキャリブレーション パターンに相対的なカメラのイメージ平面の 3 次元回転を示します。ベクトルはカメラが回転する 3 次元軸を指定します。大きさはラジアン単位の回転角度です。対応する 3 次元回転行列は RotationMatrices プロパティで与えられます。

カメラの並進。M 行 3 列の行列として指定します。この行列には、M イメージの平行移動ベクトルが含まれます。ベクトルは、キャリブレーション パラメーターを推定するキャリブレーション パターンを含みます。行列の各行には、ワールド単位で表された、対応するパターンに相対的なカメラの並進を示すベクトルが含まれます。

次の式は、チェッカーボードのフレームのワールド座標 [X Y Z] と対応するイメージ点 [x y] を関連付ける変換を行います。

s[xy1]=[XYZ1][Rt]K

R は 3 次元回転行列です。
t は平行移動ベクトルです。
K は IntrinsicMatrix です。
s はスカラーです。
この式では歪みが考慮されていません。歪みは関数 undistortImage で削除されます。

回転ベクトルの数が平行移動ベクトルの数と一致するように、コンストラクターで RotationVectors プロパティと TranslationVectors プロパティを設定しなければなりません。一方のプロパティのみ設定して、もう一方のプロパティを設定しないとエラーになります。

推定されたカメラ パラメーターの精度:

再投影された点と検出された点の間の平均ユークリッド距離。ピクセル単位で数値として指定します。

推定されたカメラ パラメーターの精度。[x y] 座標の M x 2 x P の配列として指定します。[x y] 座標は、再投影されたパターンのキー ポイントと検出されたパターンのキー ポイント間の並進を x および y で表します。このプロパティの値は、推定されたカメラ パラメーターの精度を表します。P は、カメラ パラメーターを推定するパターン イメージの数です。M は各イメージのキーポイントの数です。

キャリブレーション イメージに再投影されたワールド座標点。[x y] 座標の M x 2 x P の配列として指定します。P はパターン イメージの数で、M は各イメージ内のキーポイントの数です。

カメラ パラメーター推定の設定:

カメラの外部パラメーターを推定するキャリブレーション パターンの数。整数として保存します。キャリブレーション パターンの数は、平行移動ベクトルと回転ベクトルの数と一致します。

キャリブレーション パターンのキー ポイントのワールド座標。M 行 2 列の配列として指定します。M は、パターン内のキー ポイントの数を表します。

ワールド座標点単位。文字ベクトルとして指定します。文字ベクトルは、測定単位を示します。

せん断推定フラグ。logical スカラーとして指定します。この logical を true に設定すると、オブジェクトはイメージの座標軸のせん断を推定します。この logical を false に設定すると、イメージの座標軸は厳密に直交します。

半径方向歪み係数の数。数値 '2' または '3 として指定します。

円周方向歪み推定フラグ。logical スカラー true または false として指定します。この logical を true に設定すると、オブジェクトは円周方向歪みを推定します。この logical を false に設定すると、円周方向歪みは無視されます。

オブジェクト関数

pointsToWorldイメージ点のワールド座標の特定
toStructConvert a camera parameters object into a struct
worldToImageイメージへのワールド座標点の投影

すべて折りたたむ

カメラ キャリブレーション関数を使用してイメージから歪みを除去します。この例では、vision.CameraParameters オブジェクトを手動で作成していますが、実際は estimateCameraParameters または cameraCalibrator アプリを使用してオブジェクトを派生させます。

vision.CameraParameters オブジェクトを手動で作成します。

IntrinsicMatrix = [715.2699 0 0; 0 711.5281 0; 565.6995 355.3466 1];
radialDistortion = [-0.3361 0.0921]; 
cameraParams = cameraParameters('IntrinsicMatrix',IntrinsicMatrix,'RadialDistortion',radialDistortion); 

イメージから歪みを除去します。

I = imread(fullfile(matlabroot,'toolbox','vision','visiondata','calibration','mono','image01.jpg'));
J = undistortImage(I,cameraParams);

元のイメージと歪み補正後のイメージを表示します。

figure; imshowpair(imresize(I, 0.5),imresize(J, 0.5),'montage');
title('Original Image (left) vs. Corrected Image (right)');

参照

[1] Zhang, Z. “A flexible new technique for camera calibration”. IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 22, No. 11, pp. 1330–1334, 2000.

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

拡張機能

R2014a で導入