opencv3计算机视觉学习笔记-词袋+svm

BOW实现步骤:

  • 1.创建词汇(特征)词典
  • 2.得到训练数据到字典的映射
  • 3.选择适当的分类器进行训练
  • 4.对新来的样本,先映射到字典空间,然后利用得到的分类器进行分类

1.创建词汇(特征)词典

以SIFT 128维特征作为例子。例如现在有1000张训练图片,对每一张训练图片都提取SIFT的128维特征,那么最终可以得到N(i)*128的特征,N(i)代表第i张图特征点的个数,因为每张图像不一样,所以每张图像的SIFT 特征个数也不一样。提取特征后对1000张图像提取出的所有SIFT特征进行聚类(目的是为了合并那些相近的特征,相当于集合的合并操作),常用的聚类方法是k-均值聚类。对以上例子对∑N(i)∑N(i)个特征选择1000聚类中心进行聚类,将这1000个聚类中心称为词典,这个词典好比一个容器,通俗一点就是一个直方图的基,利用这个基去统计这些样本的信息。

2.得到训练样本到字典的映射

此时已经得到一个直方图的基,如下图:
opencv3计算机视觉学习笔记-词袋+svm
图1 直方图的基,n表示聚类中心个数
这些直方图的基像是在空间的一些三维空间基向量i,jk,利用这些基向量去构造别的向量,只需要知道特定的系数就行。所以接下来的步骤就是将原始的图像(SIFIT 128维)向这些基向量作映射,得到相关系数(图像中出现该特征的个数),如图:
opencv3计算机视觉学习笔记-词袋+svm
图2 两个类别的直方图
通过相关的映射,得到不同类别的一个类别的直方图统计,这样整个BOW特征提取过程就算是完全实现了。接下来如何进行匹配,就是选择分类器的问题了。

3.选择适当的分类器进行训练

分类器可以选择朴素贝叶斯分类器或SVM。有研究表明BOW结合SVM效果比较好。训练的时候,将步骤2中得到的相关系数作为输入,送入到SVM分类器中进行训练。

4.对新样本进行识别

训练好分类器后,对于新来的样本,同样先提取SIFT特征,然后将SIFT特征映射到图1中的词典中去,然后得到的直方图就可以通过分类器进行分类了。
opencv3计算机视觉学习笔记-词袋+svm
图3 新图片的BOW直方图特征。