このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
extrinsics
(非推奨) キャリブレートされたカメラの位置を計算
extrinsics
は推奨されません。代わりに関数 estimateExtrinsics
を使用してください。詳細については、互換性の考慮事項を参照してください。
説明
[
は、3 次元回転行列と 3 次元並進ベクトルを返し、ワールド座標の点をカメラ座標系に変換できるようにします。rotationMatrix
,translationVector
] = extrinsics(imagePoints
,worldPoints
,cameraParams
)
例
カメラの外部パラメーターを計算
一連のキャリブレーション イメージを作成します。
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,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);
入力引数
imagePoints
— 点のイメージ座標
M 行 2 列の配列
点のイメージ座標。M 行 2 列の配列として指定します。配列には M 個の [x y] 座標が含まれます。入力 imagePoints
と入力 worldPoints
は両方が double
であるか、両方が single
でなければなりません。
データ型: single
| double
worldPoints
— イメージ座標に対応するワールド座標
M 行 2 列の行列
イメージ座標に対応するワールド座標。M 行 2 列の行列として指定します。入力 imagePoints
と入力 worldPoints
は両方が double
であるか、両方が single
でなければなりません。関数は、z= 0 と同一平面上にあるものと仮定し、点の数 M は少なくとも 4 つなければなりません。
データ型: single
| double
cameraParams
— カメラ パラメーター
cameraParameters
オブジェクト | cameraIntrinsics
オブジェクト | fisheyeIntrinsics
オブジェクト
カメラ パラメーターを保存するオブジェクト。cameraParameters
, cameraIntrinsics
オブジェクトまたは fisheyeIntrinsics
オブジェクトとして指定します。これらのオブジェクトは、関数 estimateCameraParameters
、関数 estimateFisheyeParameters
またはカメラ キャリブレーター アプリで返されます。オブジェクトには、カメラの内部パラメーター、外部パラメーターおよびレンズ歪みパラメーターが含まれます。
出力引数
rotationMatrix
— 3 次元回転
3 行 3 列の行列
3 次元回転。3 行 3 列の行列として返されます。回転行列を並進ベクトルと共に使用して、ワールド座標からカメラ座標系に点を変換できます。
入力 imagePoints
と入力 worldPoints
をクラス double
に設定すると、関数は rotationMatrix
および translationVector
を double
として返します。そうでない場合、single
になります。
translationVector
— 3 次元並進
1 行 3 列のベクトル
3 次元並進。1 行 3 列のベクトルとして返されます。回転行列を並進ベクトルと共に使用して、ワールド座標からカメラ座標系に点を変換できます。
入力 imagePoints
と入力 worldPoints
をクラス double
に設定すると、関数は rotationMatrix
および translationVector
を double
として返します。そうでない場合、single
になります。
アルゴリズム
関数 extrinsics
は、worldPoints
が M 行 2 列の行列として指定されているかどうかに応じて、2 つの異なるアルゴリズムを使用して外部パラメーターを計算します。z= 0 である同一平面上の点については、M 行 2 列の行列を使用してください。
関数 extrinsics
は、1 つのイメージの回転行列と並進ベクトルを閉形式で計算します。キャリブレーション中は、すべてのキャリブレーション イメージで再投影誤差が最小になるように、外部パラメーターが数値的に推定されます。そのため、キャリブレーション イメージの 1 つに対して関数 extrinsics
を使用すると、キャリブレーション中に得られたものとは少し異なる回転行列と並進ベクトルが返されることがあります。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
MATLAB Function ブロックでの使用はサポートされていません。
fisheyeIntrinsics
オブジェクトのcameraParams
入力としての使用はサポートされていません。
バージョン履歴
R2014a で導入R2022b: 非推奨
R2022b 以降、Computer Vision Toolbox™ のほとんどの関数は、左から乗算する規則を使用して幾何学的変換を作成および実行します。ただし、関数 extrinsics
は、右から乗算する規則を使用します。現時点で extrinsics
を削除する予定はありませんが、左から乗算する規則をサポートする関数 estimateExtrinsics
に切り替えることで、幾何学的変換ワークフローを効率化できます。詳細については、Migrate Geometric Transformations to Premultiply Conventionを参照してください。
コードを更新するには、次のようにします。
関数名
extrinsics
のインスタンスをestimateExtrinsics
に変更します。引数
cameraParams
にcameraIntrinsics
オブジェクトまたはfisheyeIntrinsics
オブジェクトを指定します。cameraParameters
オブジェクトがある場合は、Intrinsics
プロパティをクエリすることでcameraIntrinsics
オブジェクトを取得できます。Intrinsics
プロパティが関数isempty
に従って空だった場合、Intrinsics
プロパティをクエリする前に、cameraParameters
オブジェクトのImageSize
プロパティを任意のベクトルに設定します。次に例を示します。load worldToImageCorrespondences.mat if(isempty(cameraParams.Intrinsics)) cameraParams.ImageSize = [128 128]; end intrinsics = cameraParams.Intrinsics;
2 つの出力引数
rotationMatrix
とtranslationVector
を 1 つの出力引数camExtrinsics
に置き換えます。引数camExtrinsics
はrigidtform3d
オブジェクトを返します。方向の行列と位置のベクトルを取得する必要がある場合は、オブジェクトのR
プロパティとTranslation
プロパティをクエリできます。R
の値がrotationMatrix
の転置であることに注意してください。
次の表は、コードを更新する方法の例を示しています。
非推奨の使用方法 | 推奨される代替案 |
---|---|
この例では、関数 [rotMatrix,transVector] = extrinsics( ...
imagePoints,worldPoints,cameraParams); | この例では、 intrinsics = cameraParams.Intrinsics;
camExtrinsics = estimateExtrinsics( ...
imagePoints,worldPoints,intrinsics); カメラの方向と位置を取得する必要がある場合は、 rotMatrix = camExtrinsics.R; transVector = camExtrinsics.Translation; 右から乗算する規則を使用していて方向が必要な場合は、 rotMatrix = camExtrinsics.R'; |
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)