Main Content

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

extractFeatures

関心点記述子の抽出

説明

[features,validPoints] = extractFeatures(I,points) は、バイナリ イメージまたは強度イメージから、抽出された特徴ベクトル (記述子とも呼ばれます) と、これらに対応する位置を返します。

関数は、関心点の周りのピクセルから記述子を導出します。ピクセルは、単一点の位置によって指定された特徴を表し、これらの特徴をマッチさせます。各単一点は、近傍の中心位置を指定します。記述子の抽出に使用する手法は、入力 points のクラスによって異なります。

[features,validPoints] = extractFeatures(I,points,Name=Value) は、前の構文にある引数の任意の組み合わせに加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、extractFeatures(I,points,Method="Block") は、記述子抽出法を Block に設定します。

すべて折りたたむ

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

I = imread("cameraman.tif");

イメージからコーナーの特徴を検出して抽出します。

corners = detectHarrisFeatures(I);
[features,valid_corners] = extractFeatures(I,corners);

イメージを表示します。

figure;
imshow(I); 
hold on

有効なコーナー ポイントをプロットします。

plot(valid_corners);

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

I = imread("cameraman.tif");

入力イメージから特徴を検出して抽出します。

points = detectSURFFeatures(I);
[features,valid_points] = extractFeatures(I,points);

最も強い 10 個の SURF 特徴を表示してプロットします。

figure;
imshow(I);
hold on;
plot(valid_points.selectStrongest(10),showOrientation=true);

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

I = imread("cameraman.tif");

MSER 特徴検出を使用してイメージ内の特徴を検出します。

regions = detectMSERFeatures(I);
[features,valid_points] = extractFeatures(I,regions,Upright=true);

MSER 楕円の中心に対応する特徴を表示します。

figure;
imshow(I);
hold on;
plot(valid_points,showOrientation=true);

入力引数

すべて折りたたむ

入力イメージ。バイナリ イメージまたは 2 次元グレースケール イメージとして指定します。

データ型: logical | single | double | int16 | uint8 | uint16

正方形近傍の中心位置の点。M 個の [x y] 座標からなる M 行 2 列の行列として指定するか、特徴点のタイプで説明されている特徴点オブジェクトの 1 つとして指定します。次の表に、抽出に使用できる点の入力クラスをまとめています。

名前と値の引数

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

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

例: extractFeatures(I,points,Method="Block") は、記述子抽出法を Block に設定します。

記述子抽出法。特徴点のタイプで記述された特徴点オブジェクトの 1 つとして指定するか、"Auto" として指定します。

次の表は、各記述子抽出法が関数でどのように実装されているかを示しています。

Method特徴ベクトル (記述子)
SIFT

Scale-Invariant Feature Transform (SIFT)。

関数は validPoints 出力オブジェクトの Orientation プロパティを、抽出した特徴の向き (ラジアン単位) に設定します。

BRISK

Binary Robust Invariant Scalable Keypoints (BRISK)。

関数は validPoints 出力オブジェクトの Orientation プロパティを、抽出した特徴の向き (ラジアン単位) に設定します。

FREAK

Fast Retina Keypoint (FREAK)。

関数は validPoints 出力オブジェクトの Orientation プロパティを、抽出した特徴の向き (ラジアン単位) に設定します。

SURF

Speeded-Up Robust Features (SURF)。

関数は validPoints 出力オブジェクトの Orientation プロパティを、抽出した特徴の向き (ラジアン単位) に設定します。

SURF 法で MSERRegions オブジェクトを使用すると、オブジェクトの Centroid プロパティによって SURF 記述子が抽出されます。オブジェクトの Axes プロパティは、特徴を表す円の領域が MSER 楕円領域に比例するような SURF 記述子のスケールを選択します。このスケールは 1/4*sqrt((majorAxes/2).*(minorAxes/2)) で求められ、SURFPoints オブジェクトの要件として 1.6 に飽和されます。

ORB

Oriented FAST and rotated BRIEF (ORB) 特徴。

validPoints 出力オブジェクトの Orientation プロパティは、入力 ORBPoints オブジェクト pointsOrientation プロパティに自動的に設定されます。

KAZE

非線形のピラミッド ベースの特徴。

関数は validPoints 出力オブジェクトの Orientation プロパティを、抽出した特徴の向き (ラジアン単位) に設定します。

KAZE 法で MSERRegions オブジェクトを使用すると、オブジェクトの Location プロパティを使用して KAZE 記述子を抽出します。

オブジェクトの Axes プロパティは、特徴を表す円の領域が MSER 楕円領域に比例するような KAZE 記述子のスケールを選択します。

Block

シンプルな正方形近傍。

Block 法は、イメージの境界内に完全に含まれる近傍のみを抽出します。したがって、出力 validPoints に含まれる点の数が入力 POINTS よりも少ない場合があります。

Auto

この関数は入力の点のクラスに基づいて Method を選択し、次を実装します。

cornerPoints 入力オブジェクトの場合は FREAK 法。
SURFPoints 入力オブジェクトまたは MSERRegions 入力オブジェクトの場合は SURF 法。
BRISKPoints 入力オブジェクトの場合は BRISK 法。
ORBPoints 入力オブジェクトの場合は ORB 法。

[x y] 座標の M 行 2 列の入力行列の場合、関数は Block 法を実装します。

メモ

入力 pointsORBPoints オブジェクトの場合、記述子抽出法は ORB でなければなりません。また、ORB 記述子抽出法は、ORBPoints を除く、他のどのクラスの点でもサポートされません。

ブロック サイズ。奇数の整数スカラーで指定します。この値は、各関心点を中心とした、BlockSize×BlockSize の局所的な正方形の近傍を定義します。このオプションは、関数が Block 法を実装する場合にのみ適用されます。

回転不変フラグ。logical スカラーとして指定します。このプロパティを true に設定すると、特徴ベクトルの向きが推定されず、特徴の向きが pi/2 に設定されます。イメージ記述子で回転情報を取得する必要がない場合には、このプロパティを true に設定します。このプロパティを false に設定すると、特徴の向きが推定され、特徴が回転に対して不変になります。

メモ

回転不変フラグ "Upright" は、入力 pointsORBPoints オブジェクトの場合はサポートされません。

特徴ベクトル (記述子) の長さ。64 または 128 として指定します。このオプションは、関数が SURF 法または KAZE 法を実装する場合にのみ適用されます。特徴のサイズを 128 に増やすと、精度が向上しますが、特徴のマッチング速度は低下します。

出力引数

すべて折りたたむ

特徴ベクトル。binaryFeatures オブジェクト、または M 個の特徴ベクトル (記述子とも呼ばれる) の MN 列の行列として返されます。各記述子の長さは N です。

features の各出力特徴ベクトル (記述子) に関連付けられた有効な点。入力と同じ形式で返されます。有効な点は、[x,y] 座標の M 行 2 列の行列または特徴点のタイプで説明されている特徴点オブジェクトの 1 つになります。

関数は、各関心点の周りの領域から記述子を抽出します。領域がイメージの外側にある場合、または関心点がイメージの端に近すぎる場合、関数は特徴記述子を計算できません。この場合、関数はこの点を無視します。この点は有効な点の出力に含まれません。

SIFT 特徴の場合、1 つの位置 (方向は異なる) で複数の記述子を抽出できます。したがって、validPoints で返される点の数は、extractFeatures に入力される点の数以上になる可能性があります。SIFT 特徴以外の入力特徴点の場合、validPoints は入力点の数以下になる可能性があります。

参照

[1] G. Bradski and A. Kaehler, Learning OpenCV : Computer Vision with the OpenCV Library, O'Reilly, Sebastopol, CA, 2008.

[2] Herbert Bay, Andreas Ess, Tinne Tuytelaars, Luc Van Gool, SURF: Speeded Up Robust Features", Computer Vision and Image Understanding (CVIU), Vol. 110, No. 3, pp. 346--359, 2008

[3] Bay, Herbert, Andreas Ess, Tinne Tuytelaars, and Luc Van Gool, "SURF: Speeded Up Robust Features", Computer Vision and Image Understanding (CVIU), Vol. 110, No. 3, pp. 346--359, 2008.

[4] Alahi, Alexandre, Ortiz, Raphael, and Pierre Vandergheynst, "FREAK: Fast Retina Keypoint", IEEE Conference on Computer Vision and Pattern Recognition, 2012.

[5] Alcantarilla, P.F., A. Bartoli, and A.J. Davison. "KAZE Features", ECCV 2012, Part VI, LNCS 7577 pp. 214, 2012

拡張機能

バージョン履歴

R2011a で導入