我不是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');
答案 0 :(得分:0)
当您只有大约40个数据点用于培训,测试和验证时,无法在原始100x100图像上训练任何分类器。所以推荐一个Matlab工具箱并不能真正帮助你解决问题。
答案是:获取更多数据
为了完整起见,您可以尝试两种方法:
功能提取
也许在你的照片中有一些非常明显的特征(一些照片较暗,有一个白色的角落等),你可以在训练之前提取。使用3-4个功能,您可以尝试使用数据集训练分类器。在这种情况下,我会尝试fitcensemble,因为它很容易使用而没有算法的内部工作。
使用预先训练的分类器
您可以使用 GoogLeNet ,也许您的照片适合ImageNet categories之一。如果您的图片与任何类别都不匹配,请尝试transfer learning。