How to join or merge two Image Data Stores?
21 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
kowshik Thopalli
el 26 de Feb. de 2017
Respondida: Birju Patel
el 30 de Oct. de 2025 a las 13:36
If I have two image datastores and I wish to concatenate them. How can I do that?
Thanks
1 comentario
Sherin Aly
el 13 de En. de 2018
Editada: Sherin Aly
el 13 de En. de 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
Respuesta aceptada
Zhiqiang Qiu
el 22 de En. de 2018
I know it is an ancient problem, but I just to make it a better reference for other people.
imds1 = imageDatastore('imds1 location', ...);
imds2 = imageDatastore('imds2 location', ...);
imds_combine = imageDatastore({'imds1 location', 'imds2 location'}, ...);
Just combine the address of these two locations. The following parameters are all the same.
1 comentario
habtamu miheretie
el 7 de Sept. de 2018
that is cool answer! i have very similar problem. when i create the data store the files are not in the same order as in the folder. how can i make that possible? i need it because the label i use is coming from another .csv file. so i need to match the order to process the images easily. can anyone help me on this please?
Más respuestas (6)
Hana
el 18 de En. de 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 comentarios
berkan
el 22 de Mayo de 2017
allImages.Files=[test1.Files;test2.Files]; allImages.Labels=[test1.Labels;test2.Labels];
1 comentario
Sascha D. Krauß
el 3 de Jul. de 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
el 30 de Oct. de 2025 a las 13:36
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.
0 comentarios
KSSV
el 27 de Feb. de 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 comentario
kowshik Thopalli
el 27 de Feb. de 2017
Editada: kowshik Thopalli
el 27 de Feb. de 2017
Aasim Khurshid
el 30 de Dic. de 2020
Editada: Matt J
el 28 de Jun. de 2022
There is a better way to do this,
imds = imageDatastore({fullfile(imgFolder1Adress),fullfile(imgFolder2Adress),fullfile(imgFolder3Adress)},...
'IncludeSubfolders',true,'FileExtensions','.png','LabelSource','foldernames');
0 comentarios
Ver también
Categorías
Más información sobre Image Data Workflows en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!