Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

extrinsics

(非推奨) キャリブレートされたカメラの位置を計算

extrinsics は推奨されません。代わりに関数 estimateExtrinsics を使用してください。詳細については、互換性の考慮事項を参照してください。

説明

[rotationMatrix,translationVector] = extrinsics(imagePoints,worldPoints,cameraParams) は、3 次元回転行列と 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);

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

imOrig = imread(fullfile(matlabroot,'toolbox','vision','visiondata', ...
    'calibration','slr','image9.jpg'));
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,cameraParams,'OutputView','full');

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

[imagePoints,boardSize] = detectCheckerboardPoints(im);

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

imagePoints = [imagePoints(:,1) + newOrigin(1), ...
             imagePoints(:,2) + newOrigin(2)];

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

[rotationMatrix, translationVector] = extrinsics(...
imagePoints,worldPoints,cameraParams);

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

[orientation, location] = extrinsicsToCameraPose(rotationMatrix, ...
  translationVector);
figure
plotCamera('Location',location,'Orientation',orientation,'Size',20);
hold on
pcshow([worldPoints,zeros(size(worldPoints,1),1)], ...
  'VerticalAxisDir','down','MarkerSize',40);

入力引数

すべて折りたたむ

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

データ型: single | double

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

データ型: single | double

カメラ パラメーターを保存するオブジェクト。cameraParameters, cameraIntrinsics オブジェクトまたは fisheyeIntrinsics オブジェクトとして指定します。これらのオブジェクトは、関数 estimateCameraParameters、関数 estimateFisheyeParameters またはカメラ キャリブレーター アプリで返されます。オブジェクトには、カメラの内部パラメーター、外部パラメーターおよびレンズ歪みパラメーターが含まれます。

出力引数

すべて折りたたむ

3 次元回転。3 行 3 列の行列として返されます。回転行列を並進ベクトルと共に使用して、ワールド座標からカメラ座標系に点を変換できます。

入力 imagePoints と入力 worldPoints をクラス double に設定すると、関数は rotationMatrix および translationVectordouble として返します。そうでない場合、single になります。

3 次元並進。1 行 3 列のベクトルとして返されます。回転行列を並進ベクトルと共に使用して、ワールド座標からカメラ座標系に点を変換できます。

入力 imagePoints と入力 worldPoints をクラス double に設定すると、関数は rotationMatrix および translationVectordouble として返します。そうでない場合、single になります。

アルゴリズム

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

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

拡張機能

バージョン履歴

R2014a で導入

すべて展開する