ch6图形与图像处理_第1页
ch6图形与图像处理_第2页
ch6图形与图像处理_第3页
ch6图形与图像处理_第4页
ch6图形与图像处理_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1

第6章

图形与图像处理6.1二维图形在MATLAB中,plot是最基本的二维绘图函数,其调用格式如下。1.plot(Y):若Y为实向量,则以该向量元素的下标为横坐标,以Y的各元素值为纵坐标,绘制二维曲线;若Y为复数向量,则等效于plot(real(Y),imag(Y));若Y为实矩阵,则按列绘制每列元素值相对其下标的二维曲线,曲线的条数等于Y的列数;若Y为复数矩阵,则按列分别以元素实部和虚部为横、纵坐标绘制多条二维曲线。

2

2.plot(X,Y):若X、Y为长度相等的向量,则绘制以X和Y为横、纵坐标的二维曲线;若X为向量,Y是有一维与Y同维的矩阵,则以X为横坐标绘制出多条不同色彩的曲线,曲线的条数与Y的另一维相同;若X、Y为同维矩阵,则绘制以X和Y对应的列元素为横、纵坐标的多条二维曲线,曲线的条数与矩阵的列数相同。

3.plot(X1,Y1,X2,Y2,…,Xn,Yn):其中的每一对参数Xi和Yi(i=1,2,…,n)的取值和所绘图形与(2)中相同。4.plot(X1,Y1,LineSpec,...):以LineSpec指定的属性,绘制所有Xn、Yn对应的曲线。

3

5.plot(...,'PropertyName',PropertyValue,...):对于由plot绘制的所有曲线,按照设置的属性值进行绘制,PropertyName为属性名,PropertyValue为对应的属性值。例6-1用函数plot画出sin2x在区间[0,8]上的图形。

%ex6_1.m>>x=0:0.02:8;>>y=sin(2*x);>>plot(x,y);

4

输出如图6-1所示。图6-1sin2x在区间[0,8]上的图形5

例6-2用plot函数绘制多条曲线。%ex6_2.m>>x=0:0.01:8;>>y1=x.^2-3*x;>>y2=cos(x.^2);>>figure>>plot(x,y1,x,y2)

其中,命令figure用于表示创建新的图形窗口,结果如图6-2所示。6

图6-2plot函数绘制多条曲线7

在MATLAB中,为区别画在同一窗口中的多条曲线,可以改变曲线的颜色和线型等图形属性,plot函数可以接受字符串输入变量,这些字符串输入变量用来指定不同的颜色、线型和标记符号(各数据点上的显示符号)。表6-1列出了常用的颜色、线型和标记符号。例6-3按不同颜色和线型绘图。%ex6_3.m>>x=0:0.1:4;>>y1=0.4+sin(2*x);>>y2=sin(x.^2);>>figure;>>plot(x,y1,'b-h',x,y2,'r--s')

8

表6-1颜色、线型和标记符号颜色参数颜色线型参数线型标记符号标记y黄-实线·点b蓝:点线。圆圈g绿-.点划线+加号m洋红--虚线*星号w白×叉号c青s方块k黑d菱形r红p正五角星h正六角星9

曲线y1采用蓝色、实线、正六角星标记,曲线y2采用红色、虚线、方块标记,结果如图6-3所示。图6-3不同颜色和线型图10

MATLAB在绘图时会根据数据的分布范围自动选择坐标轴的刻度范围,通过调用函数axis指定坐标轴的刻度范围,格式为axis([xmin,xmax,ymin,ymax]),其中xmin,xmax,ymin,ymax分别表示x轴的起点、终点,y轴的起点、终点。同时还可以为坐标轴加标注,使用函数xlabel('option')和ylabel('option')来实现,也可以使用函数title('option')为图形加标题,另外使用函数legend('option')加标注,使用命令gridon/off添加或取消网格线,更加方便的是调用text(x,y,'string')在指定的坐标(x,y)处加上文字。11

例6-4添加坐标标注、标题、网格以及标注的图形。%ex6_4.m>>x=0:0.01:4;>>figure>>y1=cos(2.^x)-0.5;y2=sin(x*4);>>plot(x,y1,x,y2,'r--');>>xlabel('In');ylabel('Out');>>title('MyGraphics');>>legend('y1=cos(2.^x)-0.5','y2=sin(x*4)');>>gridon;

在本例题中,x坐标轴标注为In,y坐标轴标注为Out,图形标题为MyGraphics,图形标注为y1=cos(2.^x)-0.5、y2=sin(x*4),并为图形增加了网格线,如图6-4所示。12

图6-4增加标注的图形13

例6-5给图形增加文字标识。%ex6_5.m>>plot(-pi:pi/10:pi,cos(-pi:pi/10:pi));>>text(pi/2,0,'\leftarrowcos(\pi/2)','FontSize',18);在本例题中,使用text加标注,在图形中可以增加符号,如上面的\leftarrow表示左前头,同时可以设定字体大小,如图6-5所示。14

图6-5在图形中加上文字标注15

6.2极坐标和复平面坐标绘图MATLAB还提供了一些特殊的坐标图形函数,如绘制极坐标和复平面坐标图,对于各种数学运算结果的显示和分析带了极大的方便。6.2.1极坐标图极坐标图的调用格式如下所示:1.polar(theta,rho):用极角theta和极径rho画出极坐标图形。极角theta表示从x轴到半径的单位为弧度的向量,极径rho表示各数据点到极点的半径向量。2.polar(theta,rho,LineSpec):其中,参量LineSpec指定极坐标图中线条的线型、标记符号和颜色等。16

例6-6画出下列函数的极坐标图。%ex6_6.m>>x=0:0.1:2*pi;>>polar(x,sin(2*x));图形结果如图6-6所示。图6-6极坐标图17

例6-7画出下列函数的极坐标图。%ex6_7.m>>x=0:0.1:2*pi;>>polar(x,sin(2*x),'r--s');图形结果如图6-7所示。图6-7极坐标图18

从上面两幅图像可以看出,这两个极坐标指令的主要区别,在于第二种指令中指定出了极坐标图中线条的线型、标记符号和颜色等,而第一种指令就是使用的系统默认值。6.2.2复平面坐标图在MATLAB中,用compass和feather这两个命令都可以用来画复平面坐标图。1.compass命令compass命令绘制的图像是以坐标原点为起点的一组复向量,所以又被称为罗盘图。19

其调用格式如下所示:compass(x,y);compass(z);%ex6_8.m>>theta=0:0.1:pi;>>x=exp(i*theta);>>compass(x,'r');其中,x,y分别表示复向量的实部和虚部;当只有一个参数z时,则相当于compass(real(z),imag(z))。例6-8用罗盘图绘制下列复向量。20

图形结果如图6-8所示。图6-8罗盘图21

2.feather命令feather命令绘制的图形是以(k,0)为起点的复向量图,又称为羽毛图,其中,k是从1~n,n是Z向量的元素序号。其调用格式如下所示:feather(x,y);feather(z);例6-9用羽毛图绘制下列复向量。%ex6_9.m>>theta=0:0.1:pi;>>x=exp(i*theta);>>feather(x,'r');22

图形结果如图6-9所示。图6-9羽毛图

23

6.3三维图形6.3.1三维曲线图用函数plot3可以直接绘制三维图形,其调用格式主要有以下几种。1.plot3(X1,Y1,Z1,...):X1、Y1、Z1为向量或矩阵,表示图形的三维坐标。该函数可以在同一图形窗口一次画出多条三维曲线,以X1,Y1,Z1,...Xn,Yn,Zn指定各条曲线的三维坐标。2.plot3(X1,Y1,Z1,LineSpec,...):以LineSpec指定的属性绘制三维图形。3.plot3(...,'PropertyName',PropertyValue,...):对以函数plot3绘制的图形对象设置属性。24

例6-10绘制三维曲线图(sin(x),x,cos(x))。%ex6_10.mx=0:0.01:30;figure%改plot3(sin(x),cos(x),x,‘r’);plot3(sin(x),x,cos(x),‘r’);grid;text(0,0,0,'0');title('ThreeDimension');xlabel('sin(x)');ylabel('x'),zlabel('cos(x)');这里,绘制向量组(sin(x),x,cos(x))的三维曲线图,如图6-10所示,其中,plot3的使用格式和二维绘图的plot命令很相似的。25

图6-10三维曲线示例

26

6.3.2三维曲面图在MATLAB中,可以通过调用函数surf直接来绘制三维曲面图,其使用格式如下。1.surf(X,Y,Z):以Z确定的曲面高度和颜色,按照X、Y形成的“格点”矩阵,创建一渐变的三维曲面。X、Y可以为向量或矩阵,若X、Y为向量,则必须满足m=size(X),n=size(Y),[m,n]=size(Z)。2.surf(X,Y,Z,C):以Z确定的曲面高度,C确定的曲面颜色,按照X、Y形成的“格点”矩阵,创建一渐变的三维曲面。27

例6-11绘制球面图%ex6_11.mfigure[X,Y,Z]=sphere(30);surf(X,Y,Z);xlabel('x'),ylabel('y'),zlabel('z');title('Globle');这里调用了函数sphere(n)来生成球体坐标,其中n表示将整个球体坐标划分的网络数,即生成的向量组(x,y,z)的大小,如图6-11所示。

28

图6-11三维球面图29

6.4网格图与等高线6.4.1网格图在MATLAB中,网格可以利用meshgrid命令来实现,其调用格式如下所示:[X,Y]=meshgrid(x,y)其中,X,Y是栅格点的坐标,为矩阵;x,y为向量。30

在MATLAB中,为了方便测试立体图,还提供了peaks函数,可以产生一个凹凸有致的曲面,包含3个局部极大点和3个局部极小点;同时,为了直观起见,还可以用mesh命令来查看meshgrid的输出图形。例6-12绘制方程x

,其中-2≤x,y≤2的曲面图。%ex6_12.m[x,y]=meshgrid(-2:0.2:2,-2:0.2:2);z=x.*exp(-x.^2-y.^2);surf(x,y,z);%peaks(x,y);%mesh(x,y,z);31

图6-12网格图这里meshigrid(x,y)的作用是产生一个以向量x为行,向量y为列的矩阵,而x、y是从-2开始到2,每间隔0.2记下一个数据。图形如图6-12所示。32

用peaks(x,y)画图33

用mesh(x,y,z)画图34

6.4.2等高线在MATLAB中,可以直接用contour和contour3命令绘制出等高线。其调用格式如下所示:1.contour(z)把矩阵z中的值作为一个二维函数的值,等高曲线是一个平面的曲线,平面的高度v是MATLAB自动取的;2.contour(x,y,z)(x,y)是平面z=0上点的坐标矩阵,z为相应点的高度值矩阵。效果同上;3.contour(z,n)画出n条等高线;4.contour(x,y,z,n)画出n条等高线;5.contour(z,v)在指定的高度v上画出等高线;35

例6-13绘制出例6-12中的等高线。%ex6_13.m[x,y]=meshgrid(-2:0.2:2,-2:0.2:2);z=x.*exp(-x.^2-y.^2);%contour(x,y,z);contour3(z,30);

其图形如下图6-13所示。36

(a)二维等高线

(b)三维等高线

图6-13等高线37

6.5统计图形6.5.1条形图条形图常用于对统计的数据进行作图,特别适用于少量且离散的数据。其调用格式如下所示:1.画垂直条形图:bar(x,y,width,’参数’);2.画水平条形图:barh(x,y,width,’参数’);3.画三维垂直条形图:bar3(x,y,z,width,’参数’);4.画三维水平条形图:bar3h(x,y,z,width,’参数’)。38

例6-14用条形图表示某年七月份11-15日连续五天的温度数据,Y矩阵的各列分别表示平均温度、最高温度和最低温度,请分别用条形图和三维条形来表示。%ex6_14.mx=11:15;y=[353042323145303241343842293243];

39

bar(x,y);%barh(x,y);bar3(x,y);%bra3h(x,y);其条形图和三维条形如下图6-14所示。(a)二维条形图

(b)三维条形图

图6-14条形图40

6.5.2直方图直方图和条形图的形状非常相似,但是,直方图可以显示出数据的分布规律,所以,具有很好的统计特性。其调用格式如下所示:(1)hist(y,m);(2)hist(y,x);其中,m是分段的个数,省略时则默认为10;x是向量,用来说明每个数据段里的中间值,y可以是向量也可以是矩阵,如果是矩阵时就按列分段。41

例6-15向量的直方图%ex6_15.mx=-2:0.1:2;y=randn(10,1);hist(y,x);%hist(y);其图形结果如图6-15所示。若改为矩阵的直方图,可将y=randn(10,1)改成矩阵即可。如y=randn(10,6)。42

图6-15直方图43

6.5.3饼形图在MATLAB中,饼形图可以用来显示向量中各元素在总元素中所占的百分比,可以用pie和pie3命令来分别绘制二维和三维饼形图,其调用格式如下所示:1.pie(x,explode,’label’);2.pie3(x,explode,’label’);其中,x是向量,explode用来表示饼形图中的这部分是否要从总图形中分离出来,‘1’表示这部分要分离出来,‘0’表示不分离出来。Label是每一个部分的标注符。44

例6-16二维饼形图制作%ex6_16.mx=[230.54.58];explode=[01010];pie(x,explode);其绘制出来的饼形图如下图6-16所示。查看explode=[00000];45图6-16饼形图

46

6.6子图和其它图形函数6.6.1子图函数subplot()

1.subplot(m,n,p)将图形分成m*n个子区域,在第p个子区域绘制坐标并画图。

2.subplot(m,n,[p1,p2,…])将图形分成m*n个子区域,合并p1,p2,…等子区域为新的子区域并将图形绘制在该区域。47

例6-17在一个图形上绘制相同大小的子图。%ex6_17.mx=-pi:pi/20:pi;subplot(2,3,1)plot(x,cos(x));title('First:cos');subplot(2,3,2)plot(x,sin(x));title('Second:sin');48

subplot(2,3,3)plot(x,abs(x));title('Third:abs');subplot(2,3,4)plot(x,floor(x));title('Fourth:floor');

subplot(2,3,5)plot(x,round(x));title('Fifth:round');

49

subplot(2,3,6)plot(x,sign(x));title('Sixth:sign');得到6个子图见图6-17。

50

图6-17有6个相同大小子图的图形51

例6-18在一个图形上绘制不同大小的子图。%ex6_18.mx=-pi:pi/20:pi;subplot(2,3,[14])plot(x,cos(x));title('First:cos');subplot(2,3,[23])plot(x,sin(x));title('Second:sin');52

subplot(2,3,5)plot(x,round(x));title('Third:round');subplot(2,3,6)plot(x,sign(x));title('Fourth:sign');

得到4个子图见图6-18。53

图6-18有4个不同大小子图的图形54

6.6.2其它绘图函数1.mesh()类似surf(),画曲面,不着色。例6-19用mesh画例6-12的图形。%ex6_19.mex6_12.m的变形[x,y]=meshgrid(-2:.2:2,-2:.2:2);z=x.*exp(-x.^2-y.^2);mesh(x,y,z);%surf(x,y,z);

55

图6-19mesh()绘图

56

2.meshc()

既画曲线,又画等高线例6-20用meshc()画图。

%ex6-20.m[x,y,z]=peaks(30);meshc(z);57

图6-20meshc()绘图58

3.meshz()即画曲线,又画边界线。例6-21用meshz()画图。%ex6-21.m[x,y,z]=peaks(30);meshz(z);

59

图6-21meshz()绘图60

4.grid有gridon和gridoff,控制网格线。5.box有boxon和boxoff,控制边界的坐标刻度。6.plotyy()画双纵坐标图形。61

例6-22画出y=sin(x)和y=cos(x)在[0,pi]中双纵坐标图形。x=0:0.01:pi;y1=sin(x);y2=cos(x);plotyy(x,y1,x,y2);得到的图形如图6-22。62

图6-22y=sin(x)和y=cos(x)在[0,pi]中双纵坐标图形63

7.patch()绘制封闭图形例6-23给定平面坐标(0,1),(1,0),(3,1),(5,0),(6,2),(4,2),(3,3),(0,1),试绘制封闭图形。得到的图形如图6-23。

%ex6_23.mx=[01356430];y=[10102231];patch(x,y,'b')

64

图6-23绘制的封闭图形65

8.semilogx()画半对数图。6.7隐函数绘图6.7.1一元隐函数绘图66

利用符号函数,可以通过函数ezplot绘制任意一元函数,其调用格式如下:1.ezplot(f):按照x的默认取值范围(-2*pi<x<2*pi)绘制f=f(x)的图形。对于f=f(x,y),x、y的默认取值范围:-2*pi<x<2*pi,、-2*pi<y<2*p,绘制f(x,y)=0的图形。2.ezplot(f,[min,max]):按照x的指定取值范围(min<x<max)绘制函数f=f(x)的图形。67

例6-24绘制函数f(x,y)=ex.cos(y)+y2/(cos(x.y)+1)的图形。绘制f(x,y)=x2+y2-1的图形.%ex6_24.msymsxy;f=exp(x)*cos(y)+y^2/(1+cos(x*y));ezplot(f);g=‘x^2+y^2-1,ezplot(g),ezplot(g,[-1,1])也可以写成:x=-1:0.01:1;y1=sqrt(1-x.^2);y2=-sqrt(1-x.^2);plot(x,y1,x,y2);结果如图6-24所示。68

图6-24一元隐函数绘图69

6.7.2二元隐函数绘图对于二元隐函数,则可以调用函数ezmesh来绘图,使用格式如下:1.ezmesh(f):按照x、y的默认取值范围(-2*pi<x<2*pi,-2*pi<y<2*pi)绘制函数f(x,y)的图形。2.ezmesh(f,domain):按照domain指定的取值范围绘制函数f(x,y)的图形,domain可以是1×4的向量:[xmin,xmax,ymin,ymax];也可以是1×2的向量:[min,max],此时,min<x<max,min<y<max。

70

例6-25绘制函数z2=f(x,y)=1+x2+y2的图形。%ex6_25.m或ex6_25_1.msymsx,y;f=sqrt(1+x^2+y^2);ezmesh(f);结果如图6-25所示。71

图6-25二元隐函数绘图72

6.8基本图像处理图像处理(ImageProcessing)是用计算机对图像进行分析,以达到所需结果的技术。图像处理一般指数字图像处理。数字图像是指用数字摄像机、扫描仪等设备经过采样和数字化得到的一个大的矩阵,该矩阵的元素称为像素,其值为一整数,称为灰度值。图像处理技术的主要内容包括图像压缩、增强和复原、匹配、描述、识别等部分。常见的处理有图像数字化、图像编码、图像增强、图像复原、图像分割和图像分析等。

73

6.8.1图像基础1.图像及其类型MATLAB图像处理工具箱支持4种基本图像类型:索引图像、灰度图像、二进制图像和真彩色(RGB)图像。(1)索引图像索引图像包括图像矩阵和色图矩阵。其中色图是按图像中颜色值进行排序后的矩阵。对于每个像素,像矩阵包含一个值,这个值就是色图矩阵中的索引。色图为m×3的双精度值矩阵,各行分别指定红绿蓝(RGB)的单色值,RGB为值域是[0,1]的实数值,0代表最暗,1代表最亮。74

(2)灰度图像灰度图像保存在一个矩阵中,矩阵的每个元素代表一个像素点。矩阵可以是双精度类型,值域为[0,1];也可以为unit8类型,值域为[0,255]。矩阵的每个元素值代表不同的亮度或灰度级,0表示黑色,1(或unit8的255)代表白色。75

(3)二进制图像表示二进制图像的二维矩阵仅由0和1构成。二进制图像可以看作一个仅包括黑与白的特殊灰度图像,也可以看作共有两种颜色的索引图像。二进制图像可以保存为双精度或unit8类型的数组。显然,用unit8类型可以节省空间。在图像处理工具箱中,任何一个返回二进制图像的函数都是以unit8类型逻辑数组来返回的。76

(4)真彩色(RGB)图像真彩色图像用RGB这3个亮度值表示一个像素的颜色,真彩色图像各像素的亮度值直接存在图像数组中,图像数组为m×n×3,m、n表示图像像素的行数和列数。2.数字图像格式计算机数字图像文件常用格式有:BMP(Windows位图文件)、HDF(层次数据格式图像文件)、JPEG(联合图像专家组压缩图像文件)、PCX(Windows画笔图像文件)、TIF(标签图像格式文件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论