How to join or merge two Image Data Stores?

조회 수: 46 (최근 30일)
kowshik Thopalli
kowshik Thopalli 2017년 2월 26일
편집: Matt J 2022년 6월 28일
If I have two image datastores and I wish to concatenate them. How can I do that?
Thanks
  댓글 수: 1
Sherin Aly
Sherin Aly 2018년 1월 13일
편집: Sherin Aly 2018년 1월 13일
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

댓글을 달려면 로그인하십시오.

채택된 답변

Zhiqiang Qiu
Zhiqiang Qiu 2018년 1월 22일
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
habtamu miheretie
habtamu miheretie 2018년 9월 7일
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?

댓글을 달려면 로그인하십시오.

추가 답변 (5개)

Hana
Hana 2018년 1월 18일
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
Silvia Guatelli
Silvia Guatelli 2021년 3월 19일
Excelente!!! Muchas gracias!
Joseph Garrett
Joseph Garrett 2022년 1월 9일
perfect. thank you so much!!

댓글을 달려면 로그인하십시오.


berkan
berkan 2017년 5월 22일
allImages.Files=[test1.Files;test2.Files]; allImages.Labels=[test1.Labels;test2.Labels];
  댓글 수: 1
Sascha D. Krauß
Sascha D. Krauß 2017년 7월 3일
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?

댓글을 달려면 로그인하십시오.


KSSV
KSSV 2017년 2월 27일
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
kowshik Thopalli
kowshik Thopalli 2017년 2월 27일
편집: kowshik Thopalli 2017년 2월 27일
Hi, Thanks for the answer, however I am looking to merge two
imageDatastore

댓글을 달려면 로그인하십시오.


Aasim Khurshid
Aasim Khurshid 2020년 12월 30일
편집: Matt J 2022년 6월 28일
There is a better way to do this,
imds = imageDatastore({fullfile(imgFolder1Adress),fullfile(imgFolder2Adress),fullfile(imgFolder3Adress)},...
'IncludeSubfolders',true,'FileExtensions','.png','LabelSource','foldernames');

Matt J
Matt J 2022년 6월 28일
편집: Matt J 2022년 6월 28일
Perhaps by wrapping them in a TransformedDataStore (R2019a and higher),
imdsnew = transform(imds1,imds2, @(x) x)

카테고리

Help CenterFile Exchange에서 Convert Image Type에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by