从特征向量分类

时间:2015-01-21 13:29:45

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

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

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

2 个答案:

答案 0 :(得分:1)

如果您提取了特征向量,还有很多方法可以使用。

  • 例如,您可以对两个班级的样本使用svm方法。

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

编辑:

我认为这会是一个评论,但它太大而不适合。

关于样品的可分离性:

  • 确定线性可分性的一种方法是使用线性svm作为边界(除非您关注时间效率,否则无论如何都会遇到线性问题)。这个svm模型没有过度推断,可以提供关于可分性的线索。
  • 其他选项包括将样品投影到更少尺寸的pca,这些尺寸减小的样品可以轻松绘制,以便在视觉上进行检查。这种方法具有视觉检查的优点,但它取决于pca步骤它如何代表样品的可分离性。也许可分离性在于非主成分(即样本的维度),然后pca就会失败。
  • 作为一个粗略的近似,我经常将我的样本的随机尺寸绘制在一起,以获得它们的快速(当然可能是不准确的)外观。例如,如果您有100维的样本,则只能绘制前两个维度(就像您有二维样本一样),以查看您的两个类是否在很大程度上发生碰撞。如果他们这样做,那么你可以检查其他尺寸,但如果他们不知道,那么你知道它们至少可以分离到某些尺寸。

答案 1 :(得分:1)

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

  1. 首先,您需要将数据划分为' Training'和'测试'集。
  2. '训练' set是您知道的那个,即在您的情况下,您知道哪些纹理是有缺陷的,哪些是无缺陷的。
  3. '测试' set是您要测试分类方法的那个。
  4. 让我们说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,具体取决于所做的决定。