Saving an array of images as an 'Image Stack'
이전 댓글 표시
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
답변 (1개)
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.
댓글 수: 11
Jason
2016년 11월 1일
Jan
2016년 11월 1일
What error are you getting? On my Matlab version, the stk format is not supported.
Jason
2016년 11월 1일
Adam
2016년 11월 1일
imwrite uses the extension to work out the format in which to save the file.
Jason
2016년 11월 1일
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
2019년 9월 5일
편집: 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
Lili Xu
2020년 6월 7일
I've been dealing with the same issue the brutal way by just saving the separate tifs in the same folder and open the folder using ImageJ afterwards and let ImageJ do the job of combining the separate tifs into a stack...
Yael Grossman
2021년 3월 8일
@Lili Xu@Sai Sirish Gokavarapu The bug in the code is that you're chaning the file name for each iteration
for x = 1 : frames
imwrite(vid(:,:,:,x),'All_frames.tif', 'Compression', 'none','WriteMode', "append");
end
Cody Crosby
2021년 9월 15일
Thank you Yael! That worked perfectly for me.
카테고리
도움말 센터 및 File Exchange에서 Audio and Video Data에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!