Search code examples
matlabsubdirectory

Recursively read images from subdirectories


I am stuck on something that is supposed to be so simple.

I have a folder, say main_folder with four sub folders, say sub1, sub2, sub3 and sub4 each containing over 100 images. Now am trying to read and store them in an array. I have looked all over the internet and some MATLAB docs: here, here and even the official doc.

My code is like this:

folder = 'main_folder/**'; %path containing all the training images
dirImage = dir('main_folder/**/*.jpg');%rdir(fullfile(folder,'*.jpg')); %reading the contents of directory

numData = size(dirImage,1);    %no. of samples

arrayImage = zeros(numData, 133183); % zeros matrix for storing the extracted features from images

for i=1:numData
        ifile = dirImage(i).name;
%         ifolder = dirImage(i).folder;
        I=imread([folder, '/', ifile]);  %%%% read the image  %%%%%
        I=imresize(I,[128 128]);
        ...

If I try the code in the above snippet, the images are not read. But if I replace the first two lines with something like:

folder = 'main_folder/'; %path containing all the training images
dirImage = dir('main_folder/sub1/*.jpg'); %rdir(fullfile(folder,'*.jpg'));

then all images in sub1 are read. How can I fix this? Any help will be highly appreciated. I want to read all the images in the four sub folders at once. I am using MATLAB R2015a.


Solution

  • I believe you will need to use genpath to get all sub-folders, and then loop through each of them, like:

    dirs = genpath('main_folder/'); % all folders recursively
    dirs = regexp(dirs, pathsep, 'split'); % split into cellstr
    for i = 1:numel(dirs)
        dirImage = dir([dirs{i} '/*.jpg']); % jpg in one sub-folder
        for j = 1:numel(dirImage)
            img = imread([dirs{i} '/' dirImage(j).name]);
            % process img using your code
        end 
    end