|||
俗话说“一图胜千言”。在报告中用动画来展示一些关键性内容,可以收到更好的效果,也更能吸引观众的注意力。在这里,我们介绍如何用Matlab生成一些简单的动画,以及如何在画面中添加文字标注。
(一)Matlab与动画
Matlab中与动画有关的内容可以分为四个部分,分别是:1、生成动画;2、播放动画;3、保存动画;4、将动画转化为GIF文件。
1、生成动画
基本的动画是由一帧帧静态画面组成的。在Matlab中生成动画的步骤并不复杂:在指定的窗口画出一帧帧画面,然后每一帧静态画面保存到一个对象列表中。基本步骤如下:
初始化一个画图窗口。例如:
fig = figure('Position',[100,100,1200,600]);
用一个循环在窗口中画一帧帧静态图画,然后用getframe()函数将画面保存到对象列表M中。例如:
for ii=1:FM
subplot(1,2,1);
% Draw light curves here.
....... % Codes of drawing are listed here.
subplot(1,2,2);
% Draw the spectrum of the signal.
....... % Codes of drawing are listed here.
% Save the frame
M(ii) = getframe(fig);
end
2、播放动画
在生成动画的过程中,每一帧画面所用的时间长短不一,往往看不出实际的动画效果。因此,完成动画之后,我们可以用Movie()函数将动画按设定的参数播放出来,看看实际的效果。下面是一个实际的代码例子:
close all; % 关闭现有的画图窗口。
[h, w, p] = size(M(1).cdata); % 获得动画的尺寸。
hf = figure('Position',[100 100 w h]); % 生成一个新的图像窗口,用来显示动画。
movie(hf,M,1,30); % 按每秒30帧的速度播放动画1次。
3、保存动画
动画的保存使用Matlab内置函数movie2avi()。例如:
movie2avi(M, 'Noiseless.avi', 'compression', 'None');
其中M为前面生成的动画对象;第2个参数为文件名;第3、4个参数用来选择视频的压缩格式,在Windows操作系统中可以使用‘Indeo5’压缩格式,最后生成文件尺寸较小,而在Unix和MacOS下面只能使用‘None’,即无压缩格式,生成的文件尺寸比较大。
4、将动画转化为GIF文件
movie2avi()生成的是AVI格式视频文件,需要用专门的软件才能播放。为了能够在网页或PPT报告中直接显示动画,我们建议将动画转化为GIF文件。这里,我们从网上收集了一个能将AVI视频转化为GIF文件的Matlab程序avi2gif(),放在附录中。该程序使用交互式用户界面,使用起来相当方便。
(二)Matlab中图像的标注
正如上面的示例动画所显示的那样,有时候我们需要在图像中标注一些文字,以便于读者理解图像的内容。在Matlab中可以使用内置函数annotation()。annotation()可以有多种文字、图形标注方式,下面例举其中的“文字标注”和“文字加箭头标注”进行说明。
1、文字标注
str = 'x(t) = Sin(2pi*F1*t)+Sin(2pi*F2*t)';
annotation('textbox', [.18 .8, .1, .1], 'string', str, 'fontsize', 20, ...
'color', 'm', 'edgecolor', 'none');
在这段代码中,[.18 .8 .1 .1]为文字的在窗口中的绝对位置,所使用的是绝对坐标,[0 0]表示绘图区域的左下角,[1 1]表示绘图区域的右上角。显示效果参考图1中的左图。在这里,因为X坐标的范围不断在变化,因此使用绝对坐标比较方便。
2、文字加箭头标注
[ax1,ay1] = dsxy2figxy(gca, XFreq1, YFreq1);
strf1 = ['F1=' num2str(Freq1)];
strf2 = ['F2=' num2str(Freq2)];
har1 = annotation('textarrow',ax1,ay1, 'color', 'm', ...
'fontsize', 20, 'String', strf1, 'textcolor', 'm', 'linewidth', 2);
[ax2,ay2] = dsxy2figxy(gca, XFreq2, YFreq2);
har2 = annotation('textarrow',ax2,ay2, 'color', 'm', ...
'fontsize', 20, 'String', strf2, 'textcolor', 'm', 'linewidth', 2);
在这段代码中,显示了两个“文字加箭头”标注,其效果参见图1中的右图。在这里为了标注方便,我们输入的是相对坐标(XFreq1,YFreq1),但是annotation()函数只支持绝对坐标,因此,我们需借助Matlab中一个坐标转化函数dsxy2figxy()将相对坐标转化为绝对坐标。必须注意的是这个函数并不是Matlab内置函数,使用前需用命令"addpath([docroot '/techdoc/creating_plots/examples'])"将相关的目录导入至Matlab的命令搜索路径。
附录:
示例程序:FIR_Noiseless_Demo.m
视频转化工具:avi2gif.m
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-24 14:10
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社