Main Content

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

extractHOGFeatures

勾配方向ヒストグラム (HOG) 特徴を抽出

説明

features = extractHOGFeatures(I) は、トゥルーカラーまたはグレースケール入力イメージ I から抽出した HOG 特徴を返します。特徴は 1 行 N 列のベクトルとして返されます。ここで、N は HOG 特徴の長さです。返された特徴は、イメージ内の領域から局所的な形状情報を符号化します。この情報は、分類、検出、追跡などのたくさんのタスクに利用できます。

[features,validPoints] = extractHOGFeatures(I,points) は、指定した点の位置を中心として抽出した HOG 特徴を返します。この関数は、validPoints も返します。これには、その周囲領域が I 内に完全に含まれる入力点の位置が含まれます。点に関連付けられたスケール情報は無視されます。

[___, visualization] = extractHOGFeatures(I,___) は、オプションで、前述の構文のいずれかを使用し、HOG 特徴の可視化も返します。この可視化は plot(visualization) を使用して表示できます。

[___] = extractHOGFeatures(___,Name,Value) は、前述の構文のいずれかを使用し、名前と値のペアの引数を 1 つ以上指定したオプションを追加で使用します。

すべて折りたたむ

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

img = imread('cameraman.tif');

HOG 特徴を抽出します。

[featureVector,hogVisualization] = extractHOGFeatures(img);

HOG 特徴を元のイメージの上にプロットします。

figure;
imshow(img); 
hold on;
plot(hogVisualization);

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

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

I1 = imread('gantrycrane.png');

HOG 特徴を抽出します。

[hog1,visualization] = extractHOGFeatures(I1,'CellSize',[32 32]);

元のイメージと HOG 特徴を表示します。

subplot(1,2,1);
imshow(I1);
subplot(1,2,2);
plot(visualization);

Figure contains 2 axes objects. Axes object 1 contains 2 objects of type line. One or more of the lines displays its values using only markers Axes object 2 contains an object of type image.

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

I2 = imread('gantrycrane.png');

イメージ内の最も強いコーナーを検出し、選択します。

corners   = detectFASTFeatures(im2gray(I2));
strongest = selectStrongest(corners,3);

HOG 特徴を抽出します。

[hog2,validPoints,ptVis] = extractHOGFeatures(I2,strongest);

元のイメージに最も強いコーナーを中心とする HOG 特徴を重ねて表示します。

figure;
imshow(I2);
hold on;
plot(ptVis,'Color','green');

Figure contains an axes object. The axes object contains 6 objects of type image, line, rectangle. One or more of the lines displays its values using only markers

入力引数

すべて折りたたむ

入力イメージ。M x N x 3 のトゥルーカラー、または M 行 N 列の 2 次元グレースケールで指定します。入力イメージは、実数で非スパースの値でなければなりません。タイトにトリミングされたイメージの場合、HOG 関数が符号化できる形状情報が失われる場合があります。背景ピクセルを含むパッチの周囲に余分にピクセル マージンを付けると、このように情報が失われるのを防ぐことができます。

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

正方形の近傍の中心位置の点。BRISKPoints オブジェクト、SURFPoints オブジェクト、MSERRegions オブジェクト、ORBPoints オブジェクト、cornerPoints オブジェクト、または M 個の [x, y] 座標の M 行 2 列の行列として指定します。この関数は、イメージの境界内に完全に含まれる近傍から記述子を抽出します。BlockSize パラメーターを使用して、近傍のサイズを設定できます。有効な出力点を決定するには、イメージ内に完全に含まれる近傍のみが使用されます。この関数は、これらの点に関連付けられたスケール情報は無視します。

名前と値の引数

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

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

例: 'BlockSize',[2 2] は、BlockSize を 2 x 2 の正方形ブロックに設定します。

HOG セルのサイズ。ピクセル単位の 2 要素ベクトルとして指定します。より大きなスケールの空間情報を取得するには、セル サイズを大きくします。セル サイズを大きくすると、小さいスケールの細部が失われます。

ブロックに含まれるセルの数。2 要素ベクトルとして指定します。ブロック サイズ値を大きくすると、局所的な照度の変化を抑える能力が減少します。大きなブロックに含まれるピクセルの数により、これらの変化は平均化によって失われる場合があります。ブロック サイズを小さくすると、局所的なピクセルの有意性を捉えるのに役立ちます。ブロック サイズを小さくすると、HOG 特徴の照度の変化を抑えるのに役立ちます。

隣接するブロック間でオーバーラップしているセルの数。2 要素ベクトルとして指定します。適切なコントラスト正規化を確保するため、少なくともブロック サイズの半分のオーバーラップを選択してください。オーバーラップの値を大きくすると、より多くの情報を取得できますが、特徴ベクトル サイズが大きくなります。このプロパティは、HOG 特徴を点の位置からではなく、領域から抽出するときのみ適用されます。HOG 特徴を点の位置の周囲から抽出するときは、1 つのブロックだけが使用されるため、オーバーラップは発生しません。

向きのヒストグラム ビンの数。正のスカラーとして指定されます。向きをより詳細に符号化するには、ビンの数を増やします。この値を大きくすると、特徴ベクトルのサイズが大きくなり、処理時間が長くなります。

向きの値の選択。logical スカラーとして指定します。このプロパティを true に設定すると、向きの値は -180 ~ 180 度の間でビン内で等間隔になります。このプロパティを false に設定すると、0 ~ 180 の間で等間隔になります。その場合、0 未満の theta 値は、theta + 180 値のビンに配置されます。符号付きの向きを使用することで、イメージ領域内の明から暗への遷移と暗から明への遷移を区別するのに役立ちます。

出力引数

すべて折りたたむ

抽出された HOG 特徴。1 行 N 列のベクトルまたは P 行 Q 列の行列のいずれかとして返されます。この特徴は、イメージ内の領域または点の位置から局所的な形状情報を符号化します。この情報は、分類、検出、追跡などのたくさんのタスクに利用できます。

features 出力説明
1 行 N 列のベクトルHOG 特徴の長さ N は、イメージ サイズと関数パラメーター値に基づきます。
N = prod([BlocksPerImage, BlockSize, NumBins])
BlocksPerImage = floor((size(I)./CellSizeBlockSize)./(BlockSizeBlockOverlap) + 1)
P 行 Q 列の行列P は、その周囲領域が入力イメージ内に完全に含まれる有効な点の数です。点の位置を抽出する points の入力値を提供します。
周囲領域は次のように計算されます。
CellSize.*BlockSize
特徴ベクトルの長さ Q は次のように計算されます。
prod([NumBins,BlockSize])

例1 HOG 特徴ベクトルのヒストグラムの配置

以下の図は、6 つのセルを持つイメージを示しています。

BlockSize を [2 2] に設定した場合、各 HOG ブロックのサイズは 2 行 2 列のセルになります。セルのサイズはピクセル単位です。これは CellSize プロパティを使用して設定できます。

HOG 特徴ベクトルは、HOG ブロックによって配置されます。セル ヒストグラム H(Cyx) は、1 行 NumBins 列です。

以下の図は、ブロック間で 1 行 1 列のセルがオーバーラップする HOG 特徴ベクトルを示しています。

features 記述子ベクトル出力に関連付けられた有効な点。この出力は、cornerPoints オブジェクト、BRISKPointsSURFPoints オブジェクト、MSERRegions オブジェクト、ORBPoints オブジェクト、または [x,y] 座標の M 行 2 列の行列のいずれかとして返されます。この関数は、[CellSize.*BlockSize] に等しいサイズを持つ領域に含まれる有効な関心点から M 個の記述子を抽出します。抽出された記述子は、入力と同じオブジェクト タイプまたは行列として返されます。領域は、イメージ内に完全に含まれていなければなりません。

HOG 特徴の可視化。オブジェクトとして返されます。この関数は、抽出された HOG 特徴を可視化するためのオプション引数を出力します。plot メソッドを visualization 出力と合わせて使用できます。HOG 特徴の抽出とプロットの例を参照してください。

HOG 特徴は、等間隔の rose プロットのグリッドを使用して可視化されます。セル サイズとイメージ サイズによって、グリッドの次元が決定されます。各 rose プロットは、HOG セル内の勾配の向きの分布を示します。rose プロットの各花弁の長さは、セル ヒストグラム内における各向きの寄与を示すようにスケーリングされます。ブロットはエッジの方向を表示します。これは、勾配の方向に対して垂直になります。プロットをエッジ方向と共に表示することで、HOG で符号化された形状と輪郭をよりよく理解できるようになります。各 rose プロットは、NumBins の 2 倍の花弁を表示します。

次の構文を使用して、HOG 特徴をプロットできます。

plot(visualization) は、HOG 特徴を rose プロットの配列としてプロットします。
plot(visualization,AX) は、HOG 特徴を AX 軸にプロットします。
plot(___,'Color',colorValue) は、HOG 特徴のプロットに使用される色を指定します。ここで、colorValue は、カラー値の表で説明されている 1 行 3 列の RGB ベクトル、色の省略名、または色の完全名として色を表します。

詳細

すべて折りたたむ

カラー値

色の名前省略名RGB 3 成分外観
"red""r"[1 0 0]

Sample of the color red

"green""g"[0 1 0]

Sample of the color green

"blue""b"[0 0 1]

Sample of the color blue

"cyan" "c"[0 1 1]

Sample of the color cyan

"magenta""m"[1 0 1]

Sample of the color magenta

"yellow""y"[1 1 0]

Sample of the color yellow

"black""k"[0 0 0]

Sample of the color black

"white""w"[1 1 1]

Sample of the color white

参照

[1] Dalal, N. and B. Triggs. "Histograms of Oriented Gradients for Human Detection", IEEE Computer Society Conference on Computer Vision and Pattern Recognition, Vol. 1 (June 2005), pp. 886–893.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2013b で導入