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

matchFeatures

マッチする特徴の検出

説明

indexPairs = matchFeatures(features1,features2) は、マッチする特徴のインデックスを 2 つの入力特徴セットで返します。入力特徴は、binaryFeatures オブジェクトまたは行列でなければなりません。

[indexPairs,matchmetric] = matchFeatures(features1,features2) はさらに、indexPairs によってインデックス付けされたマッチする特徴間の距離を返します。

[indexPairs,matchmetric] = matchFeatures(features1,features2,Name,Value) には、1 つ以上の Name,Value 引数ペアによって指定された追加オプションが含まれます。

すべて折りたたむ

局所近傍と Harris 法アルゴリズムを使用してイメージのペア間で対応する関心点を見つけます。

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

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

コーナーを検出します。

points1 = detectHarrisFeatures(I1);
points2 = detectHarrisFeatures(I2);

近傍特徴を抽出します。

[features1,valid_points1] = extractFeatures(I1,points1);
[features2,valid_points2] = extractFeatures(I2,points2);

特徴をマッチします。

indexPairs = matchFeatures(features1,features2);

各イメージの対応する点の位置を取得します。

matchedPoints1 = valid_points1(indexPairs(:,1),:);
matchedPoints2 = valid_points2(indexPairs(:,2),:);

対応する点を可視化します。誤ったマッチもいくつかありますが、2 つのイメージ間の変換の効果がわかります。

figure; showMatchedFeatures(I1,I2,matchedPoints1,matchedPoints2);

SURF 局所特徴検出関数を使用して、互いに回転しスケーリングされた 2 つのイメージ間での対応点を見つけます。

2 つのイメージを読み取ります。

I1 = imread('cameraman.tif');
I2 = imresize(imrotate(I1,-20),1.2);

SURF 特徴量を見つけます。

points1 = detectSURFFeatures(I1);
points2 = detectSURFFeatures(I2);

特徴を抽出します。

[f1,vpts1] = extractFeatures(I1,points1);
[f2,vpts2] = extractFeatures(I2,points2);

マッチする点の位置を取得します。

indexPairs = matchFeatures(f1,f2) ;
matchedPoints1 = vpts1(indexPairs(:,1));
matchedPoints2 = vpts2(indexPairs(:,2));

マッチする点を表示します。データにはまだ多少の外れ値が含まれていますが、マッチする特徴の表示により回転とスケーリングの効果を確認できます。

figure; showMatchedFeatures(I1,I2,matchedPoints1,matchedPoints2);
legend('matched points 1','matched points 2');

入力引数

すべて折りたたむ

特徴セット 1。binaryFeatures オブジェクトまたは M1 行 N 列の行列として指定します。行列には、M1 個の特徴が含まれます。N は各特徴ベクトルの長さに対応します。関数 extractFeatures と Fast Retina Keypoint (FREAK)、Oriented FAST and Rotated BRIEF (ORB)、または Binary Robust Invariant Scalable Keypoints (BRISK) 記述子法を使用して、binaryFeatures オブジェクトを取得できます。

特徴セット 2。binaryFeatures オブジェクトまたは M2 行 N 列の行列として指定します。行列には、M2 個の特徴が含まれます。N は各特徴ベクトルの長さに対応します。関数 extractFeatures と Fast Retina Keypoint (FREAK)、Oriented FAST and Rotated BRIEF (ORB)、または Binary Robust Invariant Scalable Keypoints (BRISK) 記述子法を使用して、binaryFeatures オブジェクトを取得できます。

名前と値のペアの引数

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

例: 'Metric','SSD' は、特徴のマッチング メトリクスに対する差の二乗和を指定します。

マッチング法。'Method' と、'Exhaustive' または 'Approximate' で構成されるコンマ区切りのペアとして指定します。手法は、features1features2 の間での最近傍の検出方法を指定します。2 つの特徴ベクトル間の距離が MatchThreshold パラメーターによって設定されたしきい値より小さい場合、これらの特徴ベクトルがマッチします。

'Exhaustive'

features1features2 の特徴ベクトル間のペアワイズ距離を計算します。

'Approximate'

効率的で適切な最近傍検索を使用します。大規模な特徴セットにはこの手法を使用します。[3]

マッチングのしきい値。'MatchThreshold' と (0,100] の範囲のスカラー パーセント値で構成されるコンマ区切りのペアとして指定します。既定値は、バイナリ特徴ベクトルの場合は 10.0、または非バイナリ特徴ベクトルの場合は 1.0 に設定されます。マッチングのしきい値は、最も強いマッチを選択するために使用できます。しきい値は、完全マッチからの距離をパーセントで表します。

2 つの特徴ベクトル間の距離が MatchThreshold によって設定されたしきい値より小さい場合、これらの特徴ベクトルがマッチします。特徴間の距離が MatchThreshold の値より大きい場合、関数はマッチを除外します。より多くのマッチを返すには、この値を大きくします。

入力が binaryFeatures オブジェクトの場合は通常、マッチングのしきい値を大きくする必要があります。FREAK、ORB、または BRISK 記述子を抽出するときに、関数 extractFeaturesbinaryFeatures オブジェクトを返します。

比率のしきい値。'MaxRatio' と (0,1] の範囲のスカラー比率値で構成されるコンマ区切りのペアとして指定します。あいまいなマッチを除外する最大比率を使用します。より多くのマッチを返すには、この値を大きくします。

特徴のマッチング メトリクス。'Metric' と、'SAD' または 'SSD' で構成されるコンマ区切りのペアとして指定します。

'SAD'差の絶対値の総和
'SSD'差の二乗和

このプロパティは、入力特徴セット features1features2binaryFeatures オブジェクトではない場合に適用されます。特徴を binaryFeatures オブジェクトとして指定している場合、関数はハミング距離を使用して類似度メトリクスを計算します。

一意のマッチ。'Unique' と、false または true で構成されるコンマ区切りのペアとして指定します。features1features2 間の一意のマッチのみを返すようにするには、この値を true に設定します。

Uniquefalse に設定すると、関数は features1features2 間のすべてのマッチを返します。features1 の複数の特徴が features2 の 1 つの特徴にマッチする場合があります。

Uniquetrue に設定すると、関数は順方向と逆方向のマッチングを実行して、一意のマッチを選択します。features1features2 にマッチさせた後、features2features1 にマッチさせて、最適一致を保持します。

出力引数

すべて折りたたむ

2 つの入力特徴セット間で対応する特徴のインデックス。P 個のインデックスの P 行 2 列の行列として返されます。インデックスの各ペアは、features1 入力と features2 入力間でマッチした特徴に対応します。最初の要素は、features1 の特徴のインデックスを表します。2 番目の要素は、features2 のマッチする特徴のインデックスを表します。

マッチする特徴間の距離。p 行 1 列のベクトルとして返されます。距離の値は、選択されたメトリクスに基づきます。matchmetric の i 番目の要素は、それぞれ indexPairs 出力行列の i 行目に対応します。MetricSAD または SSD に設定されている場合、計算前に特徴ベクトルが単位ベクトルに正規化されます。

Metric範囲完全マッチの値
SAD[0, 2*sqrt(size(features1, 2))]. 0
SSD[0,4]0
Hamming[0, features1.NumBits]0

メモ

Hamming メトリクスを選択することはできません。これは features1 入力と features2 入力が binaryFeatures である場合に自動的に呼び出されます。

参照

[1] Lowe, David G. "Distinctive Image Features from Scale-Invariant Keypoints." International Journal of Computer Vision. Volume 60, Number 2, pp. 91–110.

[2] Muja, M., and D. G. Lowe. "Fast Matching of Binary Features. "Conference on Computer and Robot Vision. CRV, 2012.

[3] Muja, M., and D. G. Lowe. "Fast Approximate Nearest Neighbors with Automatic Algorithm Configuration." International Conference on Computer Vision Theory and Applications.VISAPP, 2009.

[4] Rublee, E., V. Rabaud, K. Konolige and G. Bradski. "ORB: An efficient alternative to SIFT or SURF." In Proceedings of the 2011 International Conference on Computer Vision, 2564–2571. Barcelona, Spain, 2011.

拡張機能

R2011a で導入