如何在MATLAB中进行简单的二进制图像分类?

时间:2018-01-15 07:07:09

标签: image matlab classification

我不是MATLAB的新手,只是对整个机器学习的新手。

我必须做一个简单的二进制图像分类。我不在乎它是工具箱还是代码,我只需要这样做。我尝试了在Github或其他网站上在线发现的几个分类代码,但大多数分类代码随机工作,其中一些用于预定义图像。

那些处理预定义图像的人很整洁(例如:http://www.di.ens.fr/willow/events/cvml2011/materials/practical-classification/),但我在应用一组新图像时遇到了问题,只是因为有一些.txt文件(名称的向量)图像,很容易复制)和一些.mat文件(同时包含名称和直方图)。

我遇到了以相同顺序创建名称和直方图的问题,我使用的代码是:

  for K = 1 : 4
    filename = sprintf('image_%04d.jpg', K);
    I = imread(filename);
    IGray = rgb2gray(I);
    H = hist(Igray(:), 32);
  end
  save('ImageDatabase.mat', 'I', 'H');

但由于某种原因,只保留最后一张图像的名称和路径(例如,在这种情况下,只有image_0004存储在名称槽中)。

我找到的另一个代码似乎很容易:https://github.com/rich-hart/SVM-Classifier,但输出实际上是随机的(对我而言)所以如果有人能向我解释发生了什么,我将不胜感激。有19个训练图像,20个用于测试。但是,如果我删除其中一个测试图像,则2个条目会从支持向量结构中消失?

无论如何,如果您有工具箱,或者更容易改编的代码或对上述代码的一些解释,我将不胜感激。

干杯!

编辑:

我尝试按照此代码示例:http://dipwm.blogspot.ro/2013/01/svm-support-vector-machine-with-matlab.html

即使我有30张100x100的图像,我仍然会收到此错误:

Error using svmtrain (line 253)
Y and TRAINING must have the same number of rows.

Error in Untitled (line 74)
SVMStruct = svmtrain(Training_Set , train_label, 'kernel_function', 'linear');

1 个答案:

答案 0 :(得分:0)

当您只有大约40个数据点用于培训,测试和验证时,无法在原始100x100图像上训练任何分类器。所以推荐一个Matlab工具箱并不能真正帮助你解决问题。

答案是:获取更多数据

为了完整起见,您可以尝试两种方法:

功能提取

也许在你的照片中有一些非常明显的特征(一些照片较暗,有一个白色的角落等),你可以在训练之前提取。使用3-4个功能,您可以尝试使用数据集训练分类器。在这种情况下,我会尝试fitcensemble,因为它很容易使用而没有算法的内部工作。

使用预先训练的分类器

您可以使用 GoogLeNet ,也许您的照片适合ImageNet categories之一。如果您的图片与任何类别都不匹配,请尝试transfer learning