How to join or merge two Image Data Stores?
Ältere Kommentare anzeigen
If I have two image datastores and I wish to concatenate them. How can I do that?
Thanks
1 Kommentar
Sherin Aly
am 13 Jan. 2018
Bearbeitet: Sherin Aly
am 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
Akzeptierte Antwort
Weitere Antworten (6)
Hana
am 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 Kommentare
Yifan Dong
am 18 Sep. 2018
Brilliant!! Thanks!
Heng Zhang
am 5 Jul. 2020
OMG! Thanks bro! That really helps!
Yingying Pang
am 6 Mär. 2021
brilliant!!!!!
Silvia Guatelli
am 19 Mär. 2021
Excelente!!! Muchas gracias!
Joseph Garrett
am 9 Jan. 2022
perfect. thank you so much!!
berkan
am 22 Mai 2017
1 Stimme
allImages.Files=[test1.Files;test2.Files]; allImages.Labels=[test1.Labels;test2.Labels];
1 Kommentar
Sascha D. Krauß
am 3 Jul. 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
am 30 Okt. 2025
1 Stimme
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
am 27 Feb. 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 Kommentar
kowshik Thopalli
am 27 Feb. 2017
Bearbeitet: kowshik Thopalli
am 27 Feb. 2017
Aasim Khurshid
am 30 Dez. 2020
Bearbeitet: Matt J
am 28 Jun. 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)
Kategorien
Mehr zu Semantic Segmentation finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!