我正在使用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);
请指导我克服这个问题。
谢谢。
答案 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),从而产生与上述完全相同的错误。您没有在此处提供数据集,因此您可以考虑再次检查它。