我正在使用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张图片,每张图片的大小都为200x200
。最后,我将它们作为我的训练数据集,共有20
行和200x200
列。我检查了所有这些大小结果,它们似乎都正常工作。但是现在唯一的问题是,无论我输入什么样的图像进行预测,它总是给我一个1
的结果,即使对于那些非常不同的图像也是如此。看起来它没有正确地工作。有人能帮我检查一下这里应该出现了什么问题吗?我在现有的互联网资源中找不到任何解释。提前致谢。
ii
?images{i} = im2double(images{ii});
- chenaren