How can I extract and save images from 3D stack images (512x1000x100 double) from a .mat files?
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Chinmay Bepery
am 22 Okt. 2023
Kommentiert: Walter Roberson
am 23 Okt. 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 Kommentare
Walter Roberson
am 22 Okt. 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.
Akzeptierte Antwort
Chinmay Bepery
am 23 Okt. 2023
Bearbeitet: Chinmay Bepery
am 23 Okt. 2023
1 Kommentar
Walter Roberson
am 23 Okt. 2023
Could you show us
[smallestimg, largestimg] = bounds(vol, 'all')
[smallestdiff, largestdiff] = bounds(diff(unique(vol)))
[smallestlm, largeslm] = bounds(s.LayerMaps, 'all')
Weitere Antworten (1)
Walter Roberson
am 22 Okt. 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 Kommentare
Walter Roberson
am 23 Okt. 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?
Siehe auch
Kategorien
Mehr zu Import, Export, and Conversion finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!