This section describes approaches based on local 2D features and used to categorize objects.
Note
BOWTrainer
¶Abstract base class for training the bag of visual words vocabulary from a set of descriptors. For details, see, for example, Visual Categorization with Bags of Keypoints by 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:
...
};
Adds descriptors to a training set.
void BOWTrainer::
add
(const Mat& descriptors)¶Parameters: |
|
---|
The training set is clustered using clustermethod
to construct the vocabulary.
Returns a training set of descriptors.
const vector<Mat>& BOWTrainer::
getDescriptors
() const
¶Returns the count of all descriptors stored in the training set.
int BOWTrainer::
descripotorsCount
() const
¶Clusters train descriptors.
Mat BOWTrainer::
cluster
() const
¶
Mat BOWTrainer::
cluster
(const Mat& descriptors) const
¶Parameters: |
|
---|
The vocabulary consists of cluster centers. So, this method returns the vocabulary. In the first variant of the method, train descriptors stored in the object are clustered. In the second variant, input descriptors are clustered.
BOWKMeansTrainer
: public BOWTrainer
¶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:
...
};
The constructor.
BOWImgDescriptorExtractor
¶Class to compute an image descriptor using the bag of visual words. Such a computation consists of the following steps:
- Compute descriptors for a given image and its keypoints set.
- Find the nearest visual words from the vocabulary for each keypoint descriptor.
- Compute the bag-of-words image descriptor as is a normalized histogram of vocabulary words encountered in the image. The
i
-th bin of the histogram is a frequency ofi
-th word of the vocabulary in the given image.
The class declaration is the following:
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:
...
};
The constructor.
BOWImgDescriptorExtractor::
BOWImgDescriptorExtractor
(const Ptr<DescriptorExtractor>& dextractor, const Ptr<DescriptorMatcher>& dmatcher)¶Parameters: |
|
---|
Sets a visual vocabulary.
void BOWImgDescriptorExtractor::
setVocabulary
(const Mat& vocabulary)¶Parameters: |
|
---|
Returns the set vocabulary.
const Mat& BOWImgDescriptorExtractor::
getVocabulary
() const
¶Computes an image descriptor using the set visual vocabulary.
void BOWImgDescriptorExtractor::
compute
(const Mat& image, vector<KeyPoint>& keypoints, Mat& imgDescriptor, vector<vector<int>>* pointIdxsOfClusters=0, Mat* descriptors=0 )¶Parameters: |
|
---|