袋的单词培训和测试opencv,matlab

Mar*_*rio 20 matlab opencv image-processing object-recognition matlab-cvst

我正在使用SIFT功能在opencv中实现Bag Of Words,以便对特定数据集进行分类.到目前为止,我一直是苹果集群描述符并生成词汇.据我所知,我必须训练SVM ...但我有一些问题,我真的很困惑他们.主要问题是实现背后的概念,这些是我的问题:

1-当我提取特征然后创建词汇表时,我是否应该提取所有对象的特征(比如5个对象)并将它们放在一个文件中,所以我将它们全部放在一个包含所有对象的单个词汇表文件中话?以及在我进行分类时如何将它们分开?

2-如何实现SVM?我知道openCV中使用的函数但是如何?

3-我可以在MATLAB中完成工作,我的意思是SVM培训的实施,但有没有可用的代码可以指导我完成我的工作?我已经看到安德烈Vedaldi使用的代码,在这里,但他每次用一个类和另一个问题,他没有展示如何创建,他是用他的练习.MAT文件只工作.我能找到的所有其他实现,他们都没有使用SVM.所以,你能指导这一点吗!

谢谢

Alc*_*sta 24

当地特色

使用SIFT时,通常需要提取本地功能.这意味着什么?您有图像,从该图像中可以找到从中提取局部特征向量的点.局部特征向量只是由数值组成的向量,该数值描述从中提取它的图像区域的视觉信息.虽然可以从图像A中提取的局部特征向量的数量不需要与可以从图像B中提取的特征向量的数量相同,但是局部特征向量的数量分量(即其维度)始终是相同.

现在,如果您想使用本地特征向量对图像进行分类,则会出现问题.在传统的图像分类中,每个图像由全局特征向量描述,在机器学习的上下文中,可以将其视为一组数字属性.但是,当您提取一组局部特征向量时,您没有图像分类所需的每个图像的全局表示.可用于解决该问题的技术是一袋词,也称为视觉词袋(BoW).

袋视觉词

这是(非常)简化的BoW算法:

  1. 从您的图像集中提取SIFT局部特征向量;

  2. 将所有这些局部特征向量放入一个集合中.此时,您甚至不需要存储从中提取每个局部特征向量的图像;

  3. 在局部特征向量集上应用聚类算法(例如k-means),以便找到质心坐标并为每个质心分配一个id.这组质心将成为你的词汇;

  4. 全局特征向量将是一个直方图,用于计算每个图像中每个质心出现的次数.要计算直方图,请找到每个局部特征向量的最近质心.

图像分类

在这里,我假设您的问题如下:

您可以输入一组带标签的图像和一组未标记的图像,您可以根据其视觉外观为其分配标签.假设你的问题是对风景摄影进行分类.您的图像标签可以是,例如,"山","海滩"或"森林".

从每个图像(即其视觉词袋)中提取的全局特征向量可以被视为一组数字属性.表示每个图像的视觉特性的这组数值属性和相应的图像标签可用于训练分类器.例如,您可以使用Weka等数据挖掘软件来解决您的问题,该软件具有SVM实现(称为SMO).

基本上,您只需要根据ARFF文件格式格式化全局特征向量和相应的图像标签,这基本上是全局特征向量的CSV,后跟图像标签.


sag*_*nms 11

这是一篇非常好的文章,介绍使用OpenCV v2.2进行分类的Bag of Words模型. http://app-solut.com/blog/2011/07/the-bag-of-words-model-in-opencv-2-2/

关于使用常规贝叶斯分类器进行图像分类的后续文章. http://app-solut.com/blog/2011/07/using-the-normal-bayes-classifier-for-image-categorization-in-opencv/

还包括一个关于Caltech-256数据集的~200行代码演示.http://code.google.com/p/open-cv-bow-demo/downloads/detail?name=bowdemo.tar.gz&can=2&q=

这里可以直观地了解图像分类过程:http: //www.robots.ox.ac.uk/~vgg/share/practical-image-classification.htm

真的帮我澄清了很多问题.我希望它对某人有帮助.:)