【问题标题】:Classification from a feature vector从特征向量分类
【发布时间】:2015-03-20 01:08:01
【问题描述】:

我对此很陌生;我试图将纹理分类为有缺陷的或无缺陷的。我在 Matlab 中使用了 Gabor 滤波器组,它输出图像的 Gabor 特征的列向量。我有一个无缺陷图像和有缺陷图像的数据集。

我的问题是,我现在可以用这个(或这些)特征向量对纹理进行分类吗?我已经阅读了许多类型的分类,但找不到任何类似的实现类型来帮助我了解我在做什么。非常感谢。

【问题讨论】:

标签: matlab image-processing machine-learning computer-vision classification


【解决方案1】:

您可以使用支持向量机 (SVM) 或神经网络。支持向量机被广泛使用并给出了很好的结果。如何在 Matlab 中使用它的示例。

  1. 首先,您需要将数据分为“训练”和“测试”集。
  2. “训练”集是您所知道的,即在您的情况下,您知道哪些纹理有缺陷,哪些纹理没有缺陷。
  3. “测试”集是您要测试分类方法的集。

假设training 矩阵包含所有训练集图像的 Gabor 特征,其中每一行对应于图像的特征向量(转置列向量)。让我们假设前 25 个没有缺陷,接下来的 25 个有缺陷。现在,您需要创建一个group 矩阵,它告诉 SVM 哪些有缺陷,哪些没有。所以,

group = [ones(25,1); -1*ones(25,1)]; // non-defective = 1, defective = -1    
SVMStruct = svmtrain(training, group);

SVMStruct 是您将用于对“测试”数据进行分类的支持向量。假设testing 矩阵包含之前的 Gabor 特征。

results = svmclassify(SVMStruct, testing);

results 是最终的决策矩阵,包含 1 或 -1,具体取决于做出的决策。

【讨论】:

  • +1 我从您的示例中了解到,您有一个包含 50 个图像的训练集:25 个有缺陷的图像和 25 个无缺陷的图像。我们使用转置特征向量的训练矩阵来训练 SVM。我有点不确定 svmtrain 是做什么的。它是如何将训练矩阵与组矩阵关联起来的?
  • 组矩阵告诉 SVM 哪些特征是有缺陷的,哪些是无缺陷的。因此,在我们的示例中 group(1)=1 这意味着training 矩阵的第一行是无缺陷图像的特征。同样,对于所有其他行。
  • 感谢您的信息 - 非常有帮助。
【解决方案2】:

如果你已经提取了你的特征向量,有很多方法可以去。

  • 例如,您可以对来自两个类的样本使用 svm 方法。

  • 更简单的方法包括最近邻、最近质心等

编辑:

我以为这是一条评论,但它太大了,无法容纳。

关于样品的可分离性:

  • 确定线性可分性的一种方法是使用线性支持向量机作为边界(除非您担心时间效率,因此无论如何您都坚持使用线性)。此 svm 模型不会过度训练,并且可以提供有关可分离性的线索。
  • 其他选项包括 pca,它将您的样品投影到更少的尺寸,并且这些尺寸减小的样品可以很容易地绘制出来以进行视觉检查。这种方法具有目视检查的优势,但它取决于 pca 步骤它代表样本可分离性的程度。也许可分离性在于非主要成分(即样本的尺寸),然后 pca 就失败了。
  • 作为粗略的近似值,我经常将样本的随机尺寸绘制在一起,以便快速(当然也可能不准确)查看它们。例如,如果您有 100 个维度的样本,您可以仅绘制前两个维度(就像您有二维样本一样),以查看您的两个类是否在很大程度上发生冲突。如果有,那么您可以检查其他维度,但如果没有,那么您知道它们至少在某些维度上是可分离的。

【讨论】:

  • 感谢您的建议 (+1),但我已经了解这些技术 - 我更多的是寻找一个实际示例来帮助我了解如何对其进行编程以及哪种分类最适合。
  • 哪个分类取决于数据。如果您的数据不够可分离,那么两种技术都无法解决问题。您可以尝试不同的参数来检查性能。
  • 有没有办法判断数据的可分离性?根据图像大小,我拥有的特征向量可以包含 30,000 到 2,360,000 个元素。
猜你喜欢
  • 2017-02-21
  • 2012-04-19
  • 2012-07-14
  • 2013-11-27
  • 2011-03-18
  • 2015-06-30
  • 2017-10-05
  • 2017-04-30
相关资源
最近更新 更多