MATLAB在图像处理中的应用

图像处理概念、算法和MATLAB

如何从MATLAB编写动画PNG(APNG)文件

今天,我要写的是如何创建动画PNG(APNG)文件,例如:

我首先写的是APNG文件去年二月. APNG文件是一个有效的PNG图像文件,它以一种巧妙的方式使用文件元数据来压缩和存储完整动画的帧。见2019年2月7日邮政有关此的更多详细信息。

就在最近,我创建了一个用于创建APNG文件的MATLAB实用程序。可在文件交换还有github. 此实用程序使用该程序APNG组件,在单独的许可条款下提供。该实用程序将在您第一次使用该程序时自动为您下载。

为了演示它的使用,我将使用它创建一些追踪曲线的动画,这些曲线是我在我的2019年2月14日博客文章. 以下是一个版本的追踪曲线的代码:

θ=0:60:330;P=cosd(θ)+1i*sind(θ);P=重塑(P,1,[]);N=长度(P);d=0.01;对于k=1:1000 V=P(end,[(2:N)1])-P(end,:);P(end+1,:)=P(end,:)+d*V;终止持有在…上对于k=1:N图(实(P(:,k)),imag(P(:,k)))终止持有相同的

然而,这种相对简单的计算曲线的方法在为曲线设置动画时效果不佳,因为随着点越来越靠近中心,计算点的间距越来越小。动画似乎会变慢。

因此,我编写了一个小代码,在近似相等的弧长段中对生成的曲线重新采样。下面是它的样子:

步距=abs(差(P(:,1),1));累计步距=[0;累计和(步距,1)];最大行程距离=累计步距(结束);重新采样的步数=10000;x=linspace(0,最大行程距离,重采样步数);Pr=interp1(累计步距,P,x);

下面是一次生成一帧动画的代码。

num_frames=100;q=圆形(linspace(1,size(Pr,1),num_帧));fig=gcf;图位置(3:4)=300;帧=零(0,0,‘uint8’);对于k=1:长度(q)clf保持在…上对于v=1:N图(真实(Pr(1:q(k),v)),图像(Pr(1:q(k,v)))终止持有轴(限值)轴相同的帧=打印(图,“-r150”,“-RGBImage”);框架=类别(4,框架,框架);终止

这里有一条额外的皱纹。尽管如今浏览器广泛支持APNG,但有很多程序显示图像文件,而不知道APNG文万博1manbetx件中额外的动画元数据。我想让这些观众展示最后的动画的帧,因为这是包含完整曲线的帧。因此,我会将该帧预编到开头,然后告诉APNG实用程序类跳过动画的第一帧。

框架=类别(4,框架,框架);%创建APNG文件。w=动画PNGWriter('动画追踪曲线.png'); w、 FramesPerSecond=20;w、 SkipFirstFrame=true;对于k=1:size(frames,4)addframe(w,frames(:,:,:,k));终止饰面(w);

下载并给予动画编剧一次尝试。如果你发现它有问题,请随时报告它的问题GitHub存储库.




与MATLAB®R2019b一起发布

|
  • 打印
  • 发送电子邮件

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。