Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

estimateWorldCameraPose

(非推奨) 3 次元から 2 次元への対応関係からカメラの姿勢を推定

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

説明

[worldOrientation,worldLocation] = estimateWorldCameraPose(imagePoints,worldPoints,cameraParams) は、キャリブレートされたカメラの方向と位置をワールド座標系で返します。入力 worldPoints は、ワールド座標系で定義しなければなりません。

この関数は、透視 3 点 (P3P) アルゴリズムを使用して透視 n 点 (PnP) 問題を解きます[1]。関数は、M-estimator sample consensus (MSAC) アルゴリズムを使用して、外れ値の誤った対応関係を排除します。インライアは、カメラの姿勢の計算に使用されるイメージ ポイントとワールド ポイントの間の対応関係です。

[___,inlierIdx] = estimateWorldCameraPose(imagePoints,worldPoints,cameraParams) は、前の構文の引数に加え、カメラの姿勢の計算に使用されたインライアのインデックスを返します。

[___,status] = estimateWorldCameraPose(imagePoints,worldPoints,cameraParams) はさらに、点の数が十分であったかどうかを示すステータス コードを返します。

[___] = estimateWorldCameraPose(___,Name,Value) は、前述の構文のいずれかを使用し、Name,Value ペアの引数を 1 つ以上指定したオプションを追加で使用します。

すべて折りたたむ

事前に計算されたワールドとイメージの対応関係を読み込みます。

data = load('worldToImageCorrespondences.mat');

ワールド カメラの姿勢を推定します。

[worldOrientation,worldLocation] = estimateWorldCameraPose(...
     data.imagePoints,data.worldPoints,data.cameraParams);

ワールド ポイントをプロットします。

 pcshow(data.worldPoints,'VerticalAxis','Y','VerticalAxisDir','down', ...
     'MarkerSize',30);
 hold on
 plotCamera('Size',10,'Orientation',worldOrientation,'Location',...
     worldLocation);
 hold off

入力引数

すべて折りたたむ

歪み補正後のイメージ ポイントの座標。[x,y] 座標の M 行 2 列の配列として指定します。イメージ ポイントの数 M は、少なくとも 4 つなければなりません。

関数ではレンズ歪みが考慮されません。関数 undistortImage を使用してイメージ ポイント検出前にイメージの歪みを補正するか、関数 undistortPoints を使用してイメージ ポイント自体の歪みを補正できます。

データ型: single | double

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

データ型: single | double

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

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値の各ペアを区切り、Name を引用符で囲みます。

例: 'MaxNumTrials',1000

ランダム試行の最大回数。正の整数スカラーとして指定します。試行の実際の回数は、イメージの数とワールド ポイントの数、および MaxReprojectionErrorConfidence プロパティの値によって異なります。試行回数を多くすると出力のロバスト性は向上しますが、計算量が増加します。

最大数のインライアの検出の信頼度。(0,100) の範囲のスカラーとして指定します。この値を大きくすると出力のロバスト性は向上しますが、計算量が増加します。

外れ値を検出するための再投影誤差しきい値。ピクセル単位の正の数値スカラーとして指定します。この値を大きくするとアルゴリズムの収束が早くなりますが、結果の精度が低下することがあります。MaxReprojectionError よりも大きい再投影誤差のある対応関係は外れ値と見なされ、カメラの姿勢の計算に使用されません。

出力引数

すべて折りたたむ

ワールド座標におけるカメラの方向。3 行 3 列の行列として返されます。

データ型: double

カメラの位置。1 行 3 列の単位ベクトルとして返されます。

データ型: double

インライア点のインデックス。M 行 1 列の logical ベクトルとして返されます。ベクトル内の logical true の値は、imagePointsworldPoints で表現されるインライアに対応します。

ステータス コード。01 または 2 として返されます。

ステータス コードステータス
0エラーなし
1imagePointsworldPoints に十分な数の点が含まれていません。最低 4 つの点が必要です。
2十分な数のインライアが見つかりませんでした。最低 4 つのインライアが必要です。

参照

[1] Gao, X.-S., X.-R. Hou, J. Tang, and H.F. Cheng. "Complete Solution Classification for the Perspective-Three-Point Problem." IEEE Transactions on Pattern Analysis and Machine Intelligence. Volume 25,Issue 8, pp. 930–943, August 2003.

[2] Torr, P.H.S., and A. Zisserman. "MLESAC: A New Robust Estimator with Application to Estimating Image Geometry." Computer Vision and Image Understanding. 78, no. 1 (April 2000): 138–56. https://doi.org/10.1006/cviu.1999.0832.

拡張機能

バージョン履歴

R2016b で導入

すべて展開する