regarding label source names in data set imagedatastore
Show older comments
i am working on image classification problem .I am using dataset in which there are some parent folder.Each parent folder have some sub folders.And these subfolders contain the image data.when i use imagedatastore to load ,it takes subfolder as class
I want to take parent folder as class(all the folder in that parent folder sould be a class named as parent folder name).
how to do this .
Answers (2)
Johanna Pingel
on 12 Feb 2019
ImageDatastore works really well if you have a parent class and 1 sub folder per class.
imageDatastore('parentfolder/','IncludeSubFolders',true','LabelSource','foldernames');
If not, you may have to do a little more processing. I'm sure there's a ton of ways to accomplish this: I would suggest getting all of your images and labels for each class into a datastore
class1 = imageDatastore({'cat1/random_folder/','cat1/'});
class1.Labels = repelem("cat1",numImages);
Do this for each class, then combine them into one super datastore
imdsFinal = imageDatastore([class1.Files; class2.Files]);
imdsFinal.Labels = [class1.Labels; class2.Labels]);
This should work and be able to customize to what you're trying to do!
9 Comments
ghada ebrahim
on 25 Feb 2020
please i want to know what 'cat1/random_folder/' refer to?
Johanna Pingel
on 26 Feb 2020
cat1 would stand for category 1, as in: a folder with images of category1 in it. This could be any name of your folder for this problem, since this is a hypothetical answer.
random_folder refers to any subfolders which also contain images of category 1.
I believe this was the question posed on how to get all images from folders and subfolders for a category.
ghada ebrahim
on 26 Feb 2020
i get it, thank you so much
Nilu R Salim
on 4 Mar 2020
Edited: Nilu R Salim
on 4 Mar 2020
Hi,
I tried this out. But it's not working.. it repeatedly throws an error. Let me elaborate the issue that I face. I have a main folder with 80 subfolders. Each of the subfolder has 6 more folders in it. I want the labels to be "80". How is it possible?
Nilu R Salim
on 4 Mar 2020
I would really appreciate a quick reply Thanks in advance.
Nilu R Salim
on 4 Mar 2020
I would like to have it something similar to "cd .."
OJ27
on 18 Aug 2020
The code worked for me except for this part
imdsFinal.Labels = [class1.Labels; class2.Labels]);
That line should be replaced with
imdsFinal.Labels = [categorical(class1.Labels); categorical(class2.Labels)]);
Otherwise, you would have a cell array containing strings rather than categorical. After you merge both imageDatastore, then you can call
categories(imdsFinal.Labels)
to check the labels in the dataset.
AYUSH ANAND SAGAR
on 27 Oct 2020
i want to display the found image's label as the output
how can i do that?
aref
on 23 Aug 2022
labels= unique(trainingData.Labels);
Neslihan
on 27 Apr 2023
0 votes
Dataset = imageDatastore('Dataset', 'IncludeSubfolders', true, 'LabelSource', 'foldernames');
Categories
Find more on Image Data Workflows in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!