Main Content

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

bagOfFeatures

bag of visual words オブジェクト

説明

イメージ コレクションを管理して、学習セットと検証セットに分割します。イメージのカテゴリ分類に使用する bag of visual words を構築できます。学習と分類には、Parallel Computing Toolbox™ のサポートが含まれます。

作成

説明

bag = bagOfFeatures(imds) は、bag of features オブジェクトを返します。bag 出力オブジェクトは、imds 入力のサンプルを使用して生成されます。既定では、ビジュアル ボキャブラリは imds 内のイメージから抽出された SURF 特徴から作成されます。

bag = bagOfFeatures(imds,'CustomExtractor',extractorFcn) は、カスタム特徴抽出器関数を使用して imds のイメージから特徴を抽出する bag of features を返します。extractorFcn はカスタム特徴抽出関数の関数ハンドルです。

bag = bagOfFeatures(imds,Name,Value) は、1 つ以上の名前と値のペアを使用してプロパティを設定します。各プロパティ名を引用符で囲みます。たとえば、bag = bagOfFeatures('Verbose',true) です。

このオブジェクトは、複数の MATLAB® ワーカーを使用する並列計算をサポートします。Computer Vision Toolbox の基本設定 ダイアログ ボックスから並列計算を有効にします。Computer Vision Toolbox™ の基本設定を開くには、[ホーム] タブの [環境] セクションで [基本設定] をクリックします。次に、Computer Vision Toolbox を選択します。

入力引数

すべて展開する

イメージ。ImageDatastore オブジェクトとして指定します。bagOfFeatures は、imds オブジェクトに含まれるイメージから、最も強い同数の特徴を抽出します。

number of strongest features = min("各セットで検出された特徴の数") x StrongestFraction(1)
オブジェクトは 'StrongestFeatures' プロパティから StrongestFraction の値を取得します。

カスタム特徴抽出器関数。'CustomExtractor' と関数ハンドルで構成されるコンマ区切りのペアとして指定します。このカスタム関数は、bagOfFeatures オブジェクトの出力から特徴を抽出し、オブジェクトのビジュアル ボキャブラリを学習します。

関数 extractorFcn はファイルの関数ハンドルとして指定しなければなりません。

extractorFcn = @exampleBagOfFeaturesExtractor;
bag = bagOfFeatures(imds,'CustomExtractor',extractorFcn)
exampleBagOfFeaturesExtractor は MATLAB 関数です。次に例を示します。
function [features,featureMetrics] = exampleBagOfFeaturesExtractor(img)
...
関数はパス上にあるか、現在の作業ディレクトリ内になければなりません。

カスタム抽出器関数とその入出力の要件の詳細については、カスタム特徴抽出器の作成を参照してください。

MATLAB コマンド ラインに次のコマンドを入力すると、関数ファイルの例を開いてテンプレートとして使用できます。

edit('exampleBagOfFeaturesExtractor.m')

プロパティ

すべて展開する

カスタム特徴抽出器関数。関数ハンドルとして指定します。カスタム特徴抽出器関数は、bagOfFeatures のビジュアル ボキャブラリを学習するために使用される特徴を抽出します。カスタム特徴抽出関数には 'CustomExtractor' と関数ハンドル extractorFcn を指定しなければなりません。

関数 extractorFcn はファイルの関数ハンドルとして指定しなければなりません。

extractorFcn = @exampleBagOfFeaturesExtractor;
bag = bagOfFeatures(imds,'CustomExtractor',extractorFcn)
exampleBagOfFeaturesExtractor は次のような MATLAB 関数です。
function [features,featureMetrics] = exampleBagOfFeaturesExtractor(img)
...
関数はパス上にあるか、現在の作業ディレクトリ内になければなりません。

カスタム抽出器関数とその入出力の要件の詳細については、カスタム特徴抽出器の作成を参照してください。MATLAB コマンド ラインに次のコマンドを入力すると、関数ファイルの例を開いてテンプレートとして使用できます。

edit('exampleBagOfFeaturesExtractor.m')

bagOfFeatures オブジェクトに含めるビジュアル ワードの数。'VocabularySize' と範囲 [2, inf] の整数スカラーで構成されるコンマ区切りのペアとして指定します。VocabularySize の値は、特徴を量子化してビジュアル ボキャブラリを作成するために使用される k-means クラスタリング (Statistics and Machine Learning Toolbox) アルゴリズムの K に対応します。

最も強い特徴の割合。'StrongestFeatures' と範囲 [0,1] の値で構成されるコンマ区切りのペアとして指定します。この値は、imds 入力の各ラベルから使用する最も強い特徴の割合を表します。

画面への進行状況表示の有効化。'Verbose' と logical true または false で構成されるコンマ区切りのペアとして指定します。

SURF 特徴抽出で点の位置を選択する方法。'PointSelection' と、'Grid' または 'Detector' で構成されるコンマ区切りのペアとして指定します。特徴抽出には 2 つの段階があります。まず、PointSelection プロパティを使用して、点の位置を選択する方法 (SURF 'Detector' または 'Grid') を選択します。次の段階で、特徴を抽出します。特徴抽出では、両方の点選択方法に SURF 抽出器を使用します。

PointSelection'Detector' に設定すると、Speeded-Up Robust Features (SURF) 検出器を使用して特徴点が選択されます。そうでない場合、事前定義のグリッドで 'GridStep' によって定義された間隔で点が選択されます。このプロパティは、CustomExtractor プロパティを使用してカスタム抽出器を指定していない場合にのみ適用されます。

ピクセル単位のグリップ ステップ サイズ。'GridStep' と 1 行 2 列のベクトル [x y] で構成されるコンマ区切りのペアとして指定します。このプロパティは、PointSelection'Grid' に設定し、CustomExtractor プロパティを使用してカスタム抽出器を指定していない場合にのみ適用されます。x および y 方向のステップは、等間隔グリッドの間隔を定義します。グリッド線の交点は、特徴抽出の位置を定義します。

直立の SURF 記述子を抽出するパッチ サイズ。'BlockWidth' と N 個のブロック幅からなる 1 行 N 列のベクトルで構成されるコンマ区切りのペアとして指定します。このプロパティは、CustomExtractor プロパティを使用してカスタム抽出器を指定していない場合にのみ適用されます。ベクトルの各要素は正方形ブロックのサイズに対応し、関数はこれらの正方形ブロックから直立の SURF 記述子を抽出します。複数の正方形のサイズを使用して、マルチスケールの特徴を抽出します。グリッドの各抽出点に対して、指定されたすべての正方形を使用します。このプロパティは PointSelection'Grid' に設定した場合にのみ適用されます。ブロック幅は、特徴のスケールに対応します。BlockWidth の最小値は 32 ピクセルです。

SURF 特徴ベクトルの向き。'Upright' と logical スカラーで構成されるコンマ区切りのペアとして指定します。このプロパティは、CustomExtractor プロパティを使用してカスタム抽出器を指定していない場合にのみ適用されます。SURF 特徴ベクトルの向きを推定する必要がない場合には、このプロパティを true に設定します。回転の情報を取得するためにイメージ記述子が必要な場合には、このプロパティを false に設定します。

オブジェクト関数

encodeCreate histogram of visual word occurrences

すべて折りたたむ

2 つのイメージ セットを読み込みます。

setDir  = fullfile(toolboxdir('vision'),'visiondata','imageSets');
imgSets = imageSet(setDir,'recursive');

各イメージ セットから最初の 2 つのイメージを選択して、学習セットを作成します。

trainingSets = partition(imgSets,2);

bag of features を作成します。この処理には数分かかることがあります。

bag = bagOfFeatures(trainingSets,'Verbose',false);

イメージの 1 つについて、ビジュアル ワードの出現のヒストグラムを計算します。このヒストグラムを特徴ベクトルとして格納します。

img = read(imgSets(1),1);
featureVector = encode(bag,img);

イメージ セットを読み込みます。

setDir  = fullfile(toolboxdir('vision'),'visiondata','imageSets');
imds = imageDatastore(setDir,'IncludeSubfolders',true,'LabelSource',...
    'foldernames');

カスタム特徴抽出器を指定します。

extractor = @exampleBagOfFeaturesExtractor;
bag = bagOfFeatures(imds,'CustomExtractor',extractor)
Creating Bag-Of-Features.
-------------------------
* Image category 1: books
* Image category 2: cups
* Extracting features using a custom feature extraction function: exampleBagOfFeaturesExtractor.

* Extracting features from 12 images...done. Extracted 230400 features.

* Keeping 80 percent of the strongest features from each category.

* Using K-Means clustering to create a 500 word visual vocabulary.
* Number of features          : 184320
* Number of clusters (K)      : 500

* Initializing cluster centers...100.00%.
* Clustering...completed 20/100 iterations (~1.75 seconds/iteration)...converged in 20 iterations.

* Finished creating Bag-Of-Features
bag = 
  bagOfFeatures with properties:

      CustomExtractor: @exampleBagOfFeaturesExtractor
       VocabularySize: 500
    StrongestFeatures: 0.8000

拡張機能

R2014b で導入