我如何创建动画GIF图像在MATLAB ?

2966(30天)
我想知道如果有MATLAB在MATLAB功能创建一个GIF动画。

接受的答案

MathWorks支金宝app持团队
编辑:MathWorks支金宝app持团队 2022年3月28日
在MATLAB 2022,出口支持GIF格式金宝appexportgraphics函数使用“附加”选项。例如:
x = 0:0.01:1;
p =情节(南南);
p。XData = x;
n = 1:0.5:5
p。YData = x ^ n;
exportgraphics (gcf“testAnimated.gif”,“添加”,真正的);
结束
为释放R2022a之前,效仿“写GIF动画”imwrite参考页面。
7评论
亚当Danz
亚当Danz 2022年7月1日
exportgraphics目前并没有一个选项来控制gif的帧速率。
的文档 exportgraphics >附加参数 建议使用 imwrite 对于更复杂的图形。也看到 写GIF动画

登录置评。

更多的答案(2)

乍得格林
乍得格林 2017年6月4日
编辑:MathWorks支金宝app持团队 2022年9月25日
或者,对于一个更简单的选择,使用 gif 函数在文件交换。

亚历克
亚历克 2013年12月19日
现在看来,“imwrite”支持写灰度GIF动画”编写多帧GIF图金宝app像时,X应该是一个四维M-by-N-by-1-by-P数组,P帧的数量写。”
但如果我试图通过一个M-by-N-by-3-by-P似乎对每个RGB颜色通道作为一个单独的灰度框架。现在方法是编写一个GIF动画颜色没有一个for循环帧?
1评论
为副总经理
为副总经理 2022年7月25日
编辑:为副总经理 2023年4月5日
MIMT gifwrite()作品写我/ IA / RGB / RGBA,从四维数组索引彩色图像。MIMT gifread()可以读取图像以最小的麻烦。
如果你打算注意剧情简介 比R2018a GIF文件版本更新,不管你使用什么工具。如果你使用一个更新的版本,你将不能 正确 阅读大多数多帧颜色GIF文件,除非你使这一努力。
帧缝合在一起,生成一个colormap是个坏主意,因为它意味着没有优化框架可以有一个独特的本地颜色表。更有活力的颜色内容序列,整个图像会越糟糕。
编辑:我认为我的说法应该是显而易见的,但是让我们证明。我将使用MIMT工具,因为为什么我让事情更难?
让我们先从一个简短的imageset颜色很多不同的地方。
% 6个彩色图像和堆栈读入4 d数组
inpict = mimread (“宽* . png”);
inpict = imstacker (inpict,“填充”,0);
%的RGB图像写成(大部分)
优化%每个框架都有自己的本地颜色表(LCT)
%在这个例子中,gifwrite()调用内部修改
% rgb2ind (…,“nodither”)为了使工件清晰
gifwrite (inpict“uniqueCT.gif”,0.5)
%,而不是把每一帧独立
%瓷砖帧转换,然后detile
%,我使用“nodither”,这样效果清晰可见
inpict = imtile (inpict 2 [3]);
[inpict,地图]= rgb2ind (inpict, 256,“nodither”);
inpict = imdetile (inpict [3 2]);
%编写索引创建一个垃圾GIF图像
%在这幅图像中,所有lct相同副本相同的256种颜色
gifwrite (inpict,地图,“pseudoglobalCT.gif”,0.5)
这是两个gif。注意,它们是明显不同的。
但是你可能会注意到,我们试图跨越所有的RGB GIF。当然这个小错误不会引起任何问题如果帧间变化很小。让我们尝试同样的事情,只有用更窄的颜色。
而新将几乎确保两个gif并不同步,您可能会注意到,他们甚至不似乎有相同的帧的数量。让我们看。
%读取图像
G1 = gifread (“uniqueCT.gif”);
G2 = gifread (“pseudoglobalCT.gif”);
%计算相邻帧之间的均方误差
mse1 = 0 (1、5);
mse2 = 0 (1、5);
f = 1:5
mse1 (f) = immse (G1 (:,:: f), G1 (::,:, f + 1));
mse2 (f) = immse (G2 (:,:: f), G2 (::,:, f + 1));
结束
%注意两个情况下,相邻帧的效果足够大
%,曾经独特现在是相同的。
mse1
mse1 =
56.3333 48.0000 56.3333 48.0000 56.3333
mse2
mse2 =
120.3333 120.3333 208.3333 0
是的,我们失去了两帧信息。这是一个坏主意即使帧间变化很小。
再一次,这个示例使用MIMT工具,特别是gifread()和gifwrite(),但这些工具的教训并不是唯一的。在你决定自己来测试这些示例,明白MIMT gifread () 和所有其他工具 需要重要的解决方法 正确 在当前版本读多帧gif。如果你不让自己的努力解决这个问题,你得到的结果gifread () / imread()将巧妙地或疯狂 错误的 ,让你误解的文件的实际内容。看到链接。

登录置评。

类别

找到更多的在动画帮助中心文件交换

下载188bet金宝搏

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!