オブジェクト分類

このセクションでは,オブジェクトの分類に用いられる, 局所2次元特徴に基づいたアプローチについて述べます.

BOWTrainer

Comments from the Wiki

BOWTrainer

ディスクリプタの集合から,「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:
    ...
};

cv::BOWTrainer::add

Comments from the Wiki


void BOWTrainer::add(const Mat& descriptors)

訓練集合にディスクリプタを追加します.この訓練集合は,ボキャブラリを構成するために clusterメソッドによってクラスタリングされます.

パラメタ:
  • descriptors – 訓練集合に追加されるディスクリプタ. descriptors 行列の各行が,1つのディスクリプタを表します.

cv::BOWTrainer::getDescriptors

Comments from the Wiki

const vector<Mat>& BOWTrainer::getDescriptors() const

ディスクリプタの訓練集合を返します.

cv::BOWTrainer::descripotorsCount

Comments from the Wiki

const vector<Mat>& BOWTrainer::descripotorsCount() const

訓練集合内に存在する,全ディスクリプタの個数を返します.

cv::BOWTrainer::cluster

Comments from the Wiki

Mat BOWTrainer::cluster() const

訓練ディスクリプタをクラスタリングします.ボキャブラリは,クラスタ中心から構成されるので,

このメソッドはボキャブラリを返します.第1形式のメソッドでは,オブジェクトに格納された訓練ディスクリプタがクラスタリングされ, 第2形式のメソッドでは,入力ディスクリプタがクラスタリングされます.

Mat BOWTrainer::cluster(const Mat& descriptors) const
パラメタ:
  • descriptors – クラスタリングされるディスクリプタ. descriptors 行列の各行が,1つのディスクリプタを表します.これらのディスクリプタは,内部の訓練集合には追加されません.

BOWKMeansTrainer

Comments from the Wiki

BOWKMeansTrainer

「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() 関数の引数を参照してください.

BOWImgDescriptorExtractor

Comments from the Wiki

BOWImgDescriptorExtractor

“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:
    ...
};

cv::BOWImgDescriptorExtractor::BOWImgDescriptorExtractor

Comments from the Wiki

BOWImgDescriptorExtractor::BOWImgDescriptorExtractor(const Ptr<DescriptorExtractor>& dextractor, const Ptr<DescriptorMatcher>& dmatcher)

コンストラクタ.

パラメタ:
  • dextractor – 入力画像に対するディスクリプタとキーポイントを 求めるために利用される,ディスクリプタ抽出器.
  • dmatcher – ディスクリプタの Matcher.これは,画像の各キーポイントディスクリプタに対して, 学習されたボキャブラリ word の中で最も近いものを見つけるために利用されます.

cv::BOWImgDescriptorExtractor::setVocabulary

Comments from the Wiki

void BOWImgDescriptorExtractor::setVocabulary(const Mat& vocabulary)

visual ボキャブラリを登録するためのメソッド.

パラメタ:
  • vocabulary – ( BOWTrainer() からの派生クラスを用いて学習された)ボキャブラリ. ボキャブラリの各行が,1つのvisual word(クラスタ中心)を表します.

cv::BOWImgDescriptorExtractor::getVocabulary

Comments from the Wiki

const Mat& BOWImgDescriptorExtractor::getVocabulary() const

登録されたボキャブラリを返します.

cv::BOWImgDescriptorExtractor::compute

Comments from the Wiki

void BOWImgDescriptorExtractor::compute(const Mat& image, vector<KeyPoint>& keypoints, Mat& imgDescriptor, vector<vector<int> >* pointIdxsOfClusters=0, Mat* descriptors=0)

登録されたvisual ボキャブラリを用いて,画像ディスクリプタを求めます.

パラメタ:
  • image – 画像.これに対する画像ディスクリプタが求められます.
  • keypoints – 入力画像中から検出されるキーポイント.
  • imgDescriptor – 出力.つまり,求められた画像ディスクリプタです.
  • pointIdxsOfClusters – クラスタに属するキーポイントのインデックス. つまり, pointIdxsOfClusters[i] は, i -番目のクラスタ(ボキャブラリのword)に属するキーポイントのインデックスです(この引数が 0 でなければ,出力されます)
  • descriptors – 画像キーポイントのディスクリプタ(この引数が 0 でなければ,出力されます)

cv::BOWImgDescriptorExtractor::descriptorSize

Comments from the Wiki

int BOWImgDescriptorExtractor::descriptorSize() const

ボキャブラリが登録されている場合は,画像ディスクリプタのサイズが返され,そうでない場合は0が返されます.

cv::BOWImgDescriptorExtractor::descriptorType

Comments from the Wiki

int BOWImgDescriptorExtractor::descriptorType() const

画像ディスクリプタの種類を返します.