i am getting an error "Matrix index is out of range for deletion" Please help
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Bima Putra
el 18 de Dic. de 2019
I am get error like this
Matrix index is out of range for deletion.
Error in angkaaa (line 19)
huruflist(1) = [];
Im use regionprops (eccentricity, area, perimeter) and use svm multi class for clasification
This my code
close all
clear all
e = imread('E:\Latihan MATLAB\Project_UAS\Training\huruf-i\4.jpg');
figure, imshow(e);
t = graythresh(e);
imbw_otsu = im2bw(e,t);
figure, imshow(imbw_otsu);
se = strel('disk',1);
citra_close = imclose(e,se);
figure, imshow(citra_close);
imbw_manual = im2bw(citra_close, 115/255);
figure, imshow(imbw_manual);
imbw_manual3 = 1 - imbw_manual;
figure, imshow(imbw_manual3);
traindir = 'Training';
testdir = 'Testing';
huruflist = dir(traindir);
huruflist(1) = [];
huruflist(1) = [];
huruflist = {huruflist.name}';
test_data = [];
for i=1:size(huruflist,1)
train_kelas = huruflist{i};
imglist = dir([traindir '\' train_kelas]);
imglist(1) = [];
imglist(1) = [];
imglist = {imglist.name}';
for j=1:size(imglist,1)
imgname = imglist{j};
iminput = imread([traindir '\' train_kelas '\' imgname]);
imgray = rgb2gray(iminput);
s = regionprops(imbw, 'Eccentricity', 'Area', 'Perimeter');
eccentricity = cat(1, s.Eccentricity);
area = cat(1, s.Area);
perimeter = cat(1, s.Perimeter);
rasio_luaskeliling = area / perimeter;
test_data = [test_data; {train_kelas}, imgname, rasio_luaskeliling];
end
end
xlswrite('train_features.xlsx', test_data, 1, 'A1');
testlisthuruf = dir(testdir);
testlisthuruf(1) = [];
testlisthuruf(1) = [];
testlisthuruf = {testlisthuruf.name}';
testimgdir = 'Test Images';
if ~exist(testimgdir)
mkdir(testimgdir);
end
test_data = [];
for i=1:size(testlist,1)
imgname = testlist{i};
test_class = imgname(1:end-4);
iminput = imread([testdir '\' imgname]);
imgray = rgb2gray(iminput);
s = regionprops(imbw, 'Eccentricity', 'Area', 'Perimeter');
eccentricity = cat(1, s.Eccentricity);
area = cat(1, s.Area);
perimeter = cat(1, s.Perimeter);
rasio_luaskeliling = area / perimeter;
test_data = [test_data; {train_kelas}, imgname, rasio_luaskeliling];
end
[num, raw] = xlsread('train_features.xlsx');
trainX = num(:,:);
trainY = raw(:,1);
testX = cell2mat(test_data(:,2:end));
testY = test_data(:,1);
categories = {'huruf-a';'huruf-e';'huruf-i';'huruf-o';'huruf-u'};
result = cell(size(testY));
numClasses = size(categories,1);
for i=1:numClasses
G1vAll=(strcmp(trainY,categories(i)));
models(i) = svmtrain(trainX, G1vAll, 'kernel_function', 'linear');
end
for i=1:size(testX,1)
for j=1:numClasses
if(svmclassify(models(j),testX(i,:)))
break;
end
end
result(i) = categories(j);
end
accuracy = 0;
for i=1:size(result,1)
if (strcmp(result(i),testY(i)))
accuracy = accuracy + 1;
end
end
[gr_w gr_h] = size(testY);
accuracy = (accuracy / gr_w)*100;
disp(['Akurasi = ' num2str(accuracy) '%']);
And i want result like this.
>> example
Akurasi = 100%
Thank you so much before.
1 comentario
Stephen23
el 18 de Dic. de 2019
Editada: Stephen23
el 18 de Dic. de 2019
As well as being buggy for the reason that Adam Danz explained below, this code
huruflist = dir(traindir);
huruflist(1) = [];
huruflist(1) = [];
looks like a very fragile/buggy attempt to remove the '.' and '..' folder names, and should not be used. Much more robust code would use setdiff or ismember.
Read these to know more:
Respuesta aceptada
Adam Danz
el 18 de Dic. de 2019
Editada: Adam Danz
el 18 de Dic. de 2019
In this section,
huruflist = dir(traindir);
huruflist(1) = [];
huruflist(1) = [];
it's likely that the directory in traindir does not exist and dir() is returning an empty structure array. When you try to delete the first element, you get the error message indicating that the index value of 1 is "out of range".
To test that the directory exists,
if exist(traindir,'dir')~=7
error('Directory does not exist: %s', traindir)
end
To look at the size of the dir() output,
size(huruflist)
To throw an error when the directory could not be found
if isempty(huruflist)
error('Problem accessing directory: %s', traindir)
end
12 comentarios
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!