このセクションでは,オブジェクトの分類に用いられる, 局所2次元特徴に基づいたアプローチについて述べます.
ディスクリプタの集合から,「bag of visual words」のボキャブラリを学習するための抽象基底クラス. 例えば, ‘’Visual Categorization with Bags of Keypoints’’ of Gabriella Csurka, Christopher R. Dance, Lixin Fan, Jutta Willamowski, Cedric Bray, 2004. などを参照してください.
class BOWTrainer
{
public:
BOWTrainer(){}
virtual ~BOWTrainer(){}
void add( const Mat& descriptors );
const vector<Mat>& getDescriptors() const;
int descripotorsCount() const;
virtual void clear();
virtual Mat cluster() const = 0;
virtual Mat cluster( const Mat& descriptors ) const = 0;
protected:
...
};
このメソッドはボキャブラリを返します.第1形式のメソッドでは,オブジェクトに格納された訓練ディスクリプタがクラスタリングされ, 第2形式のメソッドでは,入力ディスクリプタがクラスタリングされます.
「bag of visual words」 アプローチを用いて visual ボキャブラリを学習するための, kmeans() に基づいたクラス.
class BOWKMeansTrainer : public BOWTrainer
{
public:
BOWKMeansTrainer( int clusterCount, const TermCriteria& termcrit=TermCriteria(),
int attempts=3, int flags=KMEANS_PP_CENTERS );
virtual ~BOWKMeansTrainer(){}
// 学習されたボキャブラリ(つまり,クラスタ中心)を返します.
virtual Mat cluster() const;
virtual Mat cluster( const Mat& descriptors ) const;
protected:
...
};
コンストラクタのパラメータについて知りたい場合は, kmeans() 関数の引数を参照してください.
「bag of visual words」を利用して,画像ディスクリプタを求めるためのクラス. その計算方法は,簡単に言うと以下のようなステップになります: 1. 与えられた画像に対するディスクリプタとキーポイントの集合を計算します, 2. 各キーポイントディスクリプタに対して,最も近い visual words をボキャブラリから求めます, 3. 画像ディスクリプタは,画像内で見つかったボキャブラリ words のヒストグラムを正規化したものになります.
つまり,ヒストグラムの
i -番目のビンは, i -番目のボキャブラリword の,画像中における頻度を表します.
class BOWImgDescriptorExtractor
{
public:
BOWImgDescriptorExtractor( const Ptr<DescriptorExtractor>& dextractor,
const Ptr<DescriptorMatcher>& dmatcher );
virtual ~BOWImgDescriptorExtractor(){}
void setVocabulary( const Mat& vocabulary );
const Mat& getVocabulary() const;
void compute( const Mat& image, vector<KeyPoint>& keypoints,
Mat& imgDescriptor,
vector<vector<int> >* pointIdxsOfClusters=0,
Mat* descriptors=0 );
int descriptorSize() const;
int descriptorType() const;
protected:
...
};
コンストラクタ.
パラメタ: |
|
---|
登録されたvisual ボキャブラリを用いて,画像ディスクリプタを求めます.
パラメタ: |
|
---|
ボキャブラリが登録されている場合は,画像ディスクリプタのサイズが返され,そうでない場合は0が返されます.