How can I extract and save images from 3D stack images (512x1000x100 double) from a .mat files?

5 次查看(过去 30 天)
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 个评论
Chinmay Bepery
Chinmay Bepery 2023-10-22
The .mat file contains a srtuct. There are 100 images. Only show those images using above code.
I fail to save those extracted images.
I am also in dark, how to relate the layerMaps with those images of the struct.
Walter Roberson
Walter Roberson 2023-10-22
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.

请先登录,再进行评论。

采纳的回答

Chinmay Bepery
Chinmay Bepery 2023-10-23
编辑:Chinmay Bepery 2023-10-23
Thank you @Walter Roberson for your kind support. I saved all 100 images as separate files as 0001.jpeg, 0002.jpeg. . . . .0100.jpeg by using imwrite(). Th The code as below.
s=load ("D:\Matlab\1.mat");
vol = squeeze(images); %The .mat file consist a struct with element name images (512*1000*100)
[x,y,z] = size(images);
for i=1:z
sliceZ = vol(:,:,i);
% map = lmp(:,:,i);
cla; % Prevent stuffing too many images into the axes.
imshow(sliceZ, []);
drawnow;
tName= num2str(i, '%04d');
startingFolder = "D:\Matlab\mat\"; % Or "pwd" or wherever you want.
defaultFileName = strcat(startingFolder, tName,".jpg");
imwrite(sliceZ, colormap('gray'), defaultFileName);
pause(0.25); % Pause for 1/2 second before next frame blows it away.
end
  1 个评论
Walter Roberson
Walter Roberson 2023-10-23
Could you show us
[smallestimg, largestimg] = bounds(vol, 'all')
[smallestdiff, largestdiff] = bounds(diff(unique(vol)))
[smallestlm, largeslm] = bounds(s.LayerMaps, 'all')

请先登录,再进行评论。

更多回答(1 个)

Walter Roberson
Walter Roberson 2023-10-22
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 个评论
Chinmay Bepery
Chinmay Bepery 2023-10-23
Thank you for kind suggestion. Separate .mat files are saved. Actually, age is single value and it is common for all images in the input .mat file. Only images and layerMaps are related. Is it possble to save the seperated files in any imgae format using images and layerMap.
Walter Roberson
Walter Roberson 2023-10-23
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?

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Import, Export, and Conversion 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by