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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Funktion, um alle Bilder Lesen, die Ihnen helfen können
Quelle: http://computervisionblog.wordpress.com/2011/04/13/matlab-read-all-images-from-a-folder-everything-starts-here/
InformationsquelleAutor Leonardo Hermoso
dies ist, sollte sein Werk in MATLAB
https://github.com/gunungloli666/svm-test
InformationsquelleAutor Mohammad Fajar