error while reading and selecting images randomly from multiple folders

1 vue (au cours des 30 derniers jours)
I have a folder that contains 10 subfolders each subfolder contains 8 images, I want to dynamically select 5 images from each subfolders but i got following error.
Index exceeds matrix dimensions.
Error in tt (line 18)
fn = fullfile(P,D,F{ii});
clc;
clear all;
tic;
%% Training images
id_test = 0;
id_train = 0;
P = 'ROIBintrain'; % i.e. relative/absolute path to where the subfolders are.
for ii = 1:10 % no of classes
D = sprintf('%u',ii);
S = dir(fullfile(P,D,'*.bmp')); % get all filenames in subfolder
N = numel(S);
X = randperm(N);
F = {S(X(1:5)).name}; % randomly select 5 filenames.
for jj = 1:numel(F) % no of images per class
fn = fullfile(P,D,F{ii});
im = imread(fn);
X = double(im);
X = imresize(X,[100 120],'bilinear'); %300 250
id_train = id_train+1;
traindata{id_train}=ext_vein(X,1);
traindata = traindata';
% only four minutie is taken from one image
reduced_traindata = cellfun(@(M) M(1:min(end,4), :), traindata, 'uniform', 0);
end
end
%% save data
save('db2.mat','reduced_traindata');
toc

Réponse acceptée

Walter Roberson
Walter Roberson le 14 Fév 2020
F = {S(X(1:5)).name}; % randomly select 5 filenames.
That gives you 5 filenames relative to the current folder
fn = fullfile(P,D,F{ii});
That tries to index one of the five filenames according to the folder index. So if you had reached the 10th folder, you would be trying to access the 10th filename out of 5.
You are looping on jj at that point, so you should be using F{jj} not F{ii}

Plus de réponses (0)

Catégories

En savoir plus sur Image Data Workflows dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by