我使用MATLAB生成动画图有问题。
我想将我的信号y 绘制为我的时间x (我保留在两个单独的变量中)的函数,然后生成它的动画,看到变化根据时间我的信号。
最后,我想生成一系列“.tif”图像(用于在imageJ中读取)和一个“.avi”电影文件。
如果有人能给我指路,那真的会对我有所帮助,因为我尝试使用MATLAB帮助和论坛自己做,但我每次都失败了。
提前致谢!
答案 0 :(得分:1)
执行此操作的标准方法是在循环内更新绘图数据,并使用getframe
或类似函数抓取当前屏幕并将其保存到imwrite
或{的文件中{3}}
<强> imwrite 强>
使用VideoWriter
,如果您想要编写多帧数据(对于TIFF或GIF),您需要使用'WriteMode'
参数并将其设置为'append'
这样您只需将新框架添加到图像中即可。在第一次循环时,您不想要追加,因为这会附加到可能已存在的现有图像上。
<强>的getFrame 强>
就imwrite
而言,它抓取指定图形的屏幕截图,并返回包含色图和RGB图像为cdata
的结构。这是您想要写入视频或多帧图像的内容。
<强> VideoWriter 强>
对于写入视频,您将使用行为略有不同的getframe
类。主要步骤是:
创建对象
vid = VideoWriter('filename.avi');
打开对象
vid.open() % or open(vid)
vid.writeVideo(data)
关闭视频
vid.close()
然后,您可以根据需要多次拨打writeVideo
,每次都会添加一个额外的框架。
<强>摘要强>
这是一个演示,它将所有这些组合在一起并写入多帧TIFF和AVI。
% Example data to plot
x = linspace(0, 2*pi, 100);
y = sin(x);
% Set up the graphics objects
fig = figure('Color', 'w');
hax = axes();
p = plot(NaN, NaN, 'r', 'Parent', hax, 'LineWidth', 2);
set(hax, 'xlim', [0, 2*pi], 'ylim', [-1 1], 'FontSize', 15, 'LineWidth', 2);
% Create a video object
vid = VideoWriter('video.avi')
vid.open()
% Place to store the tiff
tifname = 'image.tif';
for k = 1:numel(x)
set(p, 'XData', x(1:k), 'YData', y(1:k));
% Grab the current screen
imdata = getframe(fig);
% Save the screen grab to a multi-frame tiff (using append!)
if k > 1
imwrite(imdata.cdata, tifname, 'WriteMode', 'append')
else
imwrite(imdata.cdata, tifname);
end
% Also write to an AVI
vid.writeVideo(imdata.cdata);
end
% Close the video
vid.close()
结果(作为动画GIF)