您现在的位置是:首页 >技术交流 >MATLAB 之 隐函数绘图、图形修饰处理、图像处理与动画制作和交互式绘图工具网站首页技术交流
MATLAB 之 隐函数绘图、图形修饰处理、图像处理与动画制作和交互式绘图工具
简介MATLAB 之 隐函数绘图、图形修饰处理、图像处理与动画制作和交互式绘图工具
这里写目录标题
一、隐函数绘图
- 如果给定了函数的显式表达式,可以先设置自变量向量,然后根据表达式计算出函数向量,从而用
plot
、plot3
等函数绘制出图形。 - 但如果函数用隐函数形式给出,则很难用上述方法绘制出图形。对此,MATLAB 提供了一些函数用来绘制隐函数图形。
1. 隐函数二维绘图
- 隐函数二维绘图采用
ezplot
函数,它有各种变形,下面介绍常用的使用方法。 - (1) 对于函数 y = f ( x ) y=f(x) y=f(x),ezplot 函数的调用格式如下。
- ①
ezplot(f)
:在默认区间 − 2 π < x < 2 π -2pi<x< 2pi −2π<x<2π 绘制 y = f ( x ) y=f(x) y=f(x) 的图形。其中, f f f 可以是函数文件名或函数表达式组成的字符串,也可以是一个匿名函数表达式或函数名。 - ②
ezplot(f,[a,b])
:在区间 a < x < b a<x<b a<x<b 绘制 y = f ( x ) y=f(x) y=f(x) 的图形。 - (2) 对于隐函数 f ( x , y ) = 0 f(x,y)=0 f(x,y)=0,ezplot 函数的调用格式如下。
- ①
ezplot(f)
:在默认区间 − 2 π < x < 2 π -2pi<x< 2pi −2π<x<2π 和 − 2 π < y < 2 π -2pi<y< 2pi −2π<y<2π 绘制 f ( x , y ) = 0 f(x,y)=0 f(x,y)=0 的图形。 - ②
ezplot(f,[a,b])
:在区间 a < x < b a<x<b a<x<b 和 a < y < b a<y<b a<y<b 绘制 f ( x , y ) = 0 f(x,y)=0 f(x,y)=0 的图形。 - ③
eplot(f,[xmin,xmax.ymin,ymax])
:在区间 x m i n < r < x m a x xmin<r<xmax xmin<r<xmax 和 y m i n < y < y m a x ymin<y<ymax ymin<y<ymax 绘制 f ( x , y ) = 0 f(x,y)=0 f(x,y)=0 的图形。 - (3) 对于参数方程 x = x ( t ) x=x(t) x=x(t) 和 y = y ( t ) y=y(t) y=y(t),ezplot 函数的调用格式如下。
- ①
eplot(x,y)
:在默认区间 0 < x < 2 π 0<x<2pi 0<x<2π 绘制 x = x ( t ) x =x(t) x=x(t) 和 y = y ( t ) y=y(t) y=y(t) 的图形。 - ②
ezplot(x,y [tmin,tmax])
:在区间 t m i n t < t < t m a x tmint<t<tmax tmint<t<tmax 绘制 x = x ( t ) x=x(t) x=x(t) 和 y = y ( t ) y=y(t) y=y(t) 的图形。 - 例如,我们进行如下隐函数绘图的练习。
- 程序如下:
subplot(2,2,1);
ezplot('x^2+y^2-9');
axis equal;
subplot(2,2,2);
ezplot(@(x,y) x^3+y^3-5*x*y+1/5);
subplot(2,2,3);
ezplot('cos(tan(pi*x))',[0,1]);
subplot(2,2,4) ;
ezplot('8*cos(t)','4*sqrt(2)*sin(t)',[0,2*pi]);
- 程序运行结果如下图所示。
3. 隐函数三维绘图
- 隐函数三维绘图函数有
ezcontour
、ezcontourf
、ezmesh
、ezmeshc
、ezplot3
、ezpolar
、ezsurf
、ezsurfe
,它们的调用格式基本相同,需要时查阅帮助信息即可。 - 下面,我们以
ezsurf
函数为例介绍常用的使用方法。ezsurf
函数调用的是surf
函数的功能,其调用格式如下。 - (1)
ezsurf(f)
:绘制曲面 z = f ( x , y ) z=f(x,y) z=f(x,y),其中 f f f 的表示方法与 ezplot 函数相同。 x 、 y x、y x、y 取默认范围 − 2 π < x < 2 π -2π<x<2π −2π<x<2π, − 2 π < y < 2 π -2π<y<2π −2π<y<2π。 - (2)
ezsurf(f,[xmin,xmax,ymin,ymax])
或ezsurf(f[min,max])
:在指定的区间绘制曲面 z = f ( x , y ) z=f(x,y) z=f(x,y)。 - (3)
ezsuf(x,y,z)
:在默认区域 − 2 π < s < 2 π -2π<s<2π −2π<s<2π, − 2 π < t < 2 π -2π<t<2π −2π<t<2π 上绘制参数方程 x = x ( s , t ) x=x(s,t) x=x(s,t), y = y ( s , t ) y=y(s,t) y=y(s,t), z = z ( s , t ) z=z(s,t) z=z(s,t) 的曲面。 - (4)
ezsurf(x,y,z,[smin,smax,tmin,tmax])
或ezsurf(x,y,[min,max])
:使用指定的区域绘制参数方程曲面。 - 例如,我们绘制下列曲面: { x = e − s cos t y = e − s sin t z = t , 0 ≤ s ≤ 8 , 0 ≤ t ≤ 5 π left{egin{matrix}x=e^{-s}cos t \y=e^{-s}sin t \z=t end{matrix} ight.egin{matrix},0le sle 8,0le tle 5pi end{matrix} ⎩ ⎨ ⎧x=e−scosty=e−ssintz=t,0≤s≤8,0≤t≤5π
- 程序如下:
>> ezsurf('exp(-s)*cos(t)','exp(-s)*sin(t)','t',[0,8,0,5*pi])
- 程序运行结果如下图所示。
二、图形修饰处理
- 图形修饰处理可以通过渲染和烘托的表现手法,使得图形现实感更强,传递的信息更丰富。图形修饰处理包括视点处理、色彩处理和裁剪处理等方法。
1. 视点处理
- 从不同的视点观察物体,所看到的物体形状是不一样的。 同样,从不同视点绘制的图形其形状也是不一样的。视点位置可由方位角和仰角表示。
- 方位角又称为旋转角,它是视点与原点连线在 x y xy xy 平面上的投影与 y y y 轴负方向形成的角度,正值表示逆时针,负值表示顺时针。
- 仰角又称为视角,它是视点与原点连线与 x y xy xy 平面的夹角,正值表示视点在 x y xy xy 平面上方,负值表示视点在 x y xy xy平面下方。例如,在下图中展示了坐标系中视点的定义,图中箭头方向表示正的方向。
- MATLAB 提供了设置视点的函数
view
,其调用格式如下:
view(az,el)
- 其中,az 为方位角,el 为仰角,他们均以度为单位。系统默认的的视点定义为方位角 -37.5°,仰角 30°。
- 例如,我们从不同视点绘制多峰函数曲面。
- 程序如下:
subplot(2,2,1);
mesh(peaks);
view(-37.5,30); %指定子图1的视点
title('azimuth=-37.5,elevation=30');
subplot (2,2,2);
mesh(peaks);
view(0,90); %指定子图2的视点.
title('azimuth=0,elevation=90');
subplot(2,2,3);
mesh(peaks);
view(90,0); %指定子图3的视点
title('azimuth=90,elevation=0');
subplot(2,2,4);
mesh(peaks);
view(-7,-10); %指定子图4的视点
title('azimuth=-7,elevation=-10');
- 程序运行结果如下图所示。
2. 色彩处理
2.1 颜色的向量表示
- MATLAB 除用字符表示颜色外,还可以用含有 3 个元素的向量表示颜色。向量元素在 [0,1] 范围取值,3 个元素分别表示红、绿、蓝 3 种颜色的相对亮度,称为 RGB 三元组。在下表中,我们列出了几种常见颜色的 RGB 值。
RGB 值 | 颜色 | 字符 | RGB 值 | 颜色 | 字符 |
---|---|---|---|---|---|
[0 0 1] | 蓝色 | b | [1 1 1] | 白色 | w |
[0 1 0] | 绿色 | g | [0.5 0.5 0.5] | 灰色 | |
[1 0 0] | 红色 | r | [0.67 0 1] | 紫色 | |
[0 1 1] | 青色 | c | [1 0.5 0] | 橙色 | |
[1 0 1] | 品红色 | m | [1 0.62 0.40] | 铜色 | |
[1 1 0] | 黄色 | y | [0.49 1 0.83] | 宝石蓝 | |
[0 0 0] | 黑色 | k |
2.2 色图
- 色图(Color Map)是 MATLAB 系统引入的概念。在 MATLAB 中,每个图形窗口只能有一个色图。色图是 m × 3 m×3 m×3 的数值矩阵,它的一行是 RGB 三元组。
- 色图矩阵可以人为地生成,也可以调用 MATLAB 提供的函数来定义色图矩阵。下表中我们列出了定义色图矩阵的函数,色图矩阵的维数由函数调用格式决定。例如:
M=hot;
- 生成 64 × 3 64×3 64×3 色图矩阵 M M M,表示的颜色是从黑色、红色、黄色到白色的由浓转淡的颜色。又如:
P=gray(100);
- 生成 100 × 3 100×3 100×3 色图矩阵 P P P,表示的颜色是灰色由浓到淡。
函数名 | 含义 | 函数名 | 含义 |
---|---|---|---|
autumn | 红、黄浓淡色 | jet | 蓝头红尾饱和值色 |
bone | 蓝色调浓淡色 | lines | 采用 plot 绘线色 |
colorcube | 三浓淡多彩交错色 | pink | 淡粉红色图 |
cool | 青、品红浓淡色 | prism | 光谱交错色 |
copper | 纯铜色调线性浓淡色 | spring | 青、黄浓淡色 |
flag | 红-白-蓝-黑交错色 | summer | 绿、黄浓淡色 |
gray | 灰色调线性浓淡色 | winter蓝、绿浓淡色 | |
hot | 黑、红、黄、白浓淡色 | white | 全白色 |
hsv | 两端为红的饱和值色 |
- 除
plot
及其派生函数外,mesh
、surf
等函数均使用色图着色。图形窗口色图的设置和改变,使用colormap
函数,其调用格式如下:
colormap(M)
- 其中 M M M 代表色图矩阵。
2.3 三维曲面图形的着色
- 三维曲面图形实际上就是在网格图的每一个网格片上涂上颜色。
surf
函数用默认的着色方式对网格片着色。除此之外,还可以用shading
命令来改变着色方式,格式如下。 - (1)
shading faceted
:将每个网格片用其高度对应的颜色进行着色,但网格线仍保留,其颜色是黑色。这是系统默认的着色方式。 - (2)
shading flat
:将每个网格片用同一个颜色进行着色,且网格线也用相应的颜色,从而使得图形表面显得更加光滑。 - (3)
shading interp
:在网格片内采用颜色插值处理,得出的表面图显得最光滑。 - 例如,我们采用不同着色方式的效果展示。
- 程序如下:
t=0:pi/20:2*pi;
z=peaks(20);
colormap(jet);
subplot(2,2,1);
surf(z);
subplot(2,2,2);
surf(z);
shading flat;
subplot(2,2,3);
surf(z);
shading interp;
subplot(2,2,4);
mesh(z);
shading interp;
- 程序运行结果如下图所示。
3. 图形的裁剪处理
- MATLAB 定义的 NaN 常数可以用于表示那些不可使用的数据,利用这种特性,可以将图形中需要裁剪部分对应的函数值设置成 NaN,这样在绘制图形时,函数值为 NaN 的部分将不显示出来,从而达到对图形进行裁剪的目的。
- 例如,我们要削掉正弦波顶部或底部大于 0.5 的部分,可使用下面的程序:
x=0:pi/10:4*pi;
y=sin(x);
i=find(abs(y)>0.5);
x(i)=NaN;
plot(x,y);
- 例如,我们绘制两个球面,其中一个球在另一个球里面,将外面的球裁掉一部分,使得能看见里面的球。
- 程序如下:
[x,y,z]=sphere(20); %生成外面的大球
z1=z;
z1(:,1:4)=NaN;
%将大球裁掉一部分
c1=ones(size(z1));
surf(3*x,3*y, 3*z1,c1);
%生成里面的小球
hold on;
z2=z;
c2=2*ones(size(z2));
c2(:,1:4)=3*ones(size(c2(:,1:4)));
surf(1.5*x,1.5*y,1.5*z2,c2);
- 程序运行结果如下图所示。色图中使用 3 种颜色,外面的球是蓝色,里面的球采用深浅不同的两种颜色。
三、图像处理与动画制作
- 图像处理与动画制作可以看作绘图功能的进一步拓展,也是 MATLAB 的一个具体应用领域。在进行 MATLAB 基础学习时,了解一些图像处理与动画制作方法,对日后的使用会产生一定的帮助。
1. 图像处理
- MATLAB 基本系统提供了几个用于简单图像处理的函数,利用这些函数可以进行图像的读/写和显示。此外,MATLAB 还有一个功能更强的图像处理工具箱,可以对图像进行更专业的处理。
1.1 图像的读/写
- 要在 MATLAB 中使用不同格式的图像,需要用
imread
函数读取该图像,即将图像文件读入 MATLAB 工作空间。imread
函数的调用格式与功能如下。 - (1)
x=imread(ilename,fmt)
:其中 filename 是图像的文件名,fmt 指定图像文件的格式。MATLAB 支持多种图像文件格式,如 bmp、jpg、 jpeg、 tif 等。 - 当我们省略 fmt 参数时,通过文件的内容自动判断其格式。矩阵 x x x 是从图像文件中读出并转化成 MATLAB 可识别的图像格式的数据。
- MATLAB 中,图像通常由数据矩阵和色彩矩阵组成。如果该图像是灰度图像,那么 x x x 是二维的。如果图像是真彩色的,那么 x x x 是三维矩阵,第三维存储颜色数据。
- (2)
[x,map]-imread(filename,fimt)
: 把经过转化的图像数据保存到矩阵 x x x 中,同时把相关的色图数据读到矩阵 map 中。 - 在 MATLAB 中,
imwrite
函数用于将图像数据和色图数据一起写入图像文件,其调用格式如下:
imwrite(x,filename,fmt)
- 该函数把图像数据 x x x 输出到文件 filename,图像的类型由 fmt 指定。
1.2 图像的显示
- MATLAB 用
image
的函数显示图像,具调用格式如下:
image (x)
- 其中 x x x 为图形的数据矩阵。
- 与
image
函数类似的函数是imagesc
,它的调用格式和功能都与image
函数一样,只是图像着色方式不同。 - 为了保证图像的显示效果,一般还应使用
colormap
函数设置图像色图。 - 设有图像文件 logo.jpg,在图形窗口显示该图像,程序如下:
[x,cmap]=imread('logo.jpg'); %读取图像的数据阵和色图阵
image(x);
colormap(cmap);
axis image off %保持宽高比并取消坐标轴
2. 动画制作
- MATLAB 具有动画制作能力,它可以存储一系列各种类型的二维或三维图,然后像放电影一样把它们按次序播放出来,称为逐帧动画。例如,取出一幅三维图形,然后缓慢地将它旋转,这样就可以从不同角度来观察它。另一种类型是描绘质点运动轨迹的动画,称为轨迹动画。
2.1 制作逐帧动画
- MATLAB提供了
getframe
、moviein
和movie
函数进行逐帧动画制作。函数的功能分别如下。 - (1)
getframe
函数:可截取一幅画面信息(称为动画中的一帧),一幅画面信息形成一个很大的列向量。显然,保存 n n n 幅图面就需要一个大矩阵。 - (2)
moviein(n)
函数:用来建立一个足够大的 n n n 列矩阵。该矩阵用来保存 n n n 幅画面的数据,以备播放。之所以要事先建立一个大矩阵,是为了提高程序运行速度。 - (3)
movie(m,n)
函数:播放由矩阵 m m m 所定义的画面 n n n 次,默认播放一次。 - 例如,我们播放一个直径不断变化的球体。
[x,y,z]=sphere(50);
m=moviein(30); %建立一个30列大矩阵
for i=1:30
surf(i*x,i*y,i*z); %绘制球面
m(:,i)=getframe; %将球面保存到m矩阵
end
movie(m,10); %以每秒10幅的速度播放球面
2.2 创建轨迹动画
- MATLAB 提供了
comet
和comet3
函数展现质点在二维平面和三维空间的运动轨迹,这种轨迹曲线称为彗星轨迹曲线。函数调用格式如下:
comet(x,y,p)
comet3(x,y,z,p)
- 其中,每一组
x
、
y
、
z
x、y、z
x、y、z 组成一组曲线的坐标参数,用法与
plot
和plot3
函数相同。 p p p 是用于设置彗星长度的参数,默认值是 0.1。在二维图形中,彗长为 y y y 向量长度的 p p p 倍。在三维图形中,彗长为 z z z 向量长度的 p p p 倍。 - 例如,我们生成一个三维运动图形轨迹。
x=0:pi/250:10*pi;
y=sin(x);
z=cos(x);
comet3(x,y,z);
- 运行程序后,动画中的一个画面如下图所示。图中的小圆圈代表彗星头部,它跟踪屏幕上的数据点,彗星轨迹为小圆圈后面的曲线,曲线的变化过程动态地展示了质点的运动轨迹。
四、交互式绘图工具
- MATLAB 提供了多种用于绘图的函数,这些函数可以在命令行窗口中或在程序中调用。此外,MATLAB 还提供了交互式绘图工具。
1. 绘图选项卡
- 在MATLAB的功能区有一个绘图选项卡,提供了绘图的基本工具。
- 绘图选项卡的工具条中有 3 个命令组,左边的所选内容命令组用于显示已选中用于绘图的变量;中间的绘图命令组提供了绘制各种图形的命令;右边的选项命令组用于设置绘图时是否新建图形窗口。
- 如果未选中任何变量,绘图命令组的命令是不可用的。如果在工作区中选择了变量,绘图命令组中会自动根据所选变量类型提供相应绘图命令,此时,单击某个绘图命令按钮,则会在命令行窗口自动输入该命令(命令以选中的变量为参数)并执行,在图形窗口绘制图形。
- 例如,用绘图选项卡中的工具绘制正弦曲线,先在命令行窗口建立 x x x 和 y y y,再在工作区窗口选中 x 、 y x、y x、y,并在绘图选项卡中单击 plot 按钮,则命令行窗口中出现 plot(x,y)命令,然后弹出图形窗口并绘制正弦曲线。
2. 绘图工具
- 绘制图形时,如果需要修改绘图参数,我们可以利用 MATLAB 图形窗口的绘图工具(Plot Tools)。
- 在图形窗口的快捷工具栏中单击最右侧的显示绘图工具和停靠图形按钮,或在 MATLAB 的命令行窗口中输入命令 plottools 启动绘图工具。
- 绘图工具由 3 个部分组成,图像编辑区的左侧为图形选项板,右侧为绘图浏览器,下部为属性编辑器。
2.1 图形选项板
- 图形选项板用于在图形窗口中添加和排列子图,观察和选择绘图数据以及添加图形标注。要打开图形选项板,可以在命令行窗口输入以下命令:
>> figurepalette
- 图形选项板包含 3 个面板,其作用如下。
- (1) 新子图面板:用于添加二维、三维子图。例如,若要将图形窗口分割成 2 × 2 2×2 2×2 的 4 个用于绘制二维图形的子图,则单击二维坐标轴选项右边的展开按钮,然后单击第 2 行第 2 列方格。
- (2) 变量面板:用于浏览和选择绘图数据。若双击某变量,则直接以该变量为参数调用
plot
函数绘图。若在选中的变量上右击,则可以从弹出的快捷菜单中选择一种绘图函数绘制图形。 - (3) 注释面板:用于为图形添加标注。从面板中选择一种标注工具, 可以在图形窗口中绘制出用于标注的图形,如直线、箭头、标注文本框等。
2.2 绘图浏览器
- 绘图浏览器以图例的方式列出了图形中的元素。在绘图浏览器中选中一个对象,图形窗口中该对象上出现黑色标记,属性编辑器展现该对象的属性。
2.3 属性编辑器
- 属性编辑器用于观测和设置所选对象的名称、颜色、填充方法等参数。对象类型不同,属性编辑器中的内容也不同。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。