最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

estimateWorldCameraPose

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

説明

[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) は、前述の構文のいずれかを使用し、1 つ以上の Name,Value 引数ペアで指定されたオプションを追加で使用します。

すべて折りたたむ

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

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 オブジェクトには、カメラの内部パラメーター、外部パラメーターおよびレンズ歪みパラメーターが含まれます。

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: 'MaxNumTrials',1000

ランダム試行の最大回数。'MaxNumTrials' と正の整数スカラーで構成されるコンマ区切りのペアとして指定します。試行の実際の回数は、イメージの数とワールド座標点の数、および MaxReprojectionErrorConfidence プロパティの値によって異なります。試行回数を多くすると出力のロバスト性は向上しますが、計算量が増加します。

最大数のインライアの検出に関する信頼度。'Confidence' と (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. Volume 78, Issue 1, April 2000, pp. 138-156.

拡張機能

R2016b で導入