Main Content

worldToImage

(非推奨) イメージへのワールド ポイントの投影

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

説明

imagePoints = worldToImage(intrinsics,tform,worldPoints) は、3 次元ワールド ポイント worldPoints をイメージ上の点 imagePoints に投影します。intrinsics は、cameraIntrinsics オブジェクトまたは fisheyeIntrinsics オブジェクトです。tformrigid3d オブジェクトです。

imagePoints = worldToImage(intrinsics,rotationMatrix,translationVector,worldPoints) は、カメラの内部パラメーター、回転行列、および並進ベクトルが指定されたイメージへの 3 次元ワールド ポイントの投影を返します。

[imagePoints,validIndex] = worldToImage(___) は、前述の構文の入力のいずれかを使用し、イメージの境界内にある有効なイメージ ポイントのインデックスも返します。

[___] = worldToImage(___'ApplyDistortion',distort) は、歪み適用のオプションを使用した投影を返します。この構文は、非魚眼カメラ パラメーターでサポートされます。

すべて折りたたむ

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

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

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

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

左上隅が (0,0) のパターン中心の座標系でチェッカーボードのコーナーのワールド座標を生成します。

squareSize = 29; % in millimeters
worldPoints = generateCheckerboardPoints(boardSize,squareSize);

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

cameraParams = estimateCameraParameters(imagePoints,worldPoints);

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

imOrig = imread(fullfile(matlabroot,'toolbox','vision','visiondata', ...
        'calibration','slr','image9.jpg'));

imshow(imOrig,'InitialMagnification',30);

Figure contains an axes object. The axes object contains an object of type image.

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

imUndistorted = undistortImage(imOrig,cameraParams);

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

[imagePoints,boardSize] = detectCheckerboardPoints(imUndistorted);

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

[R,t] = extrinsics(imagePoints,worldPoints,cameraParams);

ワールド ポイントに z 座標を追加します。

zCoord = zeros(size(worldPoints,1),1);
worldPoints = [worldPoints zCoord];

ワールド ポイントを元のイメージに投影します。

projectedPoints = worldToImage(cameraParams,R,t,worldPoints);
hold on
plot(projectedPoints(:,1),projectedPoints(:,2),'g*-');
legend('Projected points');
hold off

Figure contains an axes object. The axes object contains 2 objects of type image, line. This object represents Projected points.

入力引数

すべて折りたたむ

ワールド座標内でのカメラの変換。rigid3d オブジェクトとして指定します。

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

イメージ座標に対するワールド座標の 3 次元回転。3 行 3 列として指定します。回転行列を並進ベクトルと共に使用して、ワールド座標系からカメラ座標系に点を変換できます。rotationMatrixtranslationVector 入力は同じデータ型でなければなりません。

データ型: double | single

イメージ座標に対するワールド座標の 3 次元並進。1 行 3 列として指定します。並進ベクトルを回転行列と共に使用して、ワールド座標系からカメラ座標系に点を変換できます。rotationMatrixtranslationVector 入力は同じデータ型でなければなりません。

データ型: double | single

3 次元ワールド ポイント。3 次元ワールド ポイントの座標 M [x,y,z] を含む M 行 3 列の行列として指定します。

tform 入力引数を使用する場合、worldPoints 座標は tform オブジェクトの Translation プロパティと同じ単位でなければなりません。

レンズ歪みを適用するためのオプション。false または true として指定します。この引数を true に設定すると、関数はレンズ歪みを出力 imagePoints に適用します。

この引数は、cameraParameters オブジェクトを cameraParams 入力として使用する場合にのみ有効です。

出力引数

すべて折りたたむ

イメージ ポイント。点の座標 M [x,y] の M 行 2 列の行列として返されます。

有効なインデックス。イメージの境界内にある imagePoints 出力内の有効なイメージ ポイントのインデックスを指定する M 行 1 列の logical 配列として返されます。インデックスに対応するワールド ポイントは、カメラの視野内にあります。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2016b で導入

すべて折りたたむ

R2022b: 非推奨

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

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

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

  • 引数 intrinsicsworldPoints の順序を入れ替えます。

  • 引数 tform を使用して、変換を rigidtform3d オブジェクトとして指定します。world2img は、入力引数 rotationMatrixtranslationVector をサポートしていません。tformT プロパティで、rotationMatrix の転置または変換行列の転置を使用して rigidtform3d オブジェクトを作成することに注意してください。

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

この例では、変換を回転行列と並進ベクトルとして指定し、関数 worldToImage を使用して 3 次元ワールド ポイントをイメージ上の点に投影します。

imagePoints = worldToImage(intrinsics, ...
    rotationMatrix,translationVector,worldPoints);

この例では、変換を rigidtform3d オブジェクトとして指定し、関数 world2img を使用して 3 次元ワールド ポイントをイメージ上の点に投影します。回転行列 rotationMatrix の転置を使用して rigidtform3d オブジェクトを作成することに注意してください。

tform = rigidtform3d(rotationMatrix',translationVector);
imagePoints = world2img(worldPoints,tform,intrinsics);

この例では、左から乗算する規則で幾何学的変換行列 A の転置を使用して変換 rigid3d オブジェクトを指定し、関数 worldToImage を使用して 3 次元ワールド ポイントをイメージ上の点に投影します。

A = [1 0 0 0; 0 1 0 0; 0 0 1 -10; 0 0 0 1];
tformOld = rigid3d(A');
imagePoints = worldToImage(intrinsics,tformOld,worldPoints);

この例では、幾何学的変換行列 A を使用して変換を rigidtform3d オブジェクトとして指定し、関数 world2img を使用して 3 次元ワールド ポイントをイメージ上の点に投影します。

A = [1 0 0 0; 0 1 0 0; 0 0 1 -10; 0 0 0 1];
tform = rigidtform3d(A);
imagePoints = world2img(worldPoints,tform,intrinsics);

代わりに、既存の rigid3d オブジェクト tformOld から開始する場合は、tformOld のプロパティ T をクエリすることにより、右から乗算する規則で幾何学的変換行列を取得できます。

T = tformOld.T;
tform = rigidtform3d(T');
imagePoints = world2img(worldPoints,tform,intrinsics);