2011-02-22 21:43:26 +01:00
Object Categorization
=====================
.. highlight :: cpp
2011-05-08 17:30:00 +02:00
This section describes approaches based on local 2D features and used to categorize objects.
2011-02-22 21:43:26 +01:00
.. index :: BOWTrainer
.. _BOWTrainer:
BOWTrainer
----------
2011-05-12 01:31:50 +02:00
.. cpp:class :: BOWTrainer
2011-02-22 21:43:26 +01:00
2011-05-08 17:30:00 +02:00
Abstract base class for training the *bag of visual words* vocabulary from a set of descriptors.
2011-05-08 11:31:15 +02:00
For details, see, for example, *Visual Categorization with Bags of Keypoints* by Gabriella Csurka, Christopher R. Dance,
2011-02-26 12:05:10 +01:00
Lixin Fan, Jutta Willamowski, Cedric Bray, 2004. ::
2011-02-22 21:43:26 +01:00
class BOWTrainer
{
public:
BOWTrainer(){}
virtual ~BOWTrainer(){}
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
void add( const Mat& descriptors );
const vector<Mat>& getDescriptors() const;
int descripotorsCount() const;
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
virtual void clear();
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
virtual Mat cluster() const = 0;
virtual Mat cluster( const Mat& descriptors ) const = 0;
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
protected:
...
};
2011-03-03 08:29:55 +01:00
2011-02-22 21:43:26 +01:00
.. index :: BOWTrainer::add
2011-02-28 22:26:43 +01:00
BOWTrainer::add
2011-03-03 08:29:55 +01:00
-------------------
2011-05-12 01:31:50 +02:00
.. c:function :: void BOWTrainer::add( const Mat& descriptors )
2011-02-22 21:43:26 +01:00
2011-05-08 17:30:00 +02:00
Adds descriptors to a training set. The training set is clustered using `` clustermethod `` to construct the vocabulary.
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
:param descriptors: Descriptors to add to a training set. Each row of the ``descriptors`` matrix is a descriptor.
2011-02-22 21:43:26 +01:00
.. index :: BOWTrainer::getDescriptors
2011-02-28 22:26:43 +01:00
BOWTrainer::getDescriptors
2011-02-22 21:43:26 +01:00
------------------------------
2011-05-12 01:31:50 +02:00
.. c:function :: const vector<Mat>& BOWTrainer::getDescriptors() const
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
Returns a training set of descriptors.
2011-02-22 21:43:26 +01:00
.. index :: BOWTrainer::descripotorsCount
2011-02-28 22:26:43 +01:00
BOWTrainer::descripotorsCount
2011-02-22 21:43:26 +01:00
---------------------------------
2011-05-12 01:31:50 +02:00
.. c:function :: const vector<Mat>& BOWTrainer::descripotorsCount() const
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
Returns the count of all descriptors stored in the training set.
2011-02-22 21:43:26 +01:00
.. index :: BOWTrainer::cluster
2011-02-28 22:26:43 +01:00
BOWTrainer::cluster
2011-02-22 21:43:26 +01:00
-----------------------
2011-02-28 22:26:43 +01:00
.. c:function :: Mat BOWTrainer::cluster() const
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
Clusters train descriptors. 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.
2011-02-22 21:43:26 +01:00
2011-05-12 01:31:50 +02:00
.. c:function :: Mat BOWTrainer::cluster( const Mat& descriptors ) const
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
:param descriptors: Descriptors to cluster. Each row of the ``descriptors`` matrix is a descriptor. Descriptors are not added to the inner train descriptor set.
2011-02-22 21:43:26 +01:00
.. index :: BOWKMeansTrainer
.. _BOWKMeansTrainer:
BOWKMeansTrainer
----------------
2011-05-12 01:31:50 +02:00
.. cpp:class :: BOWKMeansTrainer
2011-02-22 21:43:26 +01:00
2011-05-08 17:30:00 +02:00
:ref: `kmeans` -based class to train visual vocabulary using the *bag of visual words* approach ::
2011-02-22 21:43:26 +01:00
class BOWKMeansTrainer : public BOWTrainer
{
public:
BOWKMeansTrainer( int clusterCount, const TermCriteria& termcrit=TermCriteria(),
int attempts=3, int flags=KMEANS_PP_CENTERS );
virtual ~BOWKMeansTrainer(){}
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
// Returns trained vocabulary (i.e. cluster centers).
virtual Mat cluster() const;
virtual Mat cluster( const Mat& descriptors ) const;
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
protected:
...
};
2011-03-03 08:29:55 +01:00
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
To understand constructor parameters, see
:ref: `kmeans` function
2011-02-22 21:43:26 +01:00
arguments.
.. index :: BOWImgDescriptorExtractor
.. _BOWImgDescriptorExtractor:
BOWImgDescriptorExtractor
-------------------------
2011-05-12 01:31:50 +02:00
.. cpp:class :: BOWImgDescriptorExtractor
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
Class to compute an image descriptor using the ''bag of visual words''. Such a computation consists of the following steps:
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
#. Compute descriptors for a given image and its keypoints set.
#. Find the nearest visual words from the vocabulary for each keypoint descriptor.
2011-05-12 01:31:50 +02:00
#. 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 of `` i `` -th word of the vocabulary in the given image.
Here is the class declaration ::
2011-03-03 08:29:55 +01:00
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:
...
};
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
.. index :: BOWImgDescriptorExtractor::BOWImgDescriptorExtractor
2011-02-28 22:26:43 +01:00
BOWImgDescriptorExtractor::BOWImgDescriptorExtractor
2011-02-22 21:43:26 +01:00
--------------------------------------------------------
2011-05-12 01:31:50 +02:00
.. c:function :: BOWImgDescriptorExtractor::BOWImgDescriptorExtractor( const Ptr<DescriptorExtractor>& dextractor, const Ptr<DescriptorMatcher>& dmatcher )
2011-02-22 21:43:26 +01:00
2011-05-12 01:31:50 +02:00
The class constructor.
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
:param dextractor: Descriptor extractor that is used to compute descriptors for an input image and its keypoints.
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
:param dmatcher: Descriptor matcher that is used to find the nearest word of the trained vocabulary for each keypoint descriptor of the image.
2011-02-22 21:43:26 +01:00
.. index :: BOWImgDescriptorExtractor::setVocabulary
2011-02-28 22:26:43 +01:00
BOWImgDescriptorExtractor::setVocabulary
2011-02-22 21:43:26 +01:00
--------------------------------------------
2011-05-12 01:31:50 +02:00
.. c:function :: void BOWImgDescriptorExtractor::setVocabulary( const Mat& vocabulary )
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
Sets a visual vocabulary.
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
:param vocabulary: Vocabulary (can be trained using the inheritor of :ref:`BOWTrainer` ). Each row of the vocabulary is a visual word (cluster center).
2011-02-22 21:43:26 +01:00
.. index :: BOWImgDescriptorExtractor::getVocabulary
2011-02-28 22:26:43 +01:00
BOWImgDescriptorExtractor::getVocabulary
2011-02-22 21:43:26 +01:00
--------------------------------------------
2011-05-12 01:31:50 +02:00
.. c:function :: const Mat& BOWImgDescriptorExtractor::getVocabulary() const
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
Returns the set vocabulary.
2011-02-22 21:43:26 +01:00
.. index :: BOWImgDescriptorExtractor::compute
2011-02-28 22:26:43 +01:00
BOWImgDescriptorExtractor::compute
2011-02-22 21:43:26 +01:00
--------------------------------------
2011-05-12 01:31:50 +02:00
.. c:function :: void BOWImgDescriptorExtractor::compute( const Mat& image, vector<KeyPoint>& keypoints, Mat& imgDescriptor, vector<vector<int> >* pointIdxsOfClusters=0, Mat* descriptors=0 )
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
Computes an image descriptor using the set visual vocabulary.
2011-02-22 21:43:26 +01:00
2011-05-12 01:31:50 +02:00
:param image: Image, for which the descriptor is computed.
2011-02-22 21:43:26 +01:00
2011-02-26 12:05:10 +01:00
:param keypoints: Keypoints detected in the input image.
2011-02-22 21:43:26 +01:00
2011-05-08 17:30:00 +02:00
:param imgDescriptor: Computed output image descriptor.
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
:param pointIdxsOfClusters: Indices of keypoints that belong to the cluster. This means that ``pointIdxsOfClusters[i]`` are keypoint indices that belong to the ``i`` -th cluster (word of vocabulary) returned if it is non-zero.
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
:param descriptors: Descriptors of the image keypoints that are returned if they are non-zero.
2011-02-22 21:43:26 +01:00
.. index :: BOWImgDescriptorExtractor::descriptorSize
2011-02-28 22:26:43 +01:00
BOWImgDescriptorExtractor::descriptorSize
2011-02-22 21:43:26 +01:00
---------------------------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: int BOWImgDescriptorExtractor::descriptorSize() const
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
Returns an image discriptor size if the vocabulary is set. Otherwise, it returns 0.
2011-02-22 21:43:26 +01:00
.. index :: BOWImgDescriptorExtractor::descriptorType
2011-02-28 22:26:43 +01:00
BOWImgDescriptorExtractor::descriptorType
2011-02-22 21:43:26 +01:00
---------------------------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: int BOWImgDescriptorExtractor::descriptorType() const
2011-02-22 21:43:26 +01:00
2011-05-08 11:31:15 +02:00
Returns an image descriptor type.
2011-02-22 21:43:26 +01:00