页数:41页文件大小:777.3 KB来源: MATLAB基础与应用ppt课件
本课件讲解MATLAB图形绘制与图像处理:从plot等二维绘图函数与图形修饰入手,介绍三维曲线、三维曲面与网格图的绘制方法,说明图形句柄的获取与属性设置,并给出图像读写、显示、变换与简单增强处理的实现方式。
本页为《MATLAB基础与应用》第7章 图形图像处理的章节封面。
本章知识结构
7.1 二维图像 1.plot函数:在线条多于一条时,若用户没有指定使用颜色,则 plot 循环使用由当前坐标轴颜色顺序属性(current axes ColorOrder property)定义的颜色,以区别不同的线条。在用完上述属性值后,plot 又循环使用由坐标轴线型顺序属性(axes LineStyleOrder property)定义的线型,以区别不同的线条。
例7-1:在 0≤x≤2π 区间内,绘制曲线 y=2e-0.5xcos(4πx)。程序如下:
x=0:pi/100:2*pi; y=2*exp(-0.5*x).*cos(4*pi*x); plot(x,y)图7.1 二维图形绘制:上述程序绘制得到的衰减振荡曲线。
例7-2:在同一坐标内,分别用不同线型和颜色绘制曲线 y1=0.2e-0.5xcos(4πx) 和 y2=2e-0.5xcos(πx),标记两曲线交叉点。程序如下:
x=linspace(0,2*pi,1000); y1=0.2*exp(-0.5*x).*cos(4*pi*x); y2=2*exp(-0.5*x).*cos(pi*x); k=find(abs(y1-y2)<1e-2); % 查找y1与y2相等点(近似相等)的下标 x1=x(k); % 取y1与y2相等点的x坐标 y3=0.2*exp(-0.5*x1).*cos(4*pi*x1); % 求y1与y2值相等点的y坐标 plot(x,y1,x,y2,'k:',x1,y3,'bp');说明:源文件中 y2 的表达式抽取时缺失后半段(写作 2*exp(-0.5*x).*)),此处按题目给出的 y2=2e^-0.5x·cos(πx) 补全。
图7.2 不同样式的二维曲线绘制:两条曲线分别以实线与黑色点线绘制,交叉点以蓝色五角星标记。
例7-3:在 0≤x≤2π 区间内,绘制曲线 y1=2e-0.5x 和 y2=cos(4πx),并给图形添加图形标注。程序如下:
x=0:pi/100:2*pi; y1=2*exp(-0.5*x); y2=cos(4*pi*x); plot(x,y1,x,y2) title('x from 0 to 2{\pi}'); % 加图形标题 xlabel('Variable X'); % 加X轴说明 ylabel('Variable Y'); % 加Y轴说明 text(0.8,1.5,'曲线y1=2e^{-0.5x}'); % 在指定位置添加图形说明 text(2.5,1.1,'曲线y2=cos(4{\pi}x)'); legend('y1',' y2')结果如图7.3所示。
图7.3 legend 图例说明二维图:图形上方为标题,横纵轴各有说明,右上角给出 y1、y2 图例。
subplot函数:subplot(m,n,p) 将当前图形窗口分成 m×n 个绘图区,即每行 n 个、共 m 行,区号按行优先编号,且选定第 p 个区为当前活动区。
例7-4:在一个图形窗口中同时绘制正弦、余弦、正切、余切曲线,程序为:
x=linspace(0,2*pi,60); y=sin(x); z=cos(x); t=sin(x)./(cos(x)+eps); % eps为系统内部常数 ct=cos(x)./(sin(x)+eps); subplot(2,2,1); % 分成2×2区域且指定1号为活动区 plot(x,y);title('sin(x)'); axis ([0 2*pi -1 1]); subplot(2,2,2); plot(x,z); title('cos(x)'); axis ([0 2*pi -1 1]); subplot(2,2,3); plot(x,t); title('tangent(x)'); axis ([0 2*pi -40 40]); subplot(2,2,4); plot(x,ct); title('cotangent(x)'); axis ([0 2*pi -40 40]);结果如图7.4所示。
图7-4 subplot功能图:同一窗口内按2×2排列正弦、余弦、正切、余切四条曲线。
函数f(x)曲线:fplot函数则可自适应地对函数进行采样,能更好地反应函数的变化规律。fplot函数格式 fplot(fname,lims,tol),其中 fname 为函数名,以字符串形式出现,lims 为变量取值范围,tol 为相对允许误差,其系统默认值为 2e-3。
例7-5:绘制正弦、余弦曲线。
>> fplot('sin(x)',[0 2*pi],'-+') >> fplot('[sin(x),cos(x)]',[0 2*pi],1e-3,'·') % 同时绘制正弦、余弦曲线为绘制 f(x)=cos(tan(πx)) 曲线,可先建立函数文件 fct.m,其内容为:
function y=fct(x) y=cos(tan(pi*x));用 fplot 函数调用 fct.m 函数,其命令为:fplot('fct',[0 1],1e-4)
2.条形图形 例7-6:函数 bar(x,y) 可以绘制条形图形,如下列程序段将绘制条形图形。
x=[-2.5:0.25:2.5]; y=exp(-x.*x); bar(x,y); % 绘制条形图命令结果如图7.6所示。
3.填充图形:fill(x,y,'c') 函数用来绘制并填充二维多边图形,x 和 y 为二维多边形顶点坐标向量,字符‘c’规定填充颜色。下述程序段绘制一正方形并以黄色填充:
x=[0 1 1 0 0]; % 正方形顶点坐标向量 y=[0 0 1 1 0]; fill(x,y,'y'); % 绘制并以黄色填充正方形再如:
x=[0:0.025:2*pi]; y=sin(3*x); fill(x,y,[0.5 0.3 0.4]); % 颜色向量7.2 三维图像 plot3函数:最基本的三维图形函数为 plot3,它是将二维函数 plot 的有关功能扩展到三维空间,用来绘制三维图形。函数格式 plot3(x1,y1,z1,c1,x2,y2,z2,c2,…),其中 x1,y1,z1… 表示三维坐标向量,c1、c2… 表示线形或颜色。
例7.7:绘制三维螺旋曲线,其程序为:
t=0:pi/50:10*pi; y1=sin(t), y2=cos(t); plot3(y1,y2,t); title('helix'), text(0,0,0,'origin'); xlabel('sin(t)'), ylabel('cos(t)'), zlabel('t'); grid;图7.7 三维螺旋曲线。
mesh函数:mesh函数用于绘制三维网格图。在不需要绘制特别精细的三维曲面结构图时,可以通过绘制三维网格图来表示三维曲面。三维曲面的网格图最突出的优点是它较好地解决了实验数据在三维空间的可视化问题。
例7-8:下列程序绘制三维网格曲面图。
x=[0:0.15:2*pi]; y=[0:0.15:2*pi]; z=sin(y')*cos(x); % 矩阵相乘 mesh(x,y,z);结果如图7.8所示。
surf函数:surf 用于绘制三维曲面图,各线条之间的补面用颜色填充,surf 函数和 mesh 函数的调用格式一致。函数格式 surf(x,y,z),其中 x、y 控制X和Y轴坐标,矩阵 z 是由 x、y 求得的曲面上Z轴坐标。
例7-9:下列程序绘制三维曲面图形。
x=[0:0.15:2*pi]; y=[0:0.15:2*pi]; z=sin(y')*cos(x); % 矩阵相乘 surf(x,y,z); xlabel('x-axis'), ylabel('y-axis'), zlabel('z-label'); title('3-D surf');结果如图7.9所示:三维曲面图,各补面以颜色填充,坐标轴分别标注 x-axis、y-axis、z-label。
三维图形的控制 视点:视点位置可由方位角和仰角表示。方位角又称旋转角,为视点位置在XY平面上的投影与X轴形成的角度,正值表示逆时针,负值表示顺时针;仰角又称视角,为XY平面的上仰或下俯角,正值表示视点在XY平面上方,负值表示视点在XY平面下方。
从不同视点绘制三维图形的函数为 view,view(az,el) 中的 az 为方位角,el 为仰角。通过系统提供的多峰函数 peaks 的绘制例子,可进一步说明视点对图形的影响,以及 view(az,el) 函数的使用。
例7-10:不同视角图形。
p=peaks; % 系统提供的多峰函数 subplot(2,2,1); mesh(peaks,p); view(-37.5,30); % 指定子图1的视点 title('azimuth=-37.5,elevation=30') subplot(2,2,2); mesh(peaks,p); view(-17,60); % 指定子图2的视点 title('azimuth=-17,elevation=60') subplot(2,2,3); mesh(peaks,p);view(-90,0); % 指定子图3的视点 title('azimuth=-90,elevation=0') subplot(2,2,4); mesh(peaks,p); view(-7,-10); % 指定子图4的视点 title('azimuth=-7,elevation=-10')结果如图7.10所示。
图7.10 不同视角图形:同一多峰函数 peaks 在四组不同方位角与仰角下的网格图对比。
7.3 图形句柄 句柄:在MATLAB系统中,绘图命令产生的每一个部分称为图形对象,系统在创建每一个对象时,都为该对象分配唯一的一个值,称其为句柄,因此句柄就是图形对象标识符。
对象、句柄以及图形对象等概念其实质是统一的,系统将每一个对象按树型层次结构组织起来,这些对象包括根对象(通常为计算机屏幕)、图形窗口、坐标系统、线条、曲面、文本串、用户界面控制等。
根对象:根对象可包含一个或多个图形窗口对象,而一个图形窗口对象又可包含一组或多组坐标系子对象,线条、文本等其它对象都是坐标系的子对象。所有创建对象的函数当父对象不存在时,都会自动创建它。
计算机屏幕作为根对象自动建立,其句柄值为0;而 Hf_f=figure 命令则建立图形窗口对象,并返回它的句柄值给变量 Hf_f。图形窗口的句柄为一整数,并显示在该窗口的标题栏,其它图形对象的句柄为浮点数。MATLAB提供了一系列与句柄操作有关的函数,如 gcf、gca 等。为便于识别,用大写字母开头的变量表示句柄,如 Hf_f 等。
图像类型
图像度量指标
(3)图像文件的大小:指一幅图像在计算机中保存时所占用的磁盘空间,其大小与所用的颜色模式有关。灰度图像中的每一个灰度像素只占用一个字节(8位),RGB图像中红、绿、蓝各占用一个字节。另外,图像文件的大小也直接与其分辨率有关,原因是当分辨率增加时,一幅图像所包含的像素量急剧增加。
7.4 图像处理 图像的输出:(1)以图像文件的形式输出,应用函数 imwrite,格式是:
imwrite(A,'filename','fmt') imwrite(X,map,'filename','fmt') imwrite(…,'filename') imwrite(…,Param1,Val1,Param2,Val2,…)命令中各参数含义可以参照前面 imread 命令,也可在MATLAB命令窗口输入 help imwrite 来获得提示信息。imwrite 获得的文件存放在MATLAB的 work 文件夹中。
(2)以图像的形式输出,函数为 image(imshow)。image 的格式是:
image(Z) image(x,y,Z) image(…,'PropertyName',PropertyValue,…) image('PropertyName',PropertyValue,…) handle=image(…)其中,x、y 分别表示图像显示位置的左上角坐标,Z 表示所需显示的图像。函数 imagesc 与 image 函数类似,但是可以自动标度输入数据。关于 image 中各参数的意义可以使用 help image 查询。
图像显示:MATLAB的图像显示函数主要有 imshow、colorbar 和 subimage 三个。例7-11:按256灰度级显示。
I=imread('moon.tif'); imshow(I,256) colorbar结果如图7.11所示。
图7.11 图像256灰度级显示:图像细节层次丰富,右侧 colorbar 给出灰度与颜色的对应关系。
例7-12:按8灰度级显示。
I=imread('moon.tif'); imshow(I,8) colorbar imshow(BW) % 显示二值图像结果如图7.12所示。
例7-13:显示二值图像。
BW=imread('circles.tif'); imshow(BW);结果如图7.13所示。
例7-14:取反显示二值图像。
BW=imread('circles.tif'); imshow(~BW);结果如图7.14所示。
例7-15:多图显示多个调色板的图像。
load trees; [x2,map2]=imread('forest.tif'); subplot(2,1,1), subimage(X,map); colorbar subplot(2,1,2), subimage(x2,map2); colorbar结果如图7.15所示。
图7.21 多图显示:上、下两个子图分别以各自调色板显示,并各带一条颜色条。
阅读材料 1.注释的技巧:选中你要加注释的内容,然后选择工具菜单「text|comment」就可以了;如果要把注释变为语句,同样选中要转变的语句,然后用鼠标选择「text|uncomment」就可以了,用键盘的快捷键是 Ctrl+R。
或者选中你要加注释的内容,右击鼠标选择「comment」;如果要把注释变为语句,同样选中要转变的语句,然后右击鼠标选择「uncomment」取消注释,用键盘的快捷键是 Ctrl+T。
2.figure命令新建一个绘图窗口:figure 可以打开一个空的绘图窗口,接下来的绘图命令可以将图画在它里面,而不会覆盖以前的绘图窗口。当有多个 figure 窗口时,在命令窗口中执行如 plot 等命令将覆盖当前 figure 窗口中的对象,所谓的当前 figure 窗口也就是最后一次查看的窗口(可以用命令 gcf 得到)。
figure(N) 将编号为N的窗口置为当前 figure,出现在所有窗口的最前面;如果该窗口不存在,则新建一个编号为N的空白 figure。
3.将MATLAB绘制的三维网格图贴到word里:如果需要位图,好处是所见即所得,坏处是图像精度差,不能放缩。
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}