3D matrix to Video

52 vues (au cours des 30 derniers jours)
Andrew Chen
Andrew Chen le 24 Fév 2017
Commenté : Guangxu Li le 9 Mai 2020
Hello all, I have been having a lot of trouble trying to export a video from Matlab from a 3D matrix. The matrix dimensions indicate frame height, width and frame number. The element values are what is being used to form images with commands such as imagesc or imshow. I can create a video in Matlab by putting the imshow or imagesc command in a for loop but I want to extract something equivalent from Matlab to put in youtube or imbed in a powerpoint or soemthing. Here's an example of the situation:
IM % an mxnxz matrix
for i = 1:size(IM,3);
imshow(IM(:,:,i))
pause(.001);
end
Since the matrix has no color information after processing I have run into problems using WriteVideo or im2frame command. Thanks for any help.

Réponse acceptée

Stephen23
Stephen23 le 24 Fév 2017
Modifié(e) : Stephen23 le 24 Fév 2017
It is easy to use getframe and videoWriter object. Here is an example from the videoWriter object help:
v = VideoWriter('peaks.avi');
open(v);
Generate initial data and set axes and figure properties.
Z = peaks;
surf(Z);
axis tight manual
set(gca,'nextplot','replacechildren');
Create a set of frames and write each frame to the file.
for k = 1:20
surf(sin(2*pi*k/20)*Z,Z)
frame = getframe;
writeVideo(v,frame);
end
close(v);
  3 commentaires
Andrew Chen
Andrew Chen le 24 Fév 2017
I Just saw your edits, I'll give it a try! Thanks!
Andrew Chen
Andrew Chen le 24 Fév 2017
Thanks! It worked!

Connectez-vous pour commenter.

Plus de réponses (1)

Guangxu Li
Guangxu Li le 9 Mar 2020
Modifié(e) : Guangxu Li le 9 Mai 2020
Video to 3D image (single channel)
filename="./*.avi";
obj = VideoReader(filename);
vid = read(obj);
mImage=obj.Width;
nImage=obj.Height;
frames = obj.NumberOfFrames;
Image3D=zeros(nImage,mImage,frames,'uint8');
for x = 1 : frames
Image3D(:,:,x)=vid(:,:,1,x);
end
niftiwrite(Image3D,filename);
  2 commentaires
Melika Bahmanabasdi
Melika Bahmanabasdi le 6 Mai 2020
Hi Guangxu Li ,
Thankyou for your answer. I have a question. Why we should use rote90 in Image3D=rot90(Image3D); ?
I can`t understand the reason.
many thanks
Guangxu Li
Guangxu Li le 9 Mai 2020
Dear Bahmanabasdi,
I am very sorry. Please ignore the rotation and flipud lines. That is for my case.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by