【问题标题】:SVM MATLAB Binary ClassificationSVM MATLAB 二进制分类
【发布时间】:2013-07-04 23:52:42
【问题描述】:

我是 SVM 的新手,我对分割图像中的两个不同对象(苹果和葡萄)感兴趣。为了训练,我通过提取的苹果和葡萄创建了新图像 (812x185)。但是,当我使用 MATLAB SVM为了测试包含苹果和葡萄的图像,我只收到一个对象的类,而不是两个对象的片段。谁能帮我解决我做错了什么?

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

【问题讨论】:

标签: matlab image-processing computer-vision svm


【解决方案1】:

您将逐像素分类与逐图像分类混淆了。

您正在训练一个分类器来区分苹果的图像和葡萄的图像。因此,当您输入一个测试图像时,您会得到一个单个位输出,说明该图像是苹果还是葡萄。

如果您想要逐像素决策,则需要提供逐像素标签:哪个像素是葡萄,哪个是苹果,那么您可能期望您的输出是像素级的。

关于语义分割的经典论文(这似乎是您想要完成的工作)是 textonBoost 论文,作者为 MSRC 的 Shotton、Winn、rother 和 Criminisi。

【讨论】:

    猜你喜欢
    • 2014-04-19
    • 2013-12-08
    • 2019-01-30
    • 2018-03-24
    • 2015-12-21
    • 2013-02-04
    • 2013-01-23
    • 2017-07-15
    • 2012-11-14
    相关资源
    最近更新 更多