このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
cameraMatrix
(非推奨) カメラ射影行列
cameraMatrix
は推奨されません。代わりに関数 cameraProjection
を使用してください。詳細については、互換性の考慮事項を参照してください。
構文
説明
は、4 行 3 列のカメラ射影行列 camMatrix
= cameraMatrix(cameraParams
,tform
)camMatrix
を返します。これを使用して、同次座標の 3 次元ワールド ポイントをイメージに投影できます。cameraParams
は、cameraParameters
オブジェクトまたは cameraIntrinsics
オブジェクトです。
は、4 行 3 列のカメラ射影行列を返します。この行列を使用して、同次座標の 3 次元ワールド ポイントをイメージに投影できます。camMatrix
= cameraMatrix(cameraParams
,rotationMatrix
,translationVector
)
例
カメラ行列の計算
一連のキャリブレーション イメージを作成します。
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');
イメージの歪みを補正します。
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
入力引数
cameraParams
— カメラ パラメーターを格納するオブジェクト
cameraParameters
オブジェクト | cameraIntrinsics
オブジェクト
カメラ パラメーター。cameraParameters
または cameraIntrinsics
オブジェクトとして指定します。関数 estimateCameraParameters
を使用して、cameraParameters
オブジェクトを返すことができます。cameraParameters
オブジェクトには、カメラの内部パラメーター、外部パラメーターおよびレンズ歪みパラメーターが含まれます。
tform
— 変換
rigid3d
オブジェクト
ワールド座標からカメラ座標への変換。rigid3d
オブジェクトとして指定します。関数 extrinsics
を使用して、回転と並進を取得し、tform
オブジェクトを作成できます。
rotationMatrix
— カメラの回転
3 行 3 列の行列
カメラの回転。3 行 3 列の行列として指定します。この行列は、関数 extrinsics
を使用して取得できます。関数 relativeCameraPose
を使用し、その orientation
出力を転置して、この行列を取得することもできます。rotationMatrix
入力と translationVector
入力は、実数、非スパースで、同じクラスでなければなりません。
translationVector
— カメラの並進
1 行 3 列のベクトル
カメラの並進。1 行 3 列のベクトルとして指定します。並進ベクトルは、ワールド座標からカメラ座標系への変換を示します。このベクトルは、関数 extrinsics
を使用して取得できます。次のように関数 relativeCameraPose
の location
出力と orientation
出力を使用して、このベクトルを取得することもできます。
translationVector
= -relativeLocation
*relativeOrientation'
translationVector
入力は、実数、非スパースで、同じクラスでなければなりません。
出力引数
camMatrix
— カメラ射影行列
4 行 3 列の行列
カメラ射影行列。4 行 3 列の行列として返されます。この行列には、イメージに投影される同次座標の 3 次元ワールド ポイントが含まれます。rotationMatrix
と translationVector
を double
に設定すると、関数は camMatrix
を double
として返します。そうでない場合、camMatrix
を single
として返します。
関数は、次のように camMatrix
を計算します。
camMatrix
= [rotationMatrix
; translationVector
] × K
K: 内部パラメーターの行列
w × [x,y,1] = [X,Y,Z,1] × camMatrix
(X,Y,Z): 点のワールド座標 |
(x,y): 対応するイメージ ポイントの座標 |
w: 任意のスケール係数 |
データ型: single
| double
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
MATLAB Function ブロックでの使用はサポートされていません。
バージョン履歴
R2014b で導入R2022b: 非推奨
R2022b 以降、Computer Vision Toolbox™ のほとんどの関数は、左から乗算する規則を使用して幾何学的変換を作成および実行します。ただし、関数 cameraMatrix
は、右から乗算する規則を使用します。現時点で cameraMatrix
を削除する予定はありませんが、左から乗算する規則をサポートする関数 cameraProjection
に切り替えることで、幾何学的変換ワークフローを効率化できます。詳細については、Migrate Geometric Transformations to Premultiply Conventionを参照してください。
コードを更新するには、次を行います。
関数名
cameraMatrix
のインスタンスをcameraProjection
に変更します。引数
cameraParams
にcameraIntrinsics
オブジェクトを指定します。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
は、入力引数rotationMatrix
とtranslationVector
をサポートしていません。tform
のT
プロパティで、rotationMatrix
の転置または変換行列の転置を使用してrigidtform3d
オブジェクトを作成することに注意してください。
非推奨の使用方法 | 推奨される代替案 |
---|---|
この例では、変換を回転行列と並進ベクトルとして指定し、関数 camMatrix = cameraMatrix(cameraParams,rotationMatrix,translationVector) | この例では、変換を intrinsics = cameraParams.Intrinsics; tform = rigidtform3d(rotationMatrix',translationVector); camMatrix = cameraProjection(intrinsics,tform); |
この例では、変換を camMatrix = cameraMatrix(cameraParams,tformOld); | この例では、既存の intrinsics = cameraParams.Intrinsics; tform = rigidtform3d(tformOld.T'); camMatrix = cameraProjection(intrinsics,tform); |
参考
アプリ
関数
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)