How can I extract and save images from 3D stack images (512x1000x100 double) from a .mat files?
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Chinmay Bepery
le 22 Oct 2023
Commenté : Walter Roberson
le 23 Oct 2023
I am trying to extract images and save individual images from a .mat file. The .mat file also consist of a strauct with three filed [images(512x1000x100 double), layerMaps(100x1000x3 double) and age (78)].
At present, I can only show the 100 images by using the following codes:
s=load ("D:\Matlab\1.mat");
D=s.images;
vol = squeeze(D);
[x,y,z] = size(D);
for i=1:z
sliceZ = vol(:,:,i);
cla; % Prevent stuffing too many images into the axes.
imshow(sliceZ, []);
drawnow;
pause(0.25); % Pause for 1/2 second before next frame blows it away.
end
But I can not save those images as individual files and also fail to relate the layerMaps and age with those images. Please share your knowledge in this regards.
3 commentaires
Walter Roberson
le 22 Oct 2023
The code in my Answer extracts into separate files.
As you have not given any context, I do not have any guess about what the layerMaps might be for.
Réponse acceptée
Chinmay Bepery
le 23 Oct 2023
Modifié(e) : Chinmay Bepery
le 23 Oct 2023
1 commentaire
Walter Roberson
le 23 Oct 2023
Could you show us
[smallestimg, largestimg] = bounds(vol, 'all')
[smallestdiff, largestdiff] = bounds(diff(unique(vol)))
[smallestlm, largeslm] = bounds(s.LayerMaps, 'all')
Plus de réponses (1)
Walter Roberson
le 22 Oct 2023
s=load ("D:\Matlab\1.mat");
outdir = 'D:\Matlab';
D = s.images;
LM = s.layerMaps;
A = s.age;
z = size(D,3);
for i=1:z
outfile = fullfile(outdir, "image_" + i + ".mat");
savestruct.image = D(:,:,i);
savestruct.layerMap = squeeze(LM(i,:,:));
savestruct.age = A;
save(outfile, "-struct", "savestruct");
end
This will create image_1.mat image_2.mat and so on in the directory named in outdir . Each of the .mat will contain three variables -- "image", "layerMap", and "age" .
2 commentaires
Walter Roberson
le 23 Oct 2023
You can imwrite() but they are individually 512 x 1000 . Is that intensity information to be written in grayscale? Or should the layerMaps(100x1000x3 double) be understood to be a 1000 x 3 colormap specific to each image? If it is a per-image colormap then is each image integer values in the range 0 to 999 (or 1 to 1000) that should be understood as the color index?
Voir également
Catégories
En savoir plus sur Import, Export, and Conversion dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!