动画图MATLAB

时间:2016-01-22 15:09:17

标签: matlab animation plot matlab-figure

我使用MATLAB生成动画图有问题。

我想将我的信号y 绘制为我的时间x (我保留在两个单独的变量中)的函数,然后生成它的动画,看到变化根据时间我的信号。

最后,我想生成一系列“.tif”图像(用于在imageJ中读取)和一个“.avi”电影文件。

如果有人能给我指路,那真的会对我有所帮助,因为我尝试使用MATLAB帮助和论坛自己做,但我每次都失败了。

提前致谢!

1 个答案:

答案 0 :(得分:1)

执行此操作的标准方法是在循环内更新绘图数据,并使用getframe或类似函数抓取当前屏幕并将其保存到imwrite或{的文件中{3}}

<强> imwrite

使用VideoWriter,如果您想要编写多帧数据(对于TIFF或GIF),您需要使用'WriteMode'参数并将其设置为'append'这样您只需将新框架添加到图像中即可。在第一次循环时,您想要追加,因为这会附加到可能已存在的现有图像上。

<强>的getFrame

imwrite而言,它抓取指定图形的屏幕截图,并返回包含色图和RGB图像为cdata的结构。这是您想要写入视频或多帧图像的内容。

<强> VideoWriter

对于写入视频,您将使用行为略有不同的getframe类。主要步骤是:

  1. 创建对象

    vid = VideoWriter('filename.avi');

  2. 打开对象

    vid.open() % or open(vid)

  3. 使用VideoWriter

    写一些数据

    vid.writeVideo(data)

  4. 关闭视频

    vid.close()

  5. 然后,您可以根据需要多次拨打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)

    writeVideo