How to save each image generated in a for loop?

18 views (last 30 days)
for i=1:20
volume=randi([2 10], 1,1)
location=randi([10 100], 1, 1)
^This is a simplified example of my code.
I generate random variables which are inputted into a function called imagegenerator, which generates an image.
With the for loop, I'm generating several random images.
I want to
1) save each image with a different name each time (i.e "image 1" "image 2" "image 3", etc.)
2) also save the inputs (volume, location) associated with each image (preferably in the same folder/ with the same name "image 1" "image 2" , etc.)
How can I do this? Thanks!
P.S. I want to be able to use all these images/ their inputs later to put into a machine learning algorithm that'll cluster the images based off the pixels or the inputs (not sure yet).

Accepted Answer

Abolfazl Chaman Motlagh
Abolfazl Chaman Motlagh on 2 Nov 2020
Hi ,you Can use imwrite for saving images. Also use save for 'volume' and 'location'. (you can make datastore and write a Read_function for datastore to import them sequentially for your ML training).
for datastore see this : datastore
Also for images you can use this : imageDatastore
here's some hint: (consider your imagegenerator has image in output).
for i=1:20
volume=randi([2 10], 1,1)
location=randi([10 100], 1, 1)
Name=['image ' num2str(i)];
save([Name '.mat'],'volume','location');
imwrite(I,[Name '.jpg'])
Abolfazl Chaman Motlagh
Abolfazl Chaman Motlagh on 3 Nov 2020
imageDatastore is a class for saving image addresses. you should have a cell that every cell include path to an image . then write this :
for many of application in matlab imageDatastore is supported as Train (Test or validation) of ML or deep learning training process.
every time you use read on your datastore , an image come out as an output.
also Labels of train dataset can be saved in this object.
it doesnt need read function for this class.
if you use special dataset you can use datastore
datastore (example : use .mat file as a dataset)
but in most cases you should write read_function yourself.
for example this function that train a Network need imagedatastore as first argument.
net = trainNetwork(imds,layers,options)

Sign in to comment.

More Answers (1)

S. Walter
S. Walter on 2 Nov 2020
Edited: S. Walter on 2 Nov 2020
You can print the image:
where '-dpng' can be set to whatever format you want (check out the help file) and '-r300' is the resolution ('-r0' is screen resolution).
To change the filename to image 1 etc you can add the following to your for loop
f_name = ['image ' num2str(i)];
Make sure you close your figures after you're done printing them.
Edit: In terms of saving the data, you can just use
That will save it as a Matlab .mat file. If you want to write it to file, you should check out "writematrix" or "fprintf".

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!