我希望有人能够解释如何使用词袋模型通过SIFT / SURF / ORB功能和支持向量机进行图像分类?

目前,我可以计算图像的SIFT特征向量,并且已经实现了SVM,但是我发现很难理解有关如何使用词袋模型来“向量量化”的文献。 SIFT功能和构建直方图以提供固定大小的向量,可用于训练和测试SVM。

欢迎访问该主题的教程或文献的任何链接,谢谢

评论

这是有关视​​觉袋单词如何工作的详细说明。

#1 楼

如果可以实现SVM,则可以量化功能。 :)

通常,使用k均值聚类对特征进行量化。首先,确定您的“词汇量”应该是多少(例如200个“视觉单词”),然后针对该数目的群集(200)运行k均值群集。 SIFT描述符是128个元素的向量,即。 e。指向128维空间。因此,您可以像其他任何点一样尝试将它们聚类。您可以从大量图像中提取SIFT描述符,类似于您希望使用功能包进行分类的图像。 (理想情况下,这应该是一组单独的图像,但是在实践中,人们通常只会从他们的训练图像集中获得特征。)然后,您可以在这套大型SIFT描述符上运行k-means聚类,以将其划分为200个(或任何其他类)聚类, 一世。 e。将每个描述符分配给一个群集。 k-means将为您提供200个聚类中心,您可以使用它们将任何其他SIFT描述符分配给特定的聚类。

然后,您将图像中的每个SIFT描述符作为对象,并确定200个聚类中的哪个通过找到最接近它的集群中心来属于它。然后,您只需计算每个集群中有多少个功能。因此,对于具有任意数量的SIFT功能的任何图像,您都有200个bin的直方图。那就是您提供给SVM的特征向量。 (请注意,“特征”一词严重超载)。

我记得,关于如何对这些直方图进行归一化有很多工作要做。我可能是错的,但是我似乎想起了一篇论文,该论文声称二进制特征向量(即,如果存在至少1个特征,则为1,否则为0)要比直方图更好。您将需要查看文献以获取详细信息,并且这些详细信息很重要。

编辑:MATLAB的计算机视觉系统工具箱现在提供了功能包。

评论


$ \ begingroup $
Dima,您好,谢谢您的回答,我只是有一个问题,当您说“然后针对该数量的群集运行k-means群集”时,您正在运行k-mean群集吗? ps我很想接受这个答案,因为您对“功能严重超载”一词的评论,我对图像处理是陌生的,我完全同意
$ \ endgroup $
–乔诺·布罗根(Jono Brogan)
2012年11月13日9:28



$ \ begingroup $
@JonoBrogan:您应该接受我的回答,因为它是正确的。 :)我已经编辑了答案以尝试阐明k均值。
$ \ endgroup $
–迪马
2012年11月13日13:06



$ \ begingroup $
现在有意义吗?
$ \ endgroup $
–迪马
2012年11月13日下午13:17

$ \ begingroup $
好的,谢谢。我已经接受了答案,尽管我只是想知道您是否知道如何确定要使用多少个“视觉单词”?
$ \ endgroup $
–乔诺·布罗根(Jono Brogan)
2012年11月13日下午13:24

$ \ begingroup $
但是最大的问题是Kmeans算法不能总是给出相同的结果。它是随机的。
$ \ endgroup $
–user7130
2013年12月2日,2:15