MATLAB组合文件制作gif电影

时间:2014-02-24 03:44:28

标签: matlab shell animation gif postscript

所以我有一段matlab代码(如下所示)绘制了几个数字,然后将它们保存为postscript文件(.ps)。这是一些代码:

for n = 1:6
   threeD = figure;
   plot3(x(:,1),x(:,2),x(:,3)),grid on;
   print (gcf, '-depsc2', strcat('plot',num2str(n),'.ps'));
end

然后我们运行一个shell脚本将postscript文件转换为GIF文件,然后以0.10秒的延迟合并它们。

#!/bin/csh

# convert postscript to gif
foreach i ( plot*.ps )
   perl pstogif $i $i.gif
end

# merge gifs in order
./gifmerge -10 `ls plot?.gif; ls plot??.gif; ls plot???.gif` > anim.gif

# change permissions
chmod 644 anim.gif

# now clean up
rm plot*.ps plot*.gif

但我在Windows上,我无法运行此脚本(如果可以的话,不安装我想避免的cygwin)。是否有另一种方法可以在matlab中制作gif电影,或者这是唯一的方法吗?如果这是唯一的方法,是否有替代cygwin方法或者是在Windows中运行shell脚本的唯一方法?

编辑:
以下是我对以下示例链接的尝试:

figure(1)
for n = 1:6
%Formualte a str for the title 
str = sprintf('test%d', n);

[t,x]=ode45('test',[0.0:0.01:20],[initial(n,1), initial(n,2), initial(n,3)]);
%2D Plot
    twoD = figure;
    plot(x(:,1),x(:,2)),grid on;
    drawnow
    frame = getframe(1);
    im = frame2im(frame);
    [imind,cm] = rgb2ind(im,256);
    name = sprintf('2D%d',n);
    xlabel('x1(t)');
    ylabel('x2(t)');
    title(str);        
    if n == 1;
        imwrite(imind,cm,'Test.gif','gif', 'Loopcount',inf);
    else
        imwrite(imind,cm,'Test.gif','gif','WriteMode','append');
    end    
end

这只是给我一个带有x和y轴,标题和标签但没有实际情节的情节。这只是一片空地。 Here's my gif file

1 个答案:

答案 0 :(得分:0)

在MATLAB中完成所有工作:

figure(1);
for n = 1:6
   clf;
   [t,x] = ode45('test', [0.0:0.01:20], [initial(n,1), initial(n,2), initial(n,3)]);
   plot(x(:,1),x(:,2));
   grid on;
   set(gcf, 'color', 'w');
   export_fig test.tif -nocrop -append -a1
end
im2gif('test.tif', '-delay', 0.1);

您首先需要从MATLAB文件交换中下载export_figim2gif