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

estimateFundamentalMatrix

ステレオ イメージ内の対応する点から基礎行列を推定

説明

estimateFundamentalMatrix は、ステレオ イメージ内の対応する点から基礎行列を推定します。この関数は、対応するすべての点を使用するか、または外れ値を排除するように構成できます。Random-sample consensus (RANSAC) などのロバストな推定手法を使用して、外れ値を排除できます。ロバストな推定を使用すると、アルゴリズムのランダム性のために、すべての実行で結果が同一にならない場合があります。

F = estimateFundamentalMatrix(matchedPoints1,matchedPoints2) は、最小二乗中央値 (LMedS) 法を使用して、3 行 3 列の基礎行列 F を返します。入力点には、M 個の [x y] 座標の M 行 2 列の行列、または KAZEPoints オブジェクト、SURFPoints オブジェクト、MSERRegions オブジェクト、ORBPoints オブジェクト、cornerPoints オブジェクトを使用できます。

[F,inliersIndex] = estimateFundamentalMatrix(matchedPoints1,matchedPoints2) はさらに、基礎行列の計算に使用されるインライアに対して、論理インデックス inliersIndex を返します。inliersIndex 出力は、M 行 1 列のベクトルです。対応する点が基礎行列の計算に使用されている場合、関数がベクトルの要素を true に設定します。使用されていない場合、要素は false に設定されます。

[F,inliersIndex,status] = estimateFundamentalMatrix(matchedPoints1,matchedPoints2) はさらに、ステータス コードを返します。

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

すべて折りたたむ

RANSAC 法では、入力点が既に推定的にマッチされている必要があります。このために、たとえば関数 matchFeatures を使用できます。推定的にマッチされた点の中にまだ外れ値が含まれている可能性がある場合には、RANSAC アルゴリズムを使用すると排除できます。

ステレオ点を読み込みます。

load stereoPointPairs

基礎行列を推定します。

fRANSAC = estimateFundamentalMatrix(matchedPoints1,...
    matchedPoints2,'Method','RANSAC',...
    'NumTrials',2000,'DistanceThreshold',1e-4)
fRANSAC = 3×3

    0.0000   -0.0004    0.0348
    0.0004    0.0000   -0.0937
   -0.0426    0.0993    0.9892

推定的にマッチされた点を読み込みます。

load stereoPointPairs
[fLMedS, inliers] = estimateFundamentalMatrix(matchedPoints1,matchedPoints2,'NumTrials',2000)
fLMedS = 3×3

    0.0000   -0.0004    0.0349
    0.0004    0.0000   -0.0938
   -0.0426    0.0994    0.9892

inliers = 18x1 logical array

   1
   1
   1
   1
   1
   1
   0
   1
   0
   0
      ⋮

ステレオ イメージを読み込みます。

I1 = imread('viprectification_deskLeft.png');
I2 = imread('viprectification_deskRight.png');

推定的にマッチされた点を表示します。

figure;
showMatchedFeatures(I1,I2,matchedPoints1,matchedPoints2,'montage','PlotOptions',{'ro','go','y--'});
title('Putative point matches');

インライア点を表示します。

figure;
showMatchedFeatures(I1, I2, matchedPoints1(inliers,:),matchedPoints2(inliers,:),'montage','PlotOptions',{'ro','go','y--'});
title('Point matches after outliers were removed');

ステレオ点のペアを読み込みます。

load stereoPointPairs

外れ値が含まれない入力点の基礎行列を計算します。

inlierPts1 = matchedPoints1(knownInliers,:);
inlierPts2 = matchedPoints2(knownInliers,:);
fNorm8Point = estimateFundamentalMatrix(inlierPts1,inlierPts2,'Method','Norm8Point')
fNorm8Point = 3×3

    0.0000   -0.0004    0.0348
    0.0004    0.0000   -0.0937
   -0.0426    0.0993    0.9892

入力引数

すべて折りたたむ

イメージ 1 の対応する点の座標。M 個の [x y] 座標の M 行 2 列の行列として、または KAZEPoints オブジェクト、SURFPoints オブジェクト、MSERRegions オブジェクト、ORBPoints オブジェクト、cornerPoints オブジェクトとして指定します。matchedPoints1 入力には、単一の平面上 (壁、テーブル、本など) に存在せず、matchFeatures などの関数を使用して推定的にマッチされる点が含まれていなければなりません。

イメージ 1 の対応する点の座標。M 個の [x y] 座標の M 行 2 列の行列として、または KAZEPoints オブジェクト、SURFPoints オブジェクト、MSERRegions オブジェクト、ORBPoints オブジェクト、cornerPoints オブジェクトとして指定します。matchedPoints2 入力には、単一の平面上 (壁、テーブル、本など) に存在せず、matchFeatures などの関数を使用して推定的にマッチされる点が含まれていなければなりません。

名前と値のペアの引数

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

例: 'Method', 'RANSAC' は、基礎行列を計算する手法として RANSAC を指定します。

基礎行列の計算に使用する手法。'Method' と次の 5 つの文字ベクトルのいずれかで構成されるコンマ区切りのペアとして指定します。

Norm8Point正規化 8 点アルゴリズム。信頼性の高い結果を生成するには、入力 matchedPoints1matchedPoints2 が正確にマッチしなければなりません。
LMedS最小二乗中央値。matchedPoints1matchedPoints2 の点の少なくとも 50% がインライアであることがわかっている場合には、この手法を選択します。
RANSACRANdom SAmple Consensus。インライアに距離のしきい値を設定する場合には、この手法を選択します。
MSACM-estimator SAmple Consensus。インライアに距離のしきい値を設定する場合には、M-estimator SAmple Consensus 法を選択します。通常、MSAC 法は RANSAC 法より迅速に収束します。
LTS最小二乗トリム。matchedPoints1matchedPoints2 のインライアの最小パーセント比がわかっている場合には、最小二乗トリム法を選択します。通常、LTS 法は LMedS 法より迅速に収束します。

Norm8Point アルゴリズムを使用して信頼性の高い結果を生成するには、matchedPoints1matchedPoints2 の入力が正確にマッチしなければなりません。他の手法では外れ値を許容できるため、推定的にマッチされた入力点のみが必要です。関数 matchFeatures を使用して推定的にマッチされた点を取得できます。

基礎行列クラス。'OutputClass' と、'double' または 'single' のいずれかの文字ベクトルで構成されるコンマ区切りのペアとして指定します。これは、基礎行列と関数の内部計算のクラスを指定します。

外れ値を検出するためのランダム試行の回数。'NumTrials' と整数値で構成されるコンマ区切りのペアとして指定します。このパラメーターは、Method パラメーターを LMedSRANSACMSAC または LTS に設定した場合に適用されます。

Method パラメーターを LMedS または LTS に設定すると、関数は試行の実際の回数をパラメーター値として使用します。

Method パラメーターを RANSAC または MSAC に設定すると、関数は試行の最大回数をパラメーター値として使用します。試行の実際の回数は、matchedPoints1matchedPoints2 および Confidence パラメーターの値によって異なります。

速度と精度が最適になるようにランダム試行の回数を選択します。

代数的距離タイプまたは Sampson 距離タイプ。'DistanceType' と、Algebraic または Sampson の文字ベクトルで構成されるコンマ区切りのペアとして指定します。距離タイプは、点のペアがインライアか外れ値かを判定します。このパラメーターは、Method パラメーターを LMedSRANSACMSAC または LTS に設定した場合に適用されます。

メモ

計算を高速化するには、このパラメーターを Algebraic に設定します。幾何学的距離にするには、このパラメーターを Sampson に設定します。

データ型: char

外れ値を検出するための距離しきい値。'DistanceThreshold' と正の値で構成されるコンマ区切りのペアとして指定します。このパラメーターは、Method パラメーターを RANSAC または MSAC に設定した場合に適用されます。

最大数のインライアの検出に関する目的の信頼度。'Confidence' と (0 100) の範囲のパーセント比スカラー値で構成されるコンマ区切りのペアとして指定します。このパラメーターは、Method パラメーターを RANSAC または MSAC に設定した場合に適用されます。

入力点に含まれるインライアの最小パーセント比。'InlierPercentage' と (0 100) の範囲のパーセント比スカラー値で構成されるコンマ区切りのペアとして指定します。matchedPoints1matchedPoints2 に含まれるインライアの最小パーセント比を指定します。このパラメーターは、Method パラメーターを LTS に設定した場合に適用されます。

ランタイム エラーのレポート。'ReportRuntimeError' と logical で構成されるコンマ区切りのペアとして指定します。このパラメーターを true に設定すると、関数が matchedPoints1matchedPoints2 から基礎行列を計算できない場合にランタイム エラーをレポートします。このパラメーターを false に設定すると、status 出力をチェックして基礎行列の妥当性を検証できます。

出力引数

すべて折りたたむ

基礎行列。入力 matchedPoints1 および matchedPoints2 の点から計算される 3 行 3 列の行列として返されます。

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

ピクセル単位のイメージ 1 の matchedPoints1 の点である P1 は、イメージ 2 の matchedPoints2 の点である P2 に対応します。

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

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

データ型: logical

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

ステータス
0:エラーなし。
1:matchedPoints1matchedPoints2 に十分な数の点が含まれていません。Norm8PointRANSAC および MSAC には少なくとも 8 個の点、LMedS には 16 個の点、LTS には ceil(800/InlierPercentage) が必要です。
2:十分な数のインライアが見つかりませんでした。

データ型: int32

ヒント

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

アルゴリズム

すべて折りたたむ

基礎行列の計算

この関数は、正規化 8 点アルゴリズム [1] を使用して基礎行列を計算します。

Norm8Point 法を選択すると、関数は matchedPoints1matchedPoints2 のすべての点を使用して基礎行列を計算します。

他の手法を選択すると、関数は次のアルゴリズムを使用して外れ値を排除し、インライアから基礎行列を計算します。

  1. 基礎行列 F を 3 行 3 列の零点の行列に初期化します。

  2. ループ カウンター n をゼロに設定し、ループ回数 N を指定されたランダム試行の回数に設定します。

  3. n < N である間、次の手順を繰り返します。

    1. matchedPoints1matchedPoints2 から点のペアを 8 個ランダムに選択します。

    2. 選択した 8 個の点を使用し、正規化 8 点アルゴリズムを使用して基礎行列 f を計算します。

    3. matchedPoints1matchedPoints2 のすべての点について、f の適合度を計算します。

    4. f の適合度が F より良い場合、F を f に置き換えます。

      RANSACMSAC の場合、N を更新します。

    5. n = n + 1

RANSAC 法と MSAC 法の無作為抽出の回数

RANSAC 法と MSAC 法では、アルゴリズム ループの反復のたびにランダム試行の回数 N が更新されます。関数は、次に従って N をリセットします。

N = min( N, log(1p)log(1r8))
ここで、p は指定した信頼パラメーターを表し、r は以下に示すように計算されます。
iNsgn(dui,vi),t)/N ここで、ab の場合は sgn(a,b)=1、その他の場合は 0
RANSAC または MSAC を使用すると、アルゴリズムのランダム性のために、すべての実行で結果が同一にならない場合があります。

距離タイプ

関数には、基礎行列に従って点のペアの距離を測定するために、代数的距離と Sampson 距離の 2 つの距離タイプが用意されています。各タイプに次の方程式を使用します。u は matchedPoints1 を表し、v は matchedPoints2 を表します。

代数的距離:d(ui,vi)=(viFuiT)2
Sampson 距離:d(ui,vi)=(viFuiT)2[1(FuiT)12+(FuiT)22+1(viF)12+(viF)22]

ここで、i は対応する点のインデックスを表し、(FuiT)j2 はベクトル FuiT の j 番目のエントリの二乗を表します。

対応する点に対する基礎行列の適合度

次の表に、計算された基礎行列の適合度を各手法において判定する方法をまとめています。

メソッド適合度の測定
LMedSmedian(d(ui,vi);i=1:N) 入力点の数。値が小さいほど、適合度が高くなります。
RANSACiNsgn(dui,vi),t)/N ここで、ab の場合は sgn(a,b)=1、その他の場合は 0。t は指定されたしきい値を表します。値が大きいほど、適合度が高くなります。
MSACiNmin(d(ui,vi),t)。値が小さいほど、適合度が高くなります。
LTSiεΩd(ui,vi) ここで、Ω は点の (N x q) ペアの最初の最小値。q は指定したインライアのパーセント比を表します。値が小さいほど、適合度が高くなります。

参照

[1] Hartley, R., A. Zisserman, Multiple View Geometry in Computer Vision, Cambridge University Press, 2003.

[2] Rousseeuw, P., A. Leroy, Robust Regression and Outlier Detection, John Wiley & Sons, 1987.

[3] Torr, P. H. S., and A. Zisserman, MLESAC: A New Robust Estimator with Application to Estimating Image Geometry, Computer Vision and Image Understanding, 2000.

拡張機能

R2012b で導入