Main Content

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

estimateEssentialMatrix

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

説明

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

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

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

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

[___] = estimateEssentialMatrix(___,Name,Value) は、1 つ以上の Name,Value ペアの引数によって指定された追加オプションを使用します。

すべて折りたたむ

事前に計算されたカメラ パラメーターを読み込みます。

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. The axes with title Putative Matches contains 4 objects of type image, line.

基本行列を推定します。

[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. The axes with title Inlier Matches contains 4 objects of type image, line.

入力引数

すべて折りたたむ

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

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

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

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

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

名前と値のペアの引数

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

例: 'MaxNumTrials', 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 で導入