MATLAB Answers

Saving an array of images as an 'Image Stack'

318 ビュー (過去 30 日間)
Jason
Jason 2016 年 11 月 1 日
編集済み: Sai Sirish Gokavarapu 2019 年 9 月 5 日
Hi.
I obtain grayscale image' 'img' that I add to a 'stack' i.e. image array by:
imgArray{index}=img
So If I have say 5 images in the imgArray, I have been saving them to disk by writing them out individually as tifs via:
prefix=get(handles.editSaveName,'String');
for k=1:5
imwrite(imgArray{k},sprintf('%s\\%s%04d.tif',folder,prefix,k));
end
BUT, I want the option to say the array of images as a single file i.e. an image stack. I thought the following would do it
try
imwrite(imgArray,sprintf('%s\\%s.stk',folder,prefix));
catch
h = errordlg('Error Saving Image STK')
end
But it always fails. Is there an obvious error?
Thanks
Jason

  0 件のコメント

サインイン to comment.

回答 (1 件)

Jan
Jan 2016 年 11 月 1 日
According to the matlab documentation you can store multiple images to a single file as follows:
imwrite(im1,'myMultipageFile.tif')
imwrite(im2,'myMultipageFile.tif','WriteMode','append')
See https://www.mathworks.com/help/matlab/ref/imwrite.html --> Write Multiple Images to TIFF File.

  8 件のコメント

表示 5 件の古いコメント
Jason
Jason 2016 年 11 月 1 日
Correction. It should be possible to save the tiffs using any extension using fmt option
imwrite(___,fmt) writes the image in the format specified by fmt, regardless of the file extension in filename. You can specify fmt after the input arguments in any of the previous syntaxes.
Joe Sheppard
Joe Sheppard 2018 年 4 月 3 日
I have seen 'WriteMode' 'append' suggested everywhere, but for some reason MatLab still saves the files as seperate tiffs rather than a single file, why would this be?
Sai Sirish Gokavarapu
Sai Sirish Gokavarapu 2019 年 9 月 5 日
Hey there! Even I'm trying to use to convert a .avi file to a .tif STACk but unfortunately the code just converts it to a set of .tif images despite using 'WriteMode' and "append".
Here's the code, it's similar to that of Joe.
%% To convert avi files to tif images
obj = VideoReader('video.avi');
vid = read(obj);
frames = obj.NumberOfFrames;
% This just converts them to a set of images
% for x = 1 : frames
% imwrite(vid(:,:,:,x),strcat('frame-',num2str(x),'.tif'));
% end
%This is meant to amend that and to make a .tif stack
for x = 1 : frames
imwrite(vid(:,:,:,x),strcat('frame-',num2str(x),'.tif'), 'Compression', 'none','WriteMode', "append");
end

サインイン to comment.

サインイン してこの質問に回答します。


Translated by