cameraProjection
説明
は、3 行 4 列のカメラ射影行列 camProjection
= cameraProjection(intrinsics
,tform
)camProjection
を返します。camProjection
を使用して、変換 tform
に従って同次座標の 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")
イメージの歪みを補正します。
[im,newOrigin] = undistortImage(imOrig,intrinsics,OutputView="full");
新しいイメージで参照オブジェクトを検索します。
[imagePoints,boardSize] = detectCheckerboardPoints(im);
イメージ座標系のシフトを補正します。
imagePoints = imagePoints+newOrigin;
新しい外部パラメーターを計算します。
camExtrinsics = estimateExtrinsics(imagePoints,worldPoints,intrinsics);
カメラ射影行列を計算します。
P = cameraProjection(intrinsics,camExtrinsics)
P = 3×4
105 ×
0.0157 0.0404 0.0199 8.9399
-0.0271 -0.0046 0.0387 9.4399
0.0000 -0.0000 0.0000 0.0072
入力引数
intrinsics
— カメラの内部パラメーター
cameraIntrinsics
オブジェクト
カメラの内部パラメーター。cameraIntrinsics
オブジェクトとして指定します。これらのオブジェクトは、カメラの内部キャリブレーション パラメーターに関する情報を格納します (レンズ歪みパラメーターなど)。
tform
— 変換
rigidtform3d
オブジェクト
ワールド座標からカメラ座標への変換。rigidtform3d
オブジェクトとして指定します。関数 estimateExtrinsics
を使用して、tform
オブジェクトを作成できます。オブジェクトの R
プロパティと Translation
プロパティは、同次座標の 3 次元ワールド ポイントをイメージに投影するために必要な回転行列と並進を表します。
出力引数
camProjection
— カメラ射影行列
3 行 4 列の行列
カメラ射影行列。3 行 4 列の行列として返されます。この行列には、イメージに投影される同次座標の 3 次元ワールド ポイントが含まれます。
関数は、内部パラメーターの行列 K および tform
オブジェクトの R
プロパティと Translation
プロパティを使用して、次のように camProjection
を計算します。
camProjection
= K × [tform.R tform.Translation']
カメラ射影行列と同次座標を使用して、ワールド ポイントをイメージに投影できます。
w × [x,y,1]' = camProjection
× [X,Y,Z,1]'
(X,Y,Z) は点のワールド座標 |
(x,y) は対応するイメージ ポイントの座標 |
w は任意のスケール係数 |
変換 tform
の R
プロパティと Translation
プロパティのデータ型が double
の場合、関数は camProjection
を double
として返します。それ以外の場合、関数は camProjection
を single
として返します。
データ型: single
| double
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
MATLAB Function ブロックでの使用はサポートされていません。
バージョン履歴
R2022b で導入R2022b: cameraMatrix
よりも推奨
R2022b 以降、Computer Vision Toolbox™ の多くの関数は、左から乗算する規則を使用して幾何学的変換を作成および実行します。ただし、関数 cameraMatrix
は、右から乗算する規則を使用します。現時点で cameraMatrix
を削除する予定はありませんが、左から乗算する規則をサポートする関数 cameraProjection
に切り替えることで、幾何学的変換ワークフローを効率化できます。詳細については、Migrate Geometric Transformations to Premultiply Conventionを参照してください。
参考
アプリ
関数
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)