Main Content

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

estimateEssentialMatrix

イメージのペア内の対応する点から基本行列を推定

説明

E = estimateEssentialMatrix(matchedPoints1,matchedPoints2,intrinsics) は、M-estimator sample consensus (MSAC) アルゴリズムを使用して、3 行 3 列の基本行列 E を返します。入力点には、M 個の [x,y] 座標の M 行 2 列の行列、または KAZEPoints オブジェクト、SIFTPoints オブジェクト、SURFPoints オブジェクト、MSERRegions オブジェクト、BRISKPoints オブジェクト、cornerPoints オブジェクトを使用できます。instinsics オブジェクトには、イメージの撮影に使用されたカメラの内部パラメーターが含まれます。

E = estimateEssentialMatrix(matchedPoints1,matchedPoints2,intrinsics1,intrinsics2) は、異なるカメラで撮影された 2 つのイメージに関連する基本行列を返します。intrinsics1intrinsics2 は、それぞれカメラ 1 とカメラ 2 の内部パラメーターを含む cameraIntrinsics オブジェクトです。

[E,inliersIndex] = estimateEssentialMatrix(___) はさらに、基本行列の計算に使用される M 行 1 列の logical ベクトル inliersIndex を返します。対応する点が基礎行列の計算に使用されている場合、関数がベクトルの要素を true に設定します。使用されていない場合、要素は false に設定されます。

[E,inliersIndex,status] = estimateEssentialMatrix(___) はさらに、点の有効性を示すステータス コードを返します。

[___] = estimateEssentialMatrix(___,Name=Value) は、前の構文にある引数の任意の組み合わせに加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、(MaxNumTrials=500) は、外れ値を見つけるためのランダム試行の最大回数を 500 に設定します。

すべて折りたたむ

事前計算されたカメラ パラメーターを含む MAT ファイルをワークスペースに読み込みます。

load upToScaleReconstructionCameraParameters.mat

2 つのイメージを読み取り、歪みを補正します。

imageDir = fullfile(toolboxdir("vision"),"visiondata",...
    "upToScaleReconstructionImages");
images = imageDatastore(imageDir);
I1 = undistortImage(readimage(images,1),cameraParams);
I2 = undistortImage(readimage(images,2),cameraParams);
I1gray = im2gray(I1);
I2gray = im2gray(I2);

各イメージで特徴点を検出します。

imagePoints1 = detectSURFFeatures(I1gray);
imagePoints2 = detectSURFFeatures(I2gray);

各イメージから特徴記述子を抽出します。

features1 = extractFeatures(I1gray,imagePoints1,Upright=true);
features2 = extractFeatures(I2gray,imagePoints2,Upright=true);

イメージ間の特徴をマッチします。

indexPairs = matchFeatures(features1,features2);
matchedPoints1 = imagePoints1(indexPairs(:,1));
matchedPoints2 = imagePoints2(indexPairs(:,2));
figure
showMatchedFeatures(I1,I2,matchedPoints1,matchedPoints2);
title("Putative Matches")

Figure contains an axes object. The axes object with title Putative Matches contains 4 objects of type image, line. One or more of the lines displays its values using only markers

基本行列を推定します。

[E,inliers] = estimateEssentialMatrix(matchedPoints1,matchedPoints2,...
 cameraParams);

インライアのマッチを表示します。

inlierPoints1 = matchedPoints1(inliers);
inlierPoints2 = matchedPoints2(inliers);
figure
showMatchedFeatures(I1,I2,inlierPoints1,inlierPoints2);
title("Inlier Matches")

Figure contains an axes object. The axes object with title Inlier Matches contains 4 objects of type image, line. One or more of the lines displays its values using only markers

入力引数

すべて折りたたむ

イメージ 1 の対応する点の座標。M 個の [x,y] 座標の M 行 2 列の行列、または KAZEPoints オブジェクト、SIFTPoints オブジェクト、SURFPoints オブジェクト、BRISKPoints オブジェクト、MSERRegions オブジェクト、cornerPoints オブジェクトとして指定します。matchedPoints1 入力には、matchFeatures などの関数を使用して推定的にマッチされる少なくとも 5 つの点が含まれていなければなりません。

イメージ 1 の対応する点の座標。M 個の [x,y] 座標の M 行 2 列の行列、または KAZEPoints オブジェクト、SIFTPoints オブジェクト、SURFPoints オブジェクト、MSERRegions オブジェクト、BRISKPoints オブジェクト、cornerPoints オブジェクトとして指定します。matchedPoints2 入力には、matchFeatures などの関数を使用して推定的にマッチされる少なくとも 5 つの点が含まれていなければなりません。

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

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

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

名前と値の引数

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

例: estimateEssentialMatrix(matchedPoints1,matchedPoints2,intrinsics,MaxNumTrials=500) は、外れ値を見つけるためのランダム試行の最大回数を 500 に設定します。

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

例: estimateEssentialMatrix(matchedPoints1,matchedPoints2,intrinsics,"MaxNumTrials",500) は、外れ値を見つけるためのランダム試行の最大回数を 500 に設定します。

外れ値を検出するためのランダム試行の最大回数。'MaxNumTrials' と正の整数で構成されるコンマ区切りのペアとして指定します。試行の実際の回数は、matchedPoints1matchedPoints2 および Confidence パラメーターの値によって異なります。速度と精度が最適になるように、ランダム試行の回数を選択します。

最大数のインライアの検出に関する目的の信頼度。'Confidence' と (0,100) の範囲のパーセント比スカラー値で構成されるコンマ区切りのペアとして指定します。この値を大きくすると出力のロバスト性は向上しますが、計算量が増加します。

Sampson 距離のしきい値。'MaxDistance' とスカラー値とで構成されるコンマ区切りのペアとして指定します。関数は、このしきい値を使用して、二乗されたピクセルで返された外れ値を検出します。Sampson 距離は、点とエピポーラ線の間の幾何学的距離の二乗の 1 次推定です。この値を大きくするとアルゴリズムの収束が早くなりますが、結果の精度に悪影響を与えることがあります。

出力引数

すべて折りたたむ

基本行列。カメラの既知の内部パラメーターをもつ入力 matchedPoints1 および matchedPoints2 の点から計算される 3 行 3 列の行列として返されます。

[P21]*EssentialMatrix*[P11]'=0

イメージ 1 の点である P1 (正規化されたイメージ座標) は、イメージ 2 の点 P2 に対応します。

コンピューター ビジョンでは、基本行列は、ステレオ イメージ内の正規化されたイメージ座標の対応する点を関連付ける 3 行 3 列の行列になります。2 台のカメラで 2 つの異なる位置から 3 次元シーンを見る場合、3 次元の点とその 2 次元イメージへの投影との間の幾何学的関係が、イメージ ポイント間の制約となります。同じシーンの 2 つのイメージは、エピポーラ幾何によって関連付けられます。

データ型: double

インライアのインデックス。M 行 1 列の論理インデックス ベクトルとして返されます。要素が true に設定されている場合、matchedPoints1matchedPoints2 の対応するインデックス付きのマッチ点を使用して基本行列が計算されていることを示します。要素が false に設定されている場合、インデックス付きの点が計算に使用されていないことを意味します。

データ型: logical

ステータス コード。次のいずれかの値として返されます。

ステータス
0:エラーなし。
1:matchedPoints1matchedPoints2 に十分な数の点が含まれていません。少なくとも 5 つの点が必要です。
2:十分な数のインライアが見つかりませんでした。少なくとも 5 つのインライアが必要です。

データ型: int32

ヒント

カメラの内部パラメーターがわかっている場合には、estimateEssentialMatrix を使用します。内部パラメーターは、カメラ キャリブレーター アプリを使用して取得できます。そうでない場合、カメラの内部パラメーターを必要としない関数 estimateFundamentalMatrix を使用できます。基礎行列は共面ワールド ポイントからは推定できません。

参照

[1] Kukelova, Z., M. Bujnak, and T. Pajdla Polynomial Eigenvalue Solutions to the 5-pt and 6-pt Relative Pose Problems. Leeds, UK: BMVC, 2008.

[2] Nister, D.. “An Efficient Solution to the Five-Point Relative Pose Problem.” IEEE Transactions on Pattern Analysis and Machine Intelligence.Volume 26, Issue 6, June 2004.

[3] 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 で導入

すべて展開する