How to modify the images, were read by "dir" function?

3 visualizzazioni (ultimi 30 giorni)
판석
판석 il 16 Set 2024
Commentato: Stephen23 il 20 Set 2024
Hello, So nice guys.
Can you help me?
I did print out many images like this below.
--------------------------------------
path='C:\'
list=dir(path)
name={list.name}
imagelist=name(3:end)
montage(imagelist)
-------------------------------------
I want to modify (example: imrotate, im2gray etc..) the images before I print out the images (montage);
Also, I want to save these images using function imwrite.
But, I couldn't,,
So, What can I do for this?
Thank you
  1 Commento
Stephen23
Stephen23 il 20 Set 2024

Accedi per commentare.

Risposte (2)

dpb
dpb il 16 Set 2024
montage returns only an montage object; not the individual images. Review the information at <Image Sequences and Batch Processing> and select from the various options outlined the best that matches your needed workflow to process each image.

Angelo Yeo
Angelo Yeo il 20 Set 2024
Modificato: Angelo Yeo il 20 Set 2024
Neither imrotate nor im2gray support sequence image processing so I believe it would be good to use for loops in this case.
imds = imageDatastore(fullfile(matlabroot,"toolbox","images","imdata","AT3*.tif"));
figure; montage(imds); title('original image set')
N = length(imds.Files);
tempCell = cell(N, 1);
for i =1:N
I = readimage(imds,i); % fixed from "N" to "i". Thanks to DGM's comment.
I = imrotate(I, 90);
I = im2gray(I);
tempCell{i} = I;
end
figure; montage(tempCell); title('processed image set')
  1 Commento
DGM
DGM il 20 Set 2024
If the goal is to save the composite image, use imtile() instead of montage().
imds = imageDatastore(fullfile(matlabroot,"toolbox","images","imdata","AT3*.tif"));
N = length(imds.Files);
tempCell = cell(N, 1);
for k = 1:N
I = readimage(imds,k); % loop index!
I = imrotate(I, 90);
I = im2gray(I);
tempCell{i} = I;
end
% create an image
outpict = imtile(tempCell);
% save the image
imwrite(outpict,'myfile.png')
... but it seems more that the images should be saved individually within the loop, so the use of montage() may be strictly for visualization.
imds = imageDatastore(fullfile(matlabroot,"toolbox","images","imdata","AT3*.tif"));
outputpath = '.'; % pick where they go
N = length(imds.Files);
for k = 1:N
I = readimage(imds,k); % loop index!
I = imrotate(I, 90);
I = im2gray(I);
% if the visualization is not needed,
% the images can just be saved in the loop
[~,fname,ext] = fileparts(imds.Files{k});
thisfname = fullfile(outputpath,[fname ext]);
imwrite(I,thisfname)
end
... I'm assuming we're not overwriting the original files.

Accedi per commentare.

Categorie

Scopri di più su Image Data Workflows in Help Center e File Exchange

Prodotti


Release

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by