6

フォルダーから読み込んだ画像を分類するために、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も、それらの非常に異なる画像であっても、常に として結果が得られることです。正しく動作していないようです。ここで問題がどこにあるのかを調べるのを手伝ってもらえますか? インターネット上の既存のソースからの説明は見つかりませんでした。前もって感謝します。

4

2 に答える 2

4

ここにあなたを助けるかもしれないすべての画像を読む機能があります

function X = ReadImgs(Folder,ImgType)
Imgs = dir(fullfile(Folder, ImgType));
NumImgs = size(Imgs,1);
image = double(imread(fullfile(Folder, Imgs(1).name)));
X = zeros([NumImgs size(image)]);
for i=1:NumImgs,
  img = double(imread(fullfile(Folder, Imgs(i).name)));
  if (size(image,3) == 1)
    X(i,:,:) = img;
  else
    X(i,:,:,:) = img;
end
end

ソース: http://computervisionblog.wordpress.com/2011/04/13/matlab-read-all-images-from-a-folder-everything-starts-here/

于 2013-08-31T10:47:36.453 に答える