Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SVM-MATLAB二值分类_Matlab_Image Processing_Computer Vision_Svm - Fatal编程技术网

SVM-MATLAB二值分类

SVM-MATLAB二值分类,matlab,image-processing,computer-vision,svm,Matlab,Image Processing,Computer Vision,Svm,我是SVM新手,我对分割图像中的两个不同对象(苹果和葡萄)感兴趣。为了训练,我创建了新图像(812x185)通过提取苹果和葡萄。但是,当我使用MATLAB SVM测试包含苹果和葡萄的图像时,我只接收一个对象的类,而不是两个对象的段。有人能帮我找出我做错了什么吗 source={'apple1.jpg','apple2.jpg','apple3.jpg','grape1.jpg', ... 'grape2.jpg','grape3.jpg'}; nfiles = 6; for i = 1:nf

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

你混淆了每像素分类和每图像分类

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

如果你想要一个每像素的决定,你需要提供一个每像素的标签:哪个像素是葡萄,哪个是苹果,那么你可能期望你的输出是像素级的

MSRC的Shotton、Winn、rother和Criminisi撰写了一篇关于语义切分的经典论文(这似乎是您想要完成的)