Main Content

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

cameraMatrix

(非推奨) カメラ射影行列

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

説明

camMatrix = cameraMatrix(cameraParams,tform) は、4 行 3 列のカメラ射影行列 camMatrix を返します。これを使用して、同次座標の 3 次元ワールド ポイントをイメージに投影できます。cameraParams は、cameraParameters オブジェクトまたは cameraIntrinsics オブジェクトです。

camMatrix = cameraMatrix(cameraParams,rotationMatrix,translationVector) は、4 行 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 = undistortImage(imOrig,cameraParams);

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

[imagePoints,boardSize] = detectCheckerboardPoints(im);

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

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

カメラ行列を計算します。

P = cameraMatrix(cameraParams,rotationMatrix,translationVector)
P = 4×3
105 ×

    0.0157   -0.0271    0.0000
    0.0404   -0.0046   -0.0000
    0.0199    0.0387    0.0000
    8.9399    9.4399    0.0072

入力引数

すべて折りたたむ

カメラ パラメーター。cameraParameters または cameraIntrinsics オブジェクトとして指定します。関数 estimateCameraParameters を使用して、cameraParameters オブジェクトを返すことができます。cameraParameters オブジェクトには、カメラの内部パラメーター、外部パラメーターおよびレンズ歪みパラメーターが含まれます。

ワールド座標からカメラ座標への変換。rigid3d オブジェクトとして指定します。関数 extrinsics を使用して、回転と並進を取得し、tform オブジェクトを作成できます。

カメラの回転。3 行 3 列の行列として指定します。この行列は、関数 extrinsics を使用して取得できます。関数 relativeCameraPose を使用し、その orientation 出力を転置して、この行列を取得することもできます。rotationMatrix 入力と translationVector 入力は、実数、非スパースで、同じクラスでなければなりません。

カメラの並進。1 行 3 列のベクトルとして指定します。並進ベクトルは、ワールド座標からカメラ座標系への変換を示します。このベクトルは、関数 extrinsics を使用して取得できます。次のように関数 relativeCameraPoselocation 出力と orientation 出力を使用して、このベクトルを取得することもできます。

  • translationVector = -relativeLocation * relativeOrientation'

translationVector 入力は、実数、非スパースで、同じクラスでなければなりません。

出力引数

すべて折りたたむ

カメラ射影行列。4 行 3 列の行列として返されます。この行列には、イメージに投影される同次座標の 3 次元ワールド ポイントが含まれます。rotationMatrixtranslationVectordouble に設定すると、関数は camMatrixdouble として返します。そうでない場合、camMatrixsingle として返します。

関数は、次のように camMatrix を計算します。

camMatrix = [rotationMatrix; translationVector] × K
K: 内部パラメーターの行列

その後、カメラ行列と同次座標を使用して、ワールド ポイントをイメージに投影できます。

w × [x,y,1] = [X,Y,Z,1] × camMatrix

(X,Y,Z): 点のワールド座標
(x,y): 対応するイメージ ポイントの座標
w: 任意のスケール係数

データ型: single | double

拡張機能

バージョン履歴

R2014b で導入

すべて折りたたむ

R2022b: 非推奨

R2022b 以降、Computer Vision Toolbox™ のほとんどの関数は、左から乗算する規則を使用して幾何学的変換を作成および実行します。ただし、関数 cameraMatrix は、右から乗算する規則を使用します。現時点で cameraMatrix を削除する予定はありませんが、左から乗算する規則をサポートする関数 cameraProjection に切り替えることで、幾何学的変換ワークフローを効率化できます。詳細については、Migrate Geometric Transformations to Premultiply Conventionを参照してください。

コードを更新するには、次を行います。

  • 関数名 cameraMatrix のインスタンスを cameraProjection に変更します。

  • 引数 cameraParamscameraIntrinsics オブジェクトを指定します。cameraParameters オブジェクトがある場合は、Intrinsics プロパティをクエリすることで cameraIntrinsics オブジェクトを取得できます。Intrinsics プロパティが関数 isempty に従って空だった場合、Intrinsics プロパティをクエリする前に、cameraParameters オブジェクトの ImageSize プロパティを任意のベクトルに設定します。次に例を示します。

    load worldToImageCorrespondences.mat
    if(isempty(cameraParams.Intrinsics))
        cameraParams.ImageSize = [128 128];
    end
    intrinsics = cameraParams.Intrinsics;
  • 引数 tform を使用して、変換を rigidtform3d オブジェクトとして指定します。cameraProjection は、入力引数 rotationMatrixtranslationVector をサポートしていません。tformT プロパティで、rotationMatrix の転置または変換行列の転置を使用して rigidtform3d オブジェクトを作成することに注意してください。

非推奨の使用方法推奨される代替案

この例では、変換を回転行列と並進ベクトルとして指定し、関数 cameraMatrix を使用してカメラ射影行列を計算します。

camMatrix = cameraMatrix(cameraParams,rotationMatrix,translationVector)

この例では、変換を rigidtform3d オブジェクトとして指定し、関数 cameraProjection を使用してカメラ射影行列を計算します。回転行列 rotationMatrix の転置を使用して rigidtform3d オブジェクトを作成することに注意してください。

intrinsics = cameraParams.Intrinsics;
tform = rigidtform3d(rotationMatrix',translationVector);
camMatrix = cameraProjection(intrinsics,tform);

この例では、変換を rigid3d オブジェクトとして指定します。

camMatrix = cameraMatrix(cameraParams,tformOld);

この例では、既存の rigid3d オブジェクト tformOld から開始し、tformOldT プロパティの転置を使用して rigidtform3d オブジェクトを作成し、関数 cameraProjection を使用してカメラ射影行列を計算します。

intrinsics = cameraParams.Intrinsics;
tform = rigidtform3d(tformOld.T');
camMatrix = cameraProjection(intrinsics,tform);