我想用C++将脑部肿瘤的MRI图像分为良、恶性两类。在训练支持向量机分类器之前,我使用SIFT特征,并对它们进行聚类。我不明白的是为什么有必要这么做?据我所知,of意味着只对特性进行集群;它不会改变输入的大小。
我读过,可能的方法是BoW和直方图。在直方图方法中,它只是计算每个集群中的#特性,对吗?我不认为这将提供我需要的信息,以分类良性肿瘤和恶性肿瘤,因为它们可以是小的和大的。In BoW approach,我不明白这个link。
基本上,我不知道如何处理我的SIFT特性来使用它作为SVM的输入。我真的要写一本字典吗?我求你了,请告诉我。非常感谢!
发布于 2015-08-07 18:49:47
我不太熟悉OpenCV或SIFT特性,但这应该足够通用,以便对所有编程语言都有用。我还将只描述下面的BoW方法。
让我们假设我们有N图像。对于每个图像i,我们都有F数量的特征,每个特征都有D维数。我们可以将所有特性放入数组feats中,这样看起来如下所示:
[1, 2, ..., D]
[..., ..., ..., D]
[N*F, ..., ..., D] feats的每一行都是一个带有D维度的特性,我们总共有一个N*F特性。
在k-的意思是,我们采取所有这些功能,并将它们分组为k集群.因此,每个特性都被分配到一个集群中。大多数k-表示函数通常返回一个大小为C的矩阵k x D,它表示集群的质心。这个矩阵C是k均值算法的“码本”或“字典”。一些用户还返回一个大小为N*F的向量,该向量显示每个特性分配给哪个集群(在OpenCv中,这是由链接:http://www.developerstation.org/2012/01/kmeans-clustering-in-opencv-with-c.html中的labels变量表示的)。
由于我们已经分配了所有的功能,所以每个图像i都有F特性,可以简单地用它们所属的集群来表示。例如,如果原始图像表示为
[1, 2, ..., D]
[..., ..., ..., D]
[F, ..., ..., D] 然后,图像也可以简单地表示为一个向量:
[1] % Assignment of feature 1
[...]
[F] % Assignment of feature F因此,您可以获取该向量并形成所表示的集群的直方图h。该直方图是图像的特征向量,以后可以在SVM中使用。
如果你需要进一步的澄清和/或一个例子,请告诉我!
https://stackoverflow.com/questions/31870560
复制相似问题