物体目标分类

这章描述了局部2维图像特征相关算法和基于这些特征的二维图像中的物体目标分类。

BOWTrainer

class BOWTrainer

给定训练图像的特征描述子集,该抽象基类用于训练 视觉词典包 词典. 具体参考文章 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:
    ...
};

BOWTrainer::add

向训练集中增加特征描述子.

C++: void BOWTrainer::add(const Mat& descriptors)
Parameters:
  • descriptors – 向训练集中增加特征描述子. descriptors 矩阵中每一行就是一个特征描述子.

训练集可以用 clustermethod 聚类来构造视觉词典。

BOWTrainer::getDescriptors

返回训练集中的特征描述子.

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

BOWTrainer::descripotorsCount

返回训练集中所有存储的特征描述子的数量.

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

BOWTrainer::cluster

根据训练集进行聚类.

C++: Mat BOWTrainer::cluster() const
C++: Mat BOWTrainer::cluster(const Mat& descriptors) const
Parameters:
  • descriptors – 用于聚类的特征描述子. descriptors 矩阵中每一行 是一个特征描述子. 特征描述子不会被添加到训练集中部.

视觉词典包含聚类中信. 因此,这个方法返回的是视觉词典. 在输入为空的条件下, 存储在训练集中的特征描述子被用来聚类. 在输入特定的特征描述子矩阵条件下, 输入的特征描述子被用来聚类.

BOWKMeansTrainer

class BOWKMeansTrainer

kmeans() -用于训练视觉词典的基类. 采用 视觉词典包 算法实现。

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

BOWKMeansTrainer::BOWKMeansTrainer

构造函数.

C++: BOWKMeansTrainer::BOWKMeansTrainer(int clusterCount, const TermCriteria& termcrit=TermCriteria(), int attempts=3, int flags=KMEANS_PP_CENTERS )

See kmeans() function parameters.

BOWImgDescriptorExtractor

class BOWImgDescriptorExtractor

基于 视觉词典包 算法来计算一个图像的特征描述子的类. 算法步骤如下:

  1. 给定一幅图像及其图像特征检测子(关键点)集,计算特征描述子.
  2. 给定每一个图像特征检测子对应的特征描述子,从视觉词典中寻找最近的词.
  3. 计算视觉词典包图像特征描述子.该结果为一个归一化后的直方图.直方图向量中第``i``个 值是视觉词典中的第``i``个词在给定图像中的频率.

这个类的描述如下:

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

BOWImgDescriptorExtractor::BOWImgDescriptorExtractor

构造函数.

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

:param dextractor:给定一幅图像及其图像特征检测子(关键点)集,计算对应的特征描述子.

Parameters:
  • dmatcher – 给定一幅图像及其图像特征检测子(关键点)集,用于寻找训练后的视觉词典中最近的词.

BOWImgDescriptorExtractor::setVocabulary

设置一个视觉词典.

C++: void BOWImgDescriptorExtractor::setVocabulary(const Mat& vocabulary)
Parameters:
  • vocabulary – 视觉词典 (是 BOWTrainer 的继承类). 视觉词典中的每一行是一个词 (聚类中心).

BOWImgDescriptorExtractor::getVocabulary

返回视觉词典集.

C++: const Mat& BOWImgDescriptorExtractor::getVocabulary() const

BOWImgDescriptorExtractor::compute

用视觉词典计算图像特征描述子.

C++: void BOWImgDescriptorExtractor::compute(const Mat& image, vector<KeyPoint>& keypoints, Mat& imgDescriptor, vector<vector<int>>* pointIdxsOfClusters=0, Mat* descriptors=0 )
Parameters:
  • image – 输入图像.
  • keypoints – 对于给定输入图像输出的图像特征检测子(关键点).
  • imgDescriptor – 待输出的特征描述子.
  • pointIdxsOfClusters – 属于该聚类中心的关键点的标号. pointIdxsOfClusters[i] 是在非空条件下,属于第``i``个聚类中心 (视觉词典的词)的关键点的标号.
  • descriptors – 在非空条件下,返回图像检测子(关键点)对应的图像特征描述子.

BOWImgDescriptorExtractor::descriptorSize

如果字典已经生成,返回图像特征描述子矩阵的尺寸. 否则,返回0.

C++: int BOWImgDescriptorExtractor::descriptorSize() const

BOWImgDescriptorExtractor::descriptorType

返回图像特征描述子类型.

C++: int BOWImgDescriptorExtractor::descriptorType() const