Main Content

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

estimateExtrinsics

キャリブレーションされたカメラの位置の計算

R2022b 以降

説明

camExtrinsics = estimateExtrinsics(imagePoints,worldPoints,intrinsics) は、カメラの外部パラメーターを返します。これは、点をワールド座標からカメラ座標系に変換できる 3 次元剛体変換です。

すべて折りたたむ

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

images = imageDatastore(fullfile(toolboxdir("vision"),"visiondata", ...
      "calibration","slr"));

イメージ内のチェッカーボードのコーナーを検出します。

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

左上隅が (0,0) のパターン中心の座標系でチェッカーボードのコーナーのワールド座標を生成します。正方形のサイズはミリメートル単位です。

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

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

I = readimage(images,1); 
imageSize = [size(I,1) size(I,2)];
cameraParams = estimateCameraParameters(imagePoints,worldPoints, ...
    ImageSize=imageSize);
intrinsics = cameraParams.Intrinsics;

新しい位置でイメージを読み込みます。

imOrig = readimage(images,9); 
figure 
imshow(imOrig)
title("Input Image")

Figure contains an axes object. The axes object with title Input Image contains an object of type image.

イメージの歪みを補正します。

[im,newOrigin] = undistortImage(imOrig,intrinsics,OutputView="full");

新しいイメージで参照オブジェクトを検索します。

[imagePoints,boardSize] = detectCheckerboardPoints(im);

イメージ座標系のシフトを補正します。

imagePoints = imagePoints+newOrigin;

新しい外部パラメーターを計算します。

camExtrinsics = estimateExtrinsics(imagePoints,worldPoints,intrinsics);

カメラの姿勢を計算します。

camPose = extr2pose(camExtrinsics);
figure
plotCamera(AbsolutePose=camPose,Size=20);
hold on
pcshow([worldPoints,zeros(size(worldPoints,1),1)], ...
  VerticalAxisDir="down",MarkerSize=40);

Figure contains an axes object. The axes object contains 11 objects of type line, text, patch, scatter.

入力引数

すべて折りたたむ

点のイメージ座標。M 行 2 列の配列として指定します。配列には M 個の [x y] 座標が含まれます。入力 imagePoints と入力 worldPoints は両方が double であるか、両方が single でなければなりません。

データ型: single | double

イメージ座標に対応するワールド座標。M 行 2 列の行列として指定します。入力 imagePoints と入力 worldPoints は両方が double であるか、両方が single でなければなりません。関数は、点が z = 0 と同一平面上にあるものと仮定し、点の数 M は少なくとも 4 つなければなりません。

データ型: single | double

カメラの内部パラメーター。cameraIntrinsics オブジェクトまたは fisheyeIntrinsics オブジェクトとして指定します。これらのオブジェクトは、カメラの内部キャリブレーション パラメーターに関する情報を格納します (レンズ歪みパラメーターなど)。

出力引数

すべて折りたたむ

カメラの外部パラメーター。rigidtform3d オブジェクトとして返されます。オブジェクトの "R" プロパティと "Translation" プロパティは、カメラの方向と位置を表します。

ヒント

  • intrinsicscameraIntrinsics オブジェクトである場合、この関数はレンズ歪みを考慮しません。この場合、点を検出する前に関数 undistortImage を使用してイメージの歪みを補正するか、関数 undistortPoints を使用して検出された点の歪みを補正できます。

アルゴリズム

関数 estimateExtrinsics は、worldPoints が M 行 2 列の行列として指定されているかどうかに応じて、2 つの異なるアルゴリズムを使用して外部パラメーターを計算します。z= 0 である同一平面上の点については、M 行 2 列の行列を使用してください。

関数 estimateExtrinsics は、1 つのイメージの回転行列と並進ベクトルを閉形式で計算します。キャリブレーション中は、すべてのキャリブレーション イメージで再投影誤差が最小になるように、外部パラメーターが数値的に推定されます。そのため、キャリブレーション イメージの 1 つに対して関数 estimateExtrinsics を使用すると、キャリブレーション中に得られたものとは少し異なる回転行列と並進ベクトルが返されることがあります。

拡張機能

バージョン履歴

R2022b で導入

すべて展開する