Matlab-SVM für Bild-Klassifizierung

Ich bin mit SVM-Funktion von Matlab zu klassifizieren, die Bilder, die gelesen werden, aus einem Ordner. Was ich will zu tun ist, Lesen Sie zunächst 20 Bilder aus dem Ordner, dann verwenden Sie diese zum trainieren der SVM, und geben Sie dann ein neues Bild als input, um zu entscheiden, ob das input-Bild fällt in die gleiche Kategorie von diesen 20 Trainings-Bilder oder nicht. Wenn es ist, dann ist die Klassifikation Ergebnis sollte mir 1, wenn nicht, dann erwarte ich -1.

Bis jetzt mein code geschrieben ist, wie folgt:

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);

Da die Bilder gelesen werden, die von Serie aus dem Ordner, also camethe Zelle images. Dann habe ich Sie konvertiert in Graustufen wie im code gezeigt, und in der Größe angepasst, denn diese Bilder waren NICHT von gleicher Größe. Also nach diesem Schritt hatte ich 20 Bilder, die alle jeweils mit der Größe 200x200. Und endlich, ich gab diesen zu dienen, wie meine Trainings-dataset, mit 20 Zeilen, und 200x200 Spalten. Ich überprüfte alle von dieser Größe auf die Ergebnisse, und Sie schien zu funktionieren. Aber jetzt ist das problem nur, egal, welche Art von input Bild ich gebe es zu prognostizieren, es gibt mir immer ein Ergebnis als 1 auch für diese sehr unterschiedliche Bilder. Wie es scheint, nicht richtig funktioniert. Könnte mir jemand helfen, herausfinden, wo sollte hier das problem? Ich konnte Sie nicht finden, eine Erklärung, aus den vorhandenen Quellen auf dem internet. Vielen Dank im Voraus.

images{i} = im2double(images{ii}); Warum ii?
Hat es wieder 1 auf Bilder aus dem training set, die haben eine Klasse von -1 ?
sorry, für die {ii}, tippte ich es falsch in meiner Frage hier. Ich bearbeitete es.
Ich kann versuchen, es auf dem Trainings-set, dann erhalten Sie mehr Informationen. Danke.
Ok, ich löste dies durch mich. Ich danke Ihnen allen für Ihr Interesse.

InformationsquelleAutor E_learner | 2013-05-24

Schreibe einen Kommentar