How to join or merge two Image Data Stores?
Afficher commentaires plus anciens
If I have two image datastores and I wish to concatenate them. How can I do that?
Thanks
1 commentaire
Sherin Aly
le 13 Jan 2018
Modifié(e) : Sherin Aly
le 13 Jan 2018
It was a bit tricky but I was able to merge 2 datastores as follows:
imds1 = imageDatastore(location of DS 1,'IncludeSubfolders',true,'LabelSource','foldernames');
imds2 = imageDatastore(imds2 location,'IncludeSubfolders',true,'LabelSource','foldernames');
% create a dummy dataset with the same size of the combined datastores (if ds1 has 100 images and ds2 has 100 images then dummy has 200 images. I made a folder with some photos with equal number of the 2 datastores)
dummy = imageDatastore('Dummy data store locaation','IncludeSubfolders',true,'LabelSource','foldernames');
% note: below this line you can use any datastore variable you want to merge including the ones you get after splitting training and testing
dummy.Files=[imds1.Files;imds2.Files];
dummy.Labels=[imds1.Labels;imds2.Labels];
% Now dummy is the new combined datastore and you can use all datastore functions
Réponse acceptée
Plus de réponses (6)
Hana
le 18 Jan 2018
I met the same problem and saw your post. Finally I find out a way:
imds = imageDatastore(cat(1,imds1.Files,imds2.Files))
imds.Labels = cat(1,imds1.Labels,imds2.Labels)
It works for me.
5 commentaires
Yifan Dong
le 18 Sep 2018
Brilliant!! Thanks!
Heng Zhang
le 5 Juil 2020
OMG! Thanks bro! That really helps!
Yingying Pang
le 6 Mar 2021
brilliant!!!!!
Silvia Guatelli
le 19 Mar 2021
Excelente!!! Muchas gracias!
Joseph Garrett
le 9 Jan 2022
perfect. thank you so much!!
berkan
le 22 Mai 2017
1 vote
allImages.Files=[test1.Files;test2.Files]; allImages.Labels=[test1.Labels;test2.Labels];
1 commentaire
Sascha D. Krauß
le 3 Juil 2017
Unfortunately, this produces a struct instead of a new datastore - and I could not find a way to convert it back. This means, that you cannot use the datastore specific functions like "countEachLabel" etc. Does anyone know another solution?
Birju Patel
le 30 Oct 2025
1 vote
The best way to do this is to use the datastore combine method:
ds = combine(imds1, imds2, ReadOrder="sequential")
The resulting datastore is a "vertical concatenation" of the two datastores.
KSSV
le 27 Fév 2017
A = imread('ngc6543a.jpg');
B = imread('peppers.png');
%%resize the images so that they have same dimensions
A_resize = imresize(A,[size(B,1) size(B,2)]) ;
%%join them
AB = [A_resize B] ;
imshow(AB) ;
1 commentaire
kowshik Thopalli
le 27 Fév 2017
Modifié(e) : kowshik Thopalli
le 27 Fév 2017
Aasim Khurshid
le 30 Déc 2020
Modifié(e) : Matt J
le 28 Juin 2022
There is a better way to do this,
imds = imageDatastore({fullfile(imgFolder1Adress),fullfile(imgFolder2Adress),fullfile(imgFolder3Adress)},...
'IncludeSubfolders',true,'FileExtensions','.png','LabelSource','foldernames');
Perhaps by wrapping them in a TransformedDataStore (R2019a and higher),
imdsnew = transform(imds1,imds2, @(x) x)
Catégories
En savoir plus sur Semantic Segmentation dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!