我正在使用 Matlab 的 SVM 函数对从文件夹中读取的图像进行分类。我要做的是首先从文件夹中读取 20 张图像,然后使用这些图像来训练 SVM,然后给出一个新图像作为输入,以决定该输入图像是否属于这 20 个训练图像的同一类别。如果是,那么分类结果应该给我1
,如果不是,那么我期望收到-1
。
到现在为止,我写的代码如下:
imagefiles = dir('*.jpg');
nfiles = 20;
for i = 1:nfiles
currentfilename = imagefiles(i).name;
currentimage = imread(currentfilename);
images{i} = currentimage;
images{i} = im2double(images{i});
images{i} = rgb2gray(images{i});
images{i} = imresize(images{i},[200 200]);
images{i} = reshape(images{i}', 1, size(images{i},1)*size(images{i},2));
end
trainData = zeros(nfiles, 40000);
for ii=1:nfiles
trainData(ii,:) = images{ii};
end
class = [1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1];
SVMStruct = svmtrain (trainData, class);
inputImg = imread('testImg.jpg');
inputImg = im2double(inputImg);
inputImg = rgb2gray(inputImg);
inputImg = imresize(inputImg, [200 200]);
inputImg = reshape (inputImg', 1, size(inputImg,1)*size(inputImg,2));
result = svmclassify(SVMStruct, inputImg);
由于图像是从文件夹中按系列读取的,因此单元格也是如此images
。然后我将它们转换为灰度,如代码所示,并调整它们的大小,因为这些图像的大小不同。因此,在这一步之后,我有 20 张图片,每张都有 size 200x200
。最后,我将这些作为我的训练数据集,包含20
行和200x200
列。我检查了所有这些尺寸结果,它们似乎工作正常。但现在唯一的问题是,无论我给它预测什么样的输入图像,它总是给我一个结果1
,即使对于那些非常不同的图像也是如此。似乎它无法正常工作。有人可以帮我看看这里应该是哪里的问题吗?我无法从互联网上的现有资源中找到任何解释。提前致谢。