Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

estworldpose

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

R2022b 以降

    説明

    worldPose = estworldpose(imagePoints,worldPoints,intrinsics) は、ワールド座標系でキャリブレーションされたカメラの姿勢を返します。入力 worldPoints は、ワールド座標系で定義しなければなりません。

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

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

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

    [___] = estworldpose(___,Name=Value) は、前述の構文のいずれかを使用して、1 つ以上の名前と値の引数によって指定された追加オプションを使用します。

    すべて折りたたむ

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

    load("worldToImageCorrespondences.mat");
    cameraParams.ImageSize = [128 128];
    intrinsics = cameraParams.Intrinsics;

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

    worldPose = estworldpose(imagePoints,worldPoints,intrinsics);

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

    pcshow(worldPoints,VerticalAxis="Y",VerticalAxisDir="down", ...
        MarkerSize=30);
    hold on
    plotCamera(Size=10,Orientation=worldPose.R', ...
        Location=worldPose.Translation);
    hold off

    Figure contains an axes object. The axes object contains 11 objects of type line, text, patch, scatter.

    入力引数

    すべて折りたたむ

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

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

    データ型: single | double

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

    データ型: single | double

    カメラの内部パラメーター。cameraIntrinsics オブジェクトとして指定します。

    名前と値の引数

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

    例: MaxNumTrials=1000

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

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

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

    出力引数

    すべて折りたたむ

    ワールド座標におけるカメラの姿勢。rigidtform3d オブジェクトとして返されます。オブジェクトの R プロパティと Translation プロパティは、カメラの方向と位置を表します。

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

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

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

    ヒント

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

    参照

    [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.

    拡張機能

    バージョン履歴

    R2022b で導入

    すべて展開する