物体目标分类 ===================== .. highlight:: cpp 这章描述了局部2维图像特征相关算法和基于这些特征的二维图像中的物体目标分类。 BOWTrainer ---------- .. ocv: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& getDescriptors() const; int descripotorsCount() const; virtual void clear(); virtual Mat cluster() const = 0; virtual Mat cluster( const Mat& descriptors ) const = 0; protected: ... }; BOWTrainer::add ------------------- 向训练集中增加特征描述子. .. ocv:function:: void BOWTrainer::add( const Mat& descriptors ) :param descriptors: 向训练集中增加特征描述子. ``descriptors`` 矩阵中每一行就是一个特征描述子. 训练集可以用 ``clustermethod`` 聚类来构造视觉词典。 BOWTrainer::getDescriptors ------------------------------ 返回训练集中的特征描述子. .. ocv:function:: const vector& BOWTrainer::getDescriptors() const BOWTrainer::descripotorsCount --------------------------------- 返回训练集中所有存储的特征描述子的数量. .. ocv:function:: const vector& BOWTrainer::descripotorsCount() const BOWTrainer::cluster ----------------------- 根据训练集进行聚类. .. ocv:function:: Mat BOWTrainer::cluster() const .. ocv:function:: Mat BOWTrainer::cluster( const Mat& descriptors ) const :param descriptors: 用于聚类的特征描述子. ``descriptors`` 矩阵中每一行 是一个特征描述子. 特征描述子不会被添加到训练集中部. 视觉词典包含聚类中信. 因此,这个方法返回的是视觉词典. 在输入为空的条件下, 存储在训练集中的特征描述子被用来聚类. 在输入特定的特征描述子矩阵条件下, 输入的特征描述子被用来聚类. BOWKMeansTrainer ---------------- .. ocv:class:: BOWKMeansTrainer :ocv:func:`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 ---------------------------------- 构造函数. .. ocv:function:: BOWKMeansTrainer::BOWKMeansTrainer( int clusterCount, const TermCriteria& termcrit=TermCriteria(), int attempts=3, int flags=KMEANS_PP_CENTERS ) See :ocv:func:`kmeans` function parameters. BOWImgDescriptorExtractor ------------------------- .. ocv:class:: BOWImgDescriptorExtractor 基于 *视觉词典包* 算法来计算一个图像的特征描述子的类. 算法步骤如下: #. 给定一幅图像及其图像特征检测子(关键点)集,计算特征描述子. #. 给定每一个图像特征检测子对应的特征描述子,从视觉词典中寻找最近的词. #. 计算视觉词典包图像特征描述子.该结果为一个归一化后的直方图.直方图向量中第``i``个 值是视觉词典中的第``i``个词在给定图像中的频率. 这个类的描述如下: :: class BOWImgDescriptorExtractor { public: BOWImgDescriptorExtractor( const Ptr& dextractor, const Ptr& dmatcher ); virtual ~BOWImgDescriptorExtractor(){} void setVocabulary( const Mat& vocabulary ); const Mat& getVocabulary() const; void compute( const Mat& image, vector& keypoints, Mat& imgDescriptor, vector >* pointIdxsOfClusters=0, Mat* descriptors=0 ); int descriptorSize() const; int descriptorType() const; protected: ... }; BOWImgDescriptorExtractor::BOWImgDescriptorExtractor -------------------------------------------------------- 构造函数. .. ocv:function:: BOWImgDescriptorExtractor::BOWImgDescriptorExtractor( const Ptr& dextractor, const Ptr& dmatcher ) :param dextractor:给定一幅图像及其图像特征检测子(关键点)集,计算对应的特征描述子. :param dmatcher: 给定一幅图像及其图像特征检测子(关键点)集,用于寻找训练后的视觉词典中最近的词. BOWImgDescriptorExtractor::setVocabulary -------------------------------------------- 设置一个视觉词典. .. ocv:function:: void BOWImgDescriptorExtractor::setVocabulary( const Mat& vocabulary ) :param vocabulary: 视觉词典 (是 :ocv:class:`BOWTrainer` 的继承类). 视觉词典中的每一行是一个词 (聚类中心). BOWImgDescriptorExtractor::getVocabulary -------------------------------------------- 返回视觉词典集. .. ocv:function:: const Mat& BOWImgDescriptorExtractor::getVocabulary() const BOWImgDescriptorExtractor::compute -------------------------------------- 用视觉词典计算图像特征描述子. .. ocv:function:: void BOWImgDescriptorExtractor::compute( const Mat& image, vector& keypoints, Mat& imgDescriptor, vector >* pointIdxsOfClusters=0, Mat* descriptors=0 ) :param image: 输入图像. :param keypoints: 对于给定输入图像输出的图像特征检测子(关键点). :param imgDescriptor: 待输出的特征描述子. :param pointIdxsOfClusters: 属于该聚类中心的关键点的标号. ``pointIdxsOfClusters[i]`` 是在非空条件下,属于第``i``个聚类中心 (视觉词典的词)的关键点的标号. :param descriptors: 在非空条件下,返回图像检测子(关键点)对应的图像特征描述子. BOWImgDescriptorExtractor::descriptorSize --------------------------------------------- 如果字典已经生成,返回图像特征描述子矩阵的尺寸. 否则,返回0. .. ocv:function:: int BOWImgDescriptorExtractor::descriptorSize() const BOWImgDescriptorExtractor::descriptorType --------------------------------------------- 返回图像特征描述子类型. .. ocv:function:: int BOWImgDescriptorExtractor::descriptorType() const 翻译者 ------------- bittnt@ `OpenCV中文网站 `_