0

私は SVM を初めて使用し、画像内の 2 つの異なるオブジェクト (リンゴとブドウ) をセグメント化することに興味があります。トレーニングのために、リンゴとブドウを抽出して新しい画像 (812x185) を作成しました。しかし、MATLAB SVM を使用してリンゴとブドウを含む画像で、2 つのオブジェクトのセグメントではなく、1 つのオブジェクトのクラスしか受け取りません。

source={'apple1.jpg','apple2.jpg','apple3.jpg','grape1.jpg', ...
'grape2.jpg','grape3.jpg'};
nfiles = 6; 

for i = 1:nfiles
currentfilename = source{i}
currentimage = imread(currentfilename);
images{i} = currentimage;
images{i} = im2double(images{i});
images{i} = rgb2gray(images{i});
images{i} = imresize(images{i},[900 700]);
images{i} = reshape(images{i}', 1, size(images{i},1)*size(images{i},2));
end

 trainData = zeros(nfiles, 630000);

 for ii=1:nfiles
 trainData(ii,:) = images{ii};
 end

 class = [1 1 1 -1 -1 -1];
 SVMStruct = svmtrain (trainData, class);


inputImg = imread('test_image.jpg');
 inputImg = im2double(inputImg);
 inputImg = rgb2gray(inputImg);
     images{i} = imresize(images{i},[900 700]);
  inputImg = reshape (inputImg', 1, size(inputImg,1)*size(inputImg,2));
 result = svmclassify(SVMStruct, inputImg);
4

1 に答える 1

0

ピクセルごとの分類と画像ごとの分類を混同しています。

リンゴの画像とブドウの画像を区別するように分類器をトレーニングしています。したがって、テスト画像を入力すると、この画像がリンゴかブドウかを示す単一ビット出力が得られます。

ピクセルごとの決定が必要な場合は、ピクセルごとのラベル付けを提供する必要があります。つまり、どのピクセルがブドウで、どのピクセルがリンゴであるか、出力がピクセルレベルであると予想される場合があります。

セマンティック セグメンテーションに関する古典的な論文 (これはあなたが達成しようとしているもののようです) は、MSRCのShotton、Winn、rother、および Criminisi による textonBoost 論文です。

于 2013-07-07T15:17:38.383 に答える