Object Categorization

Some approaches based on local 2D features and used to object categorization are described in this section.

BOWTrainer

Comments from the Wiki

BOWTrainer

Abstract base class for training ‘’bag of visual words’’ vocabulary from a set of descriptors. See e.g. ‘’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)

Add descriptors to training set. The training set will be clustered using clustermethod to construct vocabulary.

Parameters:
  • descriptors – Descriptors to add to training set. Each row of descriptors matrix is a one descriptor.

cv::BOWTrainer::getDescriptors

Comments from the Wiki

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

Returns training set of descriptors.

cv::BOWTrainer::descripotorsCount

Comments from the Wiki

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

Returns count of all descriptors stored in the training set.

cv::BOWTrainer::cluster

Comments from the Wiki

Mat BOWTrainer::cluster() const

Cluster train descriptors. Vocabulary consists from cluster centers. So this method

returns vocabulary. In first method variant the stored in object train descriptors will be clustered, in second variant – input descriptors will be clustered.

Mat BOWTrainer::cluster(const Mat& descriptors) const
Parameters:
  • descriptors – Descriptors to cluster. Each row of descriptors matrix is a one descriptor. Descriptors will not be added to the inner train descriptor set.

BOWKMeansTrainer

Comments from the Wiki

BOWKMeansTrainer

kmeans() based class to train visual vocabulary using the ‘’bag of visual words’’ approach.

class BOWKMeansTrainer : public BOWTrainer
{
public:
    BOWKMeansTrainer( int clusterCount, const TermCriteria& termcrit=TermCriteria(),
                      int attempts=3, int flags=KMEANS_PP_CENTERS );
    virtual ~BOWKMeansTrainer(){}

    // Returns trained vocabulary (i.e. cluster centers).
    virtual Mat cluster() const;
    virtual Mat cluster( const Mat& descriptors ) const;

protected:
    ...
};

To gain an understanding of constructor parameters see kmeans() function arguments.

BOWImgDescriptorExtractor

Comments from the Wiki

BOWImgDescriptorExtractor
Class to compute image descriptor using ‘’bad of visual words’‘. In few,
such computing consists from the following steps: 1. Compute descriptors for given image and it’s keypoints set,

2. Find nearest visual words from vocabulary for each keypoint descriptor, 3. Image descriptor is a normalized histogram of vocabulary words encountered in the image. I.e.

i -bin of the histogram is a frequency of i -word of vocabulary in the given image.

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)

Constructor.

Parameters:
  • dextractor – Descriptor extractor that will be used to compute descriptors for input image and it’s keypoints.
  • dmatcher – Descriptor matcher that will be used to find nearest word of trained vocabulary to each keupoints descriptor of the image.

cv::BOWImgDescriptorExtractor::setVocabulary

Comments from the Wiki

void BOWImgDescriptorExtractor::setVocabulary(const Mat& vocabulary)

Method to set visual vocabulary.

Parameters:
  • vocabulary – Vocabulary (can be trained using inheritor of BOWTrainer() ). Each row of vocabulary is a one visual word (cluster center).

cv::BOWImgDescriptorExtractor::getVocabulary

Comments from the Wiki

const Mat& BOWImgDescriptorExtractor::getVocabulary() const

Returns set vocabulary.

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)

Compute image descriptor using set visual vocabulary.

Parameters:
  • image – The image. Image descriptor will be computed for this.
  • keypoints – Keypoints detected in the input image.
  • imgDescriptor – This is output, i.e. computed image descriptor.
  • pointIdxsOfClusters
    Indices of keypoints which belong to the cluster, i.e.
    pointIdxsOfClusters[i] is keypoint indices which belong

    to the i- cluster (word of vocabulary) (returned if it is not 0.)

  • descriptors – Descriptors of the image keypoints (returned if it is not 0.)

cv::BOWImgDescriptorExtractor::descriptorSize

Comments from the Wiki

int BOWImgDescriptorExtractor::descriptorSize() const

Returns image discriptor size, if vocabulary was set, and 0 otherwise.

cv::BOWImgDescriptorExtractor::descriptorType

Comments from the Wiki

int BOWImgDescriptorExtractor::descriptorType() const

Returns image descriptor type.