第六章 图形处理功能.docx
《第六章 图形处理功能.docx》由会员分享,可在线阅读,更多相关《第六章 图形处理功能.docx(22页珍藏版)》请在冰豆网上搜索。
第六章图形处理功能
第六章图形处理功能
Chapter6:
ThefunctionofImageprocessing
一.二维图形(Twodimensionalplotting)
1.基本绘图函数(Basicplottingfunction):
Plot,semilogx,semilogy,loglog,polar,plotyy
(1).单矢量绘图(singlevectorplotting):
plot(y),矢量y的元素与y元素下标之间在线性坐标下的关系曲线。
例1:
单矢量绘图
y=[00.62.358.311.71517.719.420];
plot(y)
可以在图形中加标注和网格,
例2:
给例1的图形加网格和标注。
y=[00.62.358.311.71517.719.420];
plot(y)
title('简单绘图举例');
xlabel('单元下标');
ylabel('给定的矢量');
grid
(2).双矢量绘图(Doublevectorplotting):
如x和y是同样长度的矢量,plot(x,y)命令将绘制y元素对应于x元素的xy曲线图。
例:
双矢量绘图。
x=0:
0.05:
4*pi;
y=sin(x);
plot(x,y)
(3).对数坐标绘图(plotinginlogarithmcoordinate):
x轴对数semilogx,y轴对数semilogy,双对数loglog,
例:
绘制数组y的线性坐标图和三种对数坐标图。
y=[00.62.358.311.71517.719.420];
subplot(2,2,1)
plot(y)
subplot(2,2,2)
semilogx(y)
subplot(2,2,3)
semilogy(y)
subplot(2,2,4)
loglog(y)
(4)极坐标绘图(Plottinginpolarcoordinate):
polar(theta,rho)theta—角度,rho—半径
例:
建立简单的极坐标图形。
t=0:
.01:
2*pi;
polar(t,sin(2*t).*cos(2*t))
2.多重曲线绘图(Multiplecurveplotting)
(1)一组变量绘图(Agroupvariableplotting)
plot(x,y)
(a)x为矢量,y为矩阵时plot(x,y)用不同的颜色绘制y矩阵中各行或列对应于x的曲线。
例1:
x=0:
pi/50:
2*pi;
y(1,:
)=sin(x);
y(2,:
)=0.6*sin(x);
y(3,:
)=0.3*sin(x);
plot(x,y)
(b)x为矩阵,y为矢量时绘图规则与(a)的类似,只是将x中的每一行或列对应于y进行绘图。
例2:
x(1,:
)=0:
pi/50:
2*pi;
x(2,:
)=pi/4:
pi/50:
2*pi+pi/4;
x(3,:
)=pi/2:
pi/50:
2*pi+pi/2;
y=sin(x(1,:
));
plot(x,y)
(c)x和y是同样大小的矩阵时,plot(x,y)绘制y矩阵中各列对应于x各列的图形。
例3:
x(:
1)=[0:
pi/50:
2*pi]'
x(:
2)=[pi/4:
pi/50:
2*pi+pi/4]'
x(:
3)=[pi/2:
pi/50:
2*pi+pi/2]';
y(:
1)=sin(x(:
1))
y(:
2)=0.6*sin(x(:
1));
y(:
3)=0.3*sin(x(:
1));
plot(x,y)
(2)多组变量绘图(Multiplegroupvariablesplotting):
对于一系列相应的矩阵yi和xi,可以使用多组变量绘图法:
plot(x1,y1,x2,y2,…,xn,yn),
这种方法的优点是允许将不同大小的矩阵或矢量的图形绘制在一张图上。
例:
多组变量绘图。
x=0:
pi/50:
2*pi;
y1=sin(x);
y2=0.6*sin(x);
y3=0.3*sin(x);
plot(x,y1,x,y2,x,y3)
(3)双y轴绘图:
plotyy,
在一个图形窗口绘制两组数据曲线,共用一个x轴,图形两边各有一个y轴。
两条图线可以调用不同的绘图方法。
例1:
x=0:
0.3:
12;
y=exp(-0.3*x).*sin(x)+0.5;
plotyy(x,y,x,y,'plot','stem')
左侧y轴对应plot形式的绘图,右侧y轴对应stem形式的曲线。
例2:
对于y坐标不同的情况。
t=0:
900;
A=1000;
a=0.005;
b=0.005;
z1=A*exp(-a*t);
z2=sin(b*t);
plotyy(t,z1,t,z2,'semilogy','plot')
3.图线形式和颜色(Styleandcolorofplot)
(1)图线的形式:
(styleofplot)MATLAB提供的四种线形,
实线虚线--,冒号线:
,点划线--.
标记点类型:
.,+,*,o,×,s(或square)□,d(或diamond),△,▽,<,>,p(或pentagram),h(或hexagram),
plot(x,y,’—‘),plot(x1,y1,’:
’,x2,y2,’*’)
例1:
选择不同的线形绘图。
t=0:
pi/100:
2*pi;
y=sin(t);
y2=sin(t-0.25);
y3=sin(t-0.5);
plot(t,y,'-',t,y2,'-',t,y3,':
')
例2:
选择不同的标记点绘图。
t=0:
pi/20:
2*pi;
x=t.^3;
y=sin(t);
plot(x,y,'o')
(2)线的颜色(colorofplot):
MATLAB中可选的颜色:
红r,绿g,
蓝b,黄y,粉红m,青c(cyan)黑k.
例:
t=0:
pi/20:
2*pi;
y=sin(t);
plot(x,y,'r'),plot(x,y,'g+')
(3)图线的其他属性(othercharactersofplot):
可设置图线的宽度、标记点的边缘颜色、填充颜色、标记点的大小等。
例:
设置图线的线形、颜色、宽度、标记点的颜色及大小。
t=0:
pi/20:
pi;
y=sin(4*t).*sin(t)/2;
plot(t,y,'-bs','LineWidth',2,'MarkerEdgeColor','k',...
'MarkerFaceColor','y','MarkerSize',10)
二.图形的控制与表现(Figurecontrolandrepresentation)
MATLAB提供的用于图形控制的函数和命令:
axis:
人工选择坐标轴尺寸.
clf:
清图形窗口.
ginput:
利用鼠标的十字准线输入.
hold:
保持图形.
shg:
显示图形窗口.
subplot:
将图形窗口分成N块子窗口。
1.图形窗口(figurewindow)
(1).图形窗口的创建和选择(Creatingandselectingoffigurewindow)
figure(n)函数用于为当前的绘图创建图形窗口,每运行一次figure就会创建一个新的图形窗口,n表示第个n窗口,如果窗口定义了句柄,也可以用figure(h)将句柄h的窗口作为当前窗口。
clf命令用于清除当前图形窗口中的内容。
shg命令用于显示当前图形窗口。
(2).在一个图形窗口中绘制多个子图形(Drawingseveralsubfiguresinasinglewindow)
subplot(m,n,p),把窗口分成m×n个小窗口,并把第p个窗口当作当前窗口。
例:
将4个图形显示在同一个图形窗口中。
t=0:
pi/20:
2*pi;
[x,y]=meshgrid(t);
subplot(2,2,1)
plot(sin(t),cos(t)),
axisequal
subplot(2,2,2)
z=sin(x)+cos(y);
plot(t,z),
axis([02*pi–22])
subplot(2,2,3)
z=sin(x).*cos(y);
plot(t,z),
axis([02*pi–11])
subplot(2,2,4)
z=sin(x).^2-cos(y).^2;
plot(t,z),
axis([02*pi–11])
(3).在一个已有的图形上绘图(Drawingafigureonthefigurewasexisted):
用holdon命令在一个已有的图形上继续绘图,使用holdoff命令结束继续绘图。
例:
将peaks函数的等高线图与伪彩色画在一起。
[x,y,z]=peaks;%产生双变量数组
contour(x,y,z,20,'k')%绘制等高线
holdon
pcolor(x,y,z)%绘制伪彩色图
shadinginterp%表面色彩渲染
holdoff
2.坐标轴控制命令(Axiscontrolcommands)
控制坐标性质的axis函数的多种调用格式:
axis(xminxmaxyminymax):
指定二维图形x和y轴的刻度范围,
axisauto设置坐标轴为自动刻度(缺省值)
axismanual(或axis(axis))保持刻度不随数据的大小而变化
axistlght以数据的大小为坐标轴的范围
axisij设置坐标轴的原点在左上角,i为纵坐标,j为横坐标
axisxy使坐标轴回到直角坐标系
axisequal使坐标轴刻度增量相同
axissquare使各坐标轴长度相同,但刻度增量未必相同
axisnormal自动调节轴与数据的外表比例,使其他设置失效
axisoff使坐标轴消隐
axison显现坐标轴
(1)坐标轴的范围(Domainofcoordinatesaxis):
二维图形坐标轴范围在缺省状态下是根据数据的大小自动设置的,如欲改变,可利用axis(xminxmaxyminymax),函数来定义。
例:
定义坐标轴范围对观察图形的影响。
x=0:
.01:
pi/2;
figure
(1)
plot(x,tan(x),'-ro')%ymax=tan(1.57),而其他数据都很小,结果将
%使图形难于进行观察和判断。
figure
(2)
plot(x,tan(x),'-ro')
axis([0,pi/2,0,5])%对坐标轴的范围进行控制就可得到较满意的绘图结果
(2)显示比例对绘图结果的影响(Effectofdisplayscalingonplottingresults)
例:
比较(Default,axissquare,axisequal,axistight)几种不同的显示方式的显示效果。
t=0:
pi/20:
2*pi;
figure
(1)
subplot(2,1,1)
plot(sin(t),2*cos(t))%缺省状态下的图形比例
gridon
subplot(2,1,2)
plot(sin(t),2*cos(t))
axissquare%正方形的显示比例
gridon
figure
(2)
subplot(1,2,1)
plot(sin(t),2*cos(t))
axisequal%具有相等的刻度比例
gridon
subplot(1,2,2)
plot(sin(t),2*cos(t))
axistight%紧缩形式
gridon
3.图形标注(Markingonthefigure):
MATLAB的图形标注方法(表6—7)
title标题,
xlabelx轴标注,
ylabely轴标注,
text任意定位的标注
gtext鼠标定位标注,
legent标注图例
图形标注可以使用字母,数字,汉字或按规定的方法表示希腊字母,如\pi表示π,\leq表示≤,\rm表示后面的字恢复为正体字,\it表示斜体字,FontSize表示字体的大小,FontName表示字体的类型等。
可以使用图形窗口的Insert菜单,也可以使用属性编辑器,还可以使用函数输入的方法加标注,以下介绍相关函数的使用方法。
(1).加注坐标轴标识和图形标题(Addaxislabelsandtitleoffigure)
加注坐标轴标识:
xlabel(‘s’),ylabel(‘s’)
图形标题:
title(‘s’)
例:
加注坐标轴标示和图形标题。
t=0:
pi/100:
2*pi;
y=sin(t);
plot(t,y)
axis([02*pi,-11])
xlabel('0\leq\itt\rm\leq\pi','FontSize',16)
ylabel('sin(t)','FontSize',20)
title('正弦函数图形','FontName','隶书','FontSize',20)
(2).图中加注文本(Addtextinthefigure)
text(x,y,’字符串’)
例:
在上图中加语句。
t=0:
pi/100:
2*pi;
y=sin(t);
plot(t,y)
axis([02*pi,-11])
xlabel('0\leq\itt\rm\leq\pi','FontSize',16)
ylabel('sin(t)','FontSize',20)
title('正弦函数图形','FontName','隶书','FontSize',20)
text(3*pi/4,sin(3*pi/4),'\leftarrowsin(t)=0.707','FontSize',16)
text(pi,sin(pi),'\leftarrowsin(t)=0','FontSize',16)
text(5*pi/4,sin(5*pi/4),'sin(t)=-0.707\rightarrow','FontSize',16,...
'HorizontalAlignment','right')
句中:
leftarrow表示加一个向左的箭头
rightarrow表示加一个向右的箭头
HorizontalAlignment表示右对齐水平排列
gtext函数用于在图形窗口上用鼠标直接在指定的位置上加注文本,调用格式:
gtext(‘字符串‘)
例:
t=0:
pi/100:
2*pi;
y=sin(t);
plot(t,y)
axis([02*pi,-11])
xlabel('0\leq\itt\rm\leq\pi','FontSize',16)
ylabel('sin(t)','FontSize',20)
title('正弦函数图形','FontName','隶书','FontSize',20)
gtext('MATLAB')
(3).指定TeX字符
例:
在标题中指定TeX字符
t=0:
pi/100:
2*pi;
alpha=-0.8;
beta=15;
y=sin(beta*t).*exp(alpha*t);
plot(t,y)
title('{\itAe}^{-\it\alpha\itt}sin\it\beta{\itt}\it\alpha<<\it\beta')
xlabel('时间\mus.'),
ylabel('幅值')
在title中的字符串表现的是Aeαtsinβtα<<β
{\itAe}^{-\it\alpha\itt}sin\it\beta{\itt}\it\alpha<<\it\beta’
斜体Ae上标斜体αt斜体βt斜体α斜体β
4.在图形中添加图例框(Addlegendinthefigure)
legend(字符串1,字符串2,…)
例:
在当前图形中添加图例说明。
x=0:
pi/10:
2*pi;
y1=sin(x);
y2=0.6*sin(x);
y3=0.3*sin(x);
plot(x,y1,x,y2,'-o',x,y3,'-*')
legend('曲线1','曲线2','曲线3')
legend('boxoff')
legend函数的其他功能见(表6—8)
(4)彩色分散点图(Colorscatterfigure)
彩色分散点图函数:
scatter(x,y,c,s)x,y为两个矢量,用于定位数据点,s为绘图点的大小,c为绘图所使用的色彩,s和c均可以以矢量或表达式形式给出,s和c为与x或y同长度的矢量时标记点尺寸和颜色将按线性规律变化。
在scatter函数的前4各参数之后还可以增加第五个参数‘filled‘,表示填充绘图点。
Scatter与plot的最大差别在于Scatter可以绘制变尺寸、变颜色的点图。
例:
给定数据t=0:
pi/10:
2*pi,y=sin(t),观察在不同输入参数时函数的绘图结果。
t=0:
pi/10:
2*pi;
y=sin(t)
subplot(3,2,1)
scatter(t,y)
subplot(3,2,2)
scatter(t,y,'v')
subplot(3,2,3)
scatter(t,y,(abs(y)+2).^4,'filled')
subplot(3,2,4)
scatter(t,y,30,[0:
2:
40],'v','filled')
subplot(3,2,5)
scatter(t,y,(t+1).^3,y,'filled')
四.三维图形(3-Dfigure)
MATLAB提供了大量三维图形的表现函数,可用于绘制三维曲线图、网格图、表面图、伪彩图和等高线图等,还提供了控制颜色、光线、视角等绘图效果的函数和命令。
1.三维曲线图(3-Dplotting)
plot3(x,y,z)
当x,y,z是同样长度的矢量时,绘出的是一条在三维空间贯穿的曲线。
例1:
当x,y,z都是一维数组时的三维曲线图。
t=0:
pi/50:
10*pi;
x=exp(-t/15).*sin(2*t);
y=exp(-t/15).*cos(2*t)
z=t;
plot3(x,y,z)
axissquare;gridon
如x,y,z都是m×n阶的矩阵时,绘出的是m条分布在三维空间的曲线。
例2:
当x,y,z都是矩阵时的三维曲线图。
[x,y]=meshgrid([-2:
0.1:
2]);
z=x.*exp(-x.^2-y.^2);
plot3(x,y,z)
gridon
例3:
规定线形、颜色及标记点的三维曲线图。
t=0:
pi/20:
5*pi;
plot3(sin(t),cos(t),t,':
*r')
2.三维绘图数据的产生(Creatingthedataof3-Dfigure)
(1)peaks用于创建双峰函数和绘图。
基本调用格式为:
*[x,y,z]=peaks(n):
分别创建x,y,z三个均为n×n阶的方阵,其中x的每一列元素都相同,每一行元素均为在[-3,3]区间内的n等份,y的行列元素与x刚好相反,z为x和y的函数,z=
●Peaks(n)
●直接用peaks函数创建的x,y,z三个矩阵绘制表面图,相当于执行了[x,y,z]=peaks(n)和surf(x,y,z)两个函数。
例1:
a=peaks(8);
mesh(a)
(2)meshgrid按指定方式生成网格矩阵,调用格式为:
[X,Y,Z]=meshgrid(x,y,z)分别创建X,Y,Z三个m×n×k阶的矩阵,矩阵的阶数由x,y,z三个矢量的长度m,n,k确定,X,Y,Z三个矩阵表示了三维空间的网格,如省略了Z,则创建二维网格。
[x,y,z]=meshgrid(2,3,6);
plot3(x,y,z)
gridon
3.网格图(Meshing)
*mesh(z)绘制分别以m×n阶矩阵z的行数和列数为x和y坐标
([1:
m],[1:
n]),以z的对应元素值为z坐标的三维网格图。
*mesh(x,y,z)绘制分别以矩阵x,y,z的元素值为坐标的三维网格图,x,y,z必须为同阶矩阵。
*函数Meshc:
将网格图与等高线一起绘制。
*函数Meshz:
在绘制的同时绘制零基准平面。
例1:
绘制各种网格图
subplot(2,2,1)
mesh(peaks(20))%基本网格图
subplot(2,2,2)
meshc(peaks(20))%带等高线的网格图
subplot(2,2,3)
p=peaks(30);
p(20:
23,9:
15)=NaN*ones(4,7);%剪孔位置(将部分网格设置为非数)
meshz(p)%带剪孔的垂帘网格图(带有零基准平面)
subplot(2,2,4)
Waterfall(peaks(30))%瀑布水线图
4.着色表面图(Surfing)
(1)绘制表面着色图
surf,绘制表面着色图的基本命令;
surfc,绘制带等高线的着色表面图;
surfl可以控制表面图的光照效应。
函数surf的调用格式:
●surf(z)绘制分别以m×n阶矩阵z的行数和列数为x和y坐标
([1:
m],[1:
n]),以z的对应元素值为z坐标的三维表面图。
●surf(x,y,z)绘制分别以矩阵x,y,z的元素值为坐标的三维表面图,
x,y,z必须为同阶矩阵。
([1:
m],[1:
n]),以z的对应元素值为z
●surf(x,y,z,c)用C定义的颜色绘制三维表面图。
●surf(…,’PropertyName’,PropertyValue)定义三维表面属性图。
●surfc(…)绘制带等高线的三维表面图。
●h=surf(…)和h=surfc(…)返回表面图的图形对象句柄。
例1:
用surf函数画一个椭圆表面。
(a)生成数据并绘制表面图
x=-1.5:
0.3:
1.5;
y=-1:
0.2:
1;
[x,y]=meshgrid(x,y);%将矢量x,y转为数组X,Y,用于绘三维表面图
z=sqrt(4-x.^2/9-y.^2/4);
surf(x,y,z)
(2)用surfl函数绘制带光照效果的表面图
surfl(x,y,z)
colormap(hot)
(3)调用表面色彩渲染函数shading,控制表面颜色连续变化。
surfl(x,y,z)
colormap(hot)
shadinginterp
shading函数有三个可选择参数flat