フォルダーから読み込んだ画像を分類するために、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);
画像はフォルダーからシリーズごとに読み込まれるため、 cell が来ましimages
た。次に、コードに示すようにグレースケールに変換し、サイズを変更しました。これらの画像は同じサイズではなかったからです。したがって、この手順の後、20 個の画像があり、それぞれのサイズは200x200
. そして最後に、20
行と200x200
列を含むこれらをトレーニング データセットとして提供しました。これらのサイズの結果をすべてチェックしましたが、問題なく動作しているように見えました。しかし、今のところ唯一の問題は、予測するためにどんな種類の入力画像を与えて1
も、それらの非常に異なる画像であっても、常に として結果が得られることです。正しく動作していないようです。ここで問題がどこにあるのかを調べるのを手伝ってもらえますか? インターネット上の既存のソースからの説明は見つかりませんでした。前もって感謝します。