svmtrain中的错误,“Y和TRAINING必须具有相同的行数”

时间:2015-02-04 05:46:22

标签: matlab image-processing svm

我正在使用svmtrain函数对图像进行分类。我收到这样的错误。

Error using svmtrain (line 253)
Y and TRAINING must have the same number of rows.

Error in svm5 (line 80)
SVMStruct = svmtrain(Training_Set , train_label, 'kernel_function', 'linear');

Training_Set包含多组图像,train_lable是识别输入图像的类。 参考的完整代码

clc
clear all

% Load Datasets

Dataset = 'D:\majorproject\image\traindata\';   
Testset  = 'D:\majorproject\image\testset\';


% we need to process the images first.
% Convert your images into grayscale
% Resize the images

width=100; height=100;
DataSet      = cell([], 1);

 for i=1:length(dir(fullfile(Dataset,'*.jpg')))

     % Training set process
     k = dir(fullfile(Dataset,'*.jpg'));
     k = {k(~[k.isdir]).name};
     for j=1:length(k)
        tempImage       = imread(horzcat(Dataset,filesep,k{j}));
        imgInfo         = imfinfo(horzcat(Dataset,filesep,k{j}));

         % Image transformation
         if strcmp(imgInfo.ColorType,'grayscale')
            % array of images
            DataSet{j}   = double(imresize(tempImage,[width height])); 
         else
            % array of images
            DataSet{j}   = double(imresize((tempImage),[width height])); 
         end
     end
 end
TestSet =  cell([], 1);
  for i=1:length(dir(fullfile(Testset,'*.jpg')))

     % Training set process
     k = dir(fullfile(Testset,'*.jpg'));
     k = {k(~[k.isdir]).name};
     for j=1:length(k)
        tempImage       = imread(horzcat(Testset,filesep,k{j}));
        imgInfo         = imfinfo(horzcat(Testset,filesep,k{j}));

         % Image transformation
         if strcmp(imgInfo.ColorType,'grayscale')
            % array of images
            TestSet{j}   = double(imresize(tempImage,[width height])); 
         else
            % array of images
            TestSet{j}   = double(imresize(tempImage,[width height])); 
         end
     end
  end

    % Prepare class label for first run of svm
% I have arranged labels 1 & 2 as per my convenience.

% It is always better to label your images numerically

% Note that for every image in our Dataset we need to provide one label.

% we have 10 images and we divided it into two label groups here.

    train_label               = zeros(size(10,1),1);
    train_label(1:4,1)   = 1;         % 1 = naa
    train_label(5:10,1)  = 2;         % 2 = ta


% Prepare numeric matrix for svmtrain

    Training_Set=[];
    for i=1:length(DataSet)
    b = imresize(DataSet{i},[100 100]);
    Training_Set_tmp= b(:);
    %Training_Set_tmp   = reshape(DataSet{i},1, 100*100);
    Training_Set=[Training_Set;Training_Set_tmp];
    end

    Test_Set=[];
    for j=1:length(TestSet)
    b = imresize(TestSet{j},[100 100]);
    Test_set_tmp= b(:);
    %Test_set_tmp   = reshape(TestSet{j},1, 100*100);
    Test_Set=[Test_Set;Test_set_tmp];
    end


% Perform first run of svm

SVMStruct = svmtrain(Training_Set, train_label, 'kernel_function', 'linear');
Group     = svmclassify(SVMStruct, Test_Set);
请指导我克服这个问题。 谢谢。

1 个答案:

答案 0 :(得分:0)

我最近碰到了这个类似的问题,经过几个小时的检查,我找到了问题:

% we have 10 images and we divided it into two label groups here.

train_label               = zeros(size(10,1),1);
train_label(1:4,1)   = 1;         % 1 = naa
train_label(5:10,1)  = 2;         % 2 = ta

我只有499张图片,而我将我的尺寸设置为500(意外删除1),从而产生与上述完全相同的错误。您没有在此处提供数据集,因此您可以考虑再次检查它。