Я использую функцию SVM для Matlab для классификации изображений, которые читаются из папки. Я хочу сначала прочитать 20 изображений из папки, а затем использовать их для обучения SVM, а затем дать новое изображение в качестве входного сигнала, чтобы решить, попадает ли это входное изображение в одну категорию этих 20 обучающих образов или нет. Если это так, то результат классификации должен дать мне 1
, если нет, то я ожидаю получить -1
.Matlab SVM для классификации изображений
До сих пор, мой написанный код выглядит следующим образом:
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);
Поскольку изображения считываются последовательно из папки, так camethe клетки images
. Затем я преобразовал их в оттенки серого, как показано в коде, и изменил их размер, поскольку эти изображения были НЕ того же размера. Таким образом, после этого шага у меня было 20 изображений, каждый из которых имел размер 200x200
. И наконец, я дал им служить в качестве моего учебного набора данных с номерами 20
и 200x200
. Я проверил все эти результаты, и они, похоже, отлично работали. Но сейчас единственная проблема заключается в том, что независимо от того, какое входное изображение я предсказываю, он всегда дает мне результат как 1
, даже для тех самых разных изображений. Похоже, что он работает неправильно. Может кто-нибудь помочь мне проверить, где должна быть проблема здесь? Я не мог найти никаких объяснений из существующих источников в Интернете. Заранее спасибо.
'изображения {i} = im2double (изображения {ii}); 'Почему' ii'? – chenaren
Возвращает ли он 1 на изображения из набора тренировок, которые имеют класс -1? – Photon
извините, для {ii}, я набрал его неправильно в моем вопросе здесь. Я отредактировал его. –