matlab 第6章 图像绘制与图像处理

目录

一、绘制二维曲线
二、极坐标与复平面坐标绘图
三、绘制三维图形
四、绘制统计图形
五、简易绘图方法
六、图像处理介绍

一、绘制二维曲线

多项式拟合

polyfit(x,y,n):用n次多项式拟合x与y

x=0:0.1:pi;
y1=sin(x);
plot(x,y1,'LineWidth',8);        %绘制sin(x)的曲线(看备注)
hold on;                         %不停笔,在原图上继续用plot画图
p=polyfit(x,y1,5);               %将x,y关系用5次多项式拟合
y2=polyval(p,x);                 %polyval:求出多项式p在x处的拟合值,相当于p(x)
plot(x,y2,'r-','LineWidth',2);   %画拟合多项式曲线  
legend('\bfsin','\bfpoly');      %做标记,  \bf -- Bold font粗体

在这里插入图片描述

regress函数

  • B = regress(Y,X)

  • [B,BINT] = regress(Y,X)

  • [B,BINT,R] = regress(Y,X

  • [B,BINT,R,RINT] = regress(Y,X)

  • [B,BINT,R,RINT,STATS] = regress(Y,X)

    参数解释:

  • B:回归系数,是个向量(“the vector B of regression coefficients in the linear
    model Y = X*B”)。

  • BINT:回归系数的区间估计(“a matrix BINT of 95% confidence intervals for B”)。

  • R:残差( “a vector R of residuals”)。

  • RINT:置信区间(“a matrix RINT of intervals that can be used to diagnose
    outliers”)。

  • STATS:用于检验回归模型的统计量。有4个数值:判定系数R^2,F统计量观测值,检验的p的值,误差方差的估计。

  • ALPHA:显著性水平(缺少时为默认值0.05)。

举例:
目标函数:y=Ax12+Bx12+Cx1+Dx2+Ex1*x2+F
(这是一个二次函数,两个变量,大写的字母是常数)

 %导入数据
    y=[7613.51  7850.91  8381.86  9142.81 10813.6 8631.43 8124.94 9429.79 10230.81 
    ... 10163.61 9737.56 8561.06 7781.82 7110.97]';
    x1=[7666 7704 8148 8571 8679 7704 6471 5870 5289 3815 3335 2927 2758 2591]';
    x2=[16.22 16.85 17.93 17.28 17.23 17 19 18.22 16.3 13.37 11.62 10.36 9.83 9.25]';
    X=[ones(size(y)) x1.^2 x2.^2 x1 x2 x1.*x2];
   
    %开始分析
    [b,bint,r,rint,stats] = regress(y,X);

结果截图:
在这里插入图片描述

b为对应的参数 b(1)为F(最后那个常数项) ,b(2)为A(第一个参数),b(3)为B,b(4)为C,b(4)为D,b(5)为E。

绘图相关函数

  • figure:新建绘图窗口
    – h=figure:新建窗口,返回窗口的句柄h

  • axes:新建坐标系
    – h=axes:新建坐标系,返回其句柄h

  • set(句柄, 属性名, 属性值)
    – 设置对象的属性:

  • 变量=get(句柄, 属性名)
    – 取得对象的属性:

  • 另法:先绘图,再在图形窗口中,找到菜单:edit-> Axes Properties,坐标系下方property Editor中点击Inspector…按钮,打开Property Inspector窗口,左/右是属性名/值

  • xlabel(标签):x轴标签

  • ylabel(标签):y轴标签

  • title(标题):图像标题

  • legend(曲线1名,曲线2名,…):给曲线加标注

  • grid on/off:加/去网格

  • box on/off:加/去外框

  • text(x,y,字符串):在指定位置加上文字

  • 可使用特殊文字: \leftarrow, \rightarrow, \pi

举例
例题1:

要求:X: -3pi~3pi,
背景黄色,
y轴有网格,
曲线8点宽、红色,
x=pi/2处作标记
在这里插入图片描述

x1=(-3:0.01:-0.01)*pi;
x2=(0.01:0.01:3)*pi;
x=[x1,0,x2];
y=[sin(x1)./x1,1,sin(x2)./x2];
h1=plot(x,y);
set(h1,'LineWidth',8);
set(h1,'Color','red');
h2=gca;  %gca=get current axes=取当前坐标系的句柄
set(h2,'XGrid','off');
set(h2,'YGrid','on');
h3=get(h2,'Parent');   %父对象:包含它对象:包含坐标的对象就是窗口
set(h3,'Color','Yellow');  %窗口为黄色:窗口上坐标系:默认白色底
text(pi/2,2/pi,'\leftarrow sinc(x)','FontSize',20);

在这里插入图片描述
例题2:
在这里插入图片描述

x=0:0.01:4;
y1=cos(2.^x)-0.5; y2=sin(4*x);
figure;
plot(x,y1,x,y2,'r--');
% gca: 获得当前坐标轴句柄
set(gca,'YTick',-1.5:0.25:1);
xlabel('输入'); ylabel('输出');
title('我的曲线图!');
legend('y1=cos(2.^x)-0.5', 'y2=sin(x*4)');
grid on;

scatter函数:散点图

x=[2,3,4,5,7,8,10,11,14,15,18,19]';
y=[106.42,109.20,109.58,109.50,110.00,109.93,110.49,110.59,110.60,110.83,111.00,111.20]'; 
scatter(x,y,'*'); % 实验数据*标记

在这里插入图片描述
scatter(x,y)= plot(x,y,‘o’)

scatter(x,y,’’) = plot (x,y,’’)
x=[2,3,4,5,7,8,10,11,14,15,18,19]';
y=[106.42,109.20,109.58,109.50,110.00,109.93,110.49,110.59,110.60,110.83,111.00,111.20]'; 
plot(x,y,'*'); % 实验数据*标记

在这里插入图片描述

plot函数

•plot(X,Y)

  • –X,Y为等长n的向量:以(xi,yi)为横、纵坐标描n个点并用直线段连接起来

  • –X为长n向量,Y为行或列数为n矩阵:若Y的另一维为m,则基于(X, Y的等长维向量)绘制m条曲线,每条曲线描n个点

                    X=n*1向量,Y=n*m矩阵:看待把Y=m个列向量Y1,Y2,Ym
                    把(X,Y1)画一条曲线
                    把(X,Y2)画一条曲线
                    。。。
                    把(X,Ym)画一条曲线
                    共画m曲线,一个图上
    
  • –X,Y同为mxn矩阵:以(X的列向量, Y的列向量)为横、纵坐标绘制n条曲线,每条曲线描m个点

                   X=n*m矩阵:看待把X=m个列向量X1,X2,Xm,
                  Y=n*m矩阵:看待把Y=m个列向量Y1,Y2,Ym
                   把(X1,Y1)画一条曲线
                 把(X2,Y2)画一条曲线
                 。。。
                 把(Xm,Ym)画一条曲线
                 共画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');

在这里插入图片描述
•plot(Y)

  • –Y为长n的实向量:=》 plot(1:n’, Y)
  • –Y为长n的复向量:=》plot(real(Y), imag(Y))
  • –Y为mxn实矩阵:=》plot(1:m’, Y的列向量) :
    n条曲线(描m点)
  • –Y为mxn复矩阵: =》plot(real(Y的列向量), imag(Y的列向量)):
    n条曲线(描m点)

•plot(X1, Y1, X2, Y2, …, Xn, Yn)

      –调用plot(Xi,Yi)共n次

•plot(…, 点线色的参数设置 , …)

     –定义点/线的样式:颜色、形状、大小…

•plot(…, ‘属性名’, 属性值, …)

      –属性:属于某个对象的性质

      –比如:人的属性有身高、体重、肤色……

      –定义曲线的某个属性:名=值

例1

x=0:0.02:8;
y=sin(2*x); % 点函数特别适合生成绘图数据
plot(x,y); % X, Y 为等长的向量

在这里插入图片描述

画完图后,可以调整窗口大小,调节图形的大小
编辑->复制图形
word->粘贴

作各种各样的图形修饰
点曲线、坐标系、图形:改曲线、坐标系、图形的属性(参数)
参数设置:手工作,编程作
属性名:Ylim=[-1.1,1.1]

例2

x=0:0.01:8;
y1=x.^2-3*x;
y2=cos(x.^2);
figure;% 新建一个绘图窗口
plot(x,y1,x,y2);
plotyy函数:左右两边都有y-轴 ​​​​​​​​​​​​​​​​
  • plotyy(x1,y1,x2,y2)
    – x1,y1用左边y轴刻度
    – x2,y2用右边y轴

  • [ax,h1,h2]=plotyy(…)
    – ax为向量,其两个元素为左、右两个坐标系的句柄,
    – h1/h2为绘制的两条曲线的句柄

x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
[ax,h1,h2] = plotyy(x,y1,x,y2);
set(get(ax(1),'Ylabel'),'String','左边Y轴');
set(get(ax(2),'Ylabel'),'String','右边Y轴');
对数坐标轴
  • semilogx(x,y):x轴刻度用10的幂,y轴正常
  • semilogy(x,y):y轴刻度用10的幂,x轴正常
  • loglog(x,y):两个坐标轴的刻度用10的幂

比如:10-2与10-1,刻度显示10^-1.9, 10^-1.8, ……, 10^-1.1,所以刻度不均匀

例题:画出y1=lnx+x,y2=x+5 在[10-2,101]中半对数图像。

% x=logspace(-2,1,100);
x=0.01:0.1:10;
y1=x+5;
y2=log(x)+x;
semilogx(x,y1,x,y2);

在这里插入图片描述

subplot:画子图(必考)

  • 在一张图/窗口中画多个子图
    – 把绘图区划分成m行n列个子区域,每个区域都可以放上一张子图
    – 子区域按先行后列编号:1 ~ mxn
    – 也可以几个相邻区域合并放一张子图
  • subplot(m,n,p)
    – 以下在编号为p的子区域画图
  • subplot(m,n,[p1,p2,…])
    –将编号为p1,p2,…的子区域合并,再在这里画图
x=-pi:pi/20:pi; % x=(-1:0.05:1)*pi;
subplot(2,3,1); plot(x,cos(x)); title('1.cos');
subplot(2,3,2); plot(x,sin(x)); title('2.sin');
subplot(2,3,3); plot(x,abs(x)); title('3.abs');
subplot(2,3,4); plot(x,floor(x)); title('4.floor');
subplot(2,3,[5,6])   % 合并5, 6plot(x,exp(x)); title('5.exp(x)');

在这里插入图片描述

patch:画多边形

  • patch(X,Y,C)
    – 画一个/多个多边形
    – X,Y:定义多边形的顶点
    – C:定义颜色
    在这里插入图片描述
x=[0 1 3 5 6 4 3 0];
y=[1 0 1 0 2 2 3 1];
patch(x,y,'b');

在这里插入图片描述



二、极坐标(必考)与复平面坐标绘图

极坐标系

  • 直角坐标(x, y)

    –当曲线用y=f(x)表达简单时

  • 极坐标(ρ, θ):极径、极角

    – 当曲线用ρ=f(θ)表达简单时

  • polar(theta,rho):给定(θ,ρ)向量绘图
    与plot只是描点的方式不同

  • polar(theta,rho,LineSpec):设置参数

例1
四叶草:

x=0:0.1:2*pi;
polar(x,sin(2*x));

在这里插入图片描述
为什么4叶?
θ=x在0~90时,ρ=sin(2x)>0,图在第一象限
θ=x在90~180时,ρ=sin(2x)<0,图在第四象限
任意叶怎么做?

六叶草:

x=0:0.1:4*pi;
polar(x,sin(1.5*x),'r--s');

在这里插入图片描述

三、绘制三维图形

plot3:画三维曲线

  • plot3(X1, Y1, Z1, X2, Y2, Z2, …)

    – 与plot类似:描点、连线,只多一个维度

t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
grid on
axis square
box on;
text(-1.5,-1.3,0,'螺旋线(helix)');
title('三维曲线绘图举例');
xlabel('sin(x)');ylabel('cos(x)'),zlabel('x');

在这里插入图片描述

surf:绘制三维曲面图

  • surf(x,y,z)
  • 当x,y,z为mxn矩阵时:会在三维坐标系中描出mxn个三维点,然后基于(x,y)、
    (x+h,y)、(x,y+h)和(x+h,y+h)四个点作一个小曲面,颜色用这四个点的z值或平均z值来决定
  • 当x为n向量,y为m向量,z为mxn矩阵时:将x视为行向量,复制m行,可得到mxn矩阵。同样地,将y视为列向量,复制n列,也得到mxn矩阵。

画球面

[X,Y,Z]=sphere(30);    %球半径为131x31球面网格
surf(X,Y,Z); 
xlabel('x'), ylabel('y'), zlabel('z');
title('半径为1的球面');

在这里插入图片描述
画椭球面

clear;
a=2;b=2;c=1;
[x,y,z]=ellipsoid(0,0,0,a,b,c,50);
surf(x,y,z);
axis equal;
xlabel('x');
ylabel('y');
zlabel('z');

在这里插入图片描述

mesh: 绘制三维网格曲面图

绘制三维曲面图步骤:

1): 对数据进行处理,得到三维曲面上的点坐标组

    方法有:
    1、将自变量离散, x=xmin:dx:xmax        y=ymin:dy:ymax
    2、利用meshgrid 指令 生成 x-y 矩阵

2):利用函数z=f(x,y) 计算函数值

3): 绘图。 mesh: 绘制三维网格曲面图 surf :绘制三维颜色填充图
例1

plot3(x1,y1,z1,S1,x2,y2,z2,S2)

meshgrid

创建网格矩阵原理和方法

如绘制: z=x*exp(-x2-y2) 的图形

% 空间网格绘制;mesh
[x,y]=meshgrid(-2:0.2:2);
z=x.*exp(-x.^2-y.^2);
mesh(x,y,z)
colormap([0 0 1]) % 颜色

view(30,20); % 角度控制

在这里插入图片描述
增加代码

meshs(x,y,z)

在这里插入图片描述

meshz(x,y,z)

在这里插入图片描述

contour 和countour3 :等高线的绘制

  • contour(x,y,z):x,y,z与surf/mesh相同:同为mxn矩阵,或n-向量/m-向量/mxn矩阵。
    – 等高线的个数与定值由z矩阵确定
  • contour(z) == contour(1:n,1:m,z),m/n为z矩阵的行数和列数
  • contour(…, n):画n条等高线
  • contour(…, v):等高线的高度由向量v给定
  • contour3(……):画3维等高线
[x,y]=meshgrid(-2:0.2:2);
z=x.*exp(-x.^2-y.^2);
subplot(1,2,1)
contour(x,y,z,20)
subplot(1,2,2)
contour3(x,y,z,20)

在这里插入图片描述

contour3(x,y,z,80);

在这里插入图片描述

四、绘制统计图形

bar、bar3d:画条形图

  • bar/barh/bar3/bar3h:画垂直、水平、垂直三维、水平三维条形图
  • bar(x,Y)
    – x,Y同为向量,x递增,在每个x处画一个垂直条
    –x递增向量,Y矩阵,在每个x处画多个垂直条
  • bar(Y) == bar(1:length(Y), Y)bar(1:size(Y,1), Y)
  • bar(…, n):n为条宽
  • bar(…, ‘group’/‘stack’):组合条/堆叠条

例子
某年七月11-15日连续五天的温度数据用矩阵Y表示,行表示日子,列分别为平均温度、最高温度和最低温度

x=11:15;
y=[35 30 42;32 31 45;30 32 41;34 38 42;29 32 43]; 

bar(x,y);
在这里插入图片描述
barh(x,y);
在这里插入图片描述
bar3(x,y);
在这里插入图片描述
bar3h(x,y);
在这里插入图片描述
bar(x,y,‘stack’);
在这里插入图片描述

pie:画饼形图

  • pie(x,explode,labels);
  • pie3(x,explode,labels);
  • 从0点钟方向,逆时钟方向绘图
  • x为向量(矩阵看成一个列向量)
  • explode:与x同长的0/1向量
    – 为1的扇区从饼形图中稍稍分离出来一点
  • labels:与x同长的细胞,每个元素为一个字符串,作为每个扇区的标签
  • x = [2 3 0.5 4.5 8];
  • explode = [0 1 0 1 0]; %第2、4扇区分离
pie(x,explode);

在这里插入图片描述

pie(x,explode,{'数1','数2','数3','数4','数5'});

在这里插入图片描述

pie3(x,explode);

在这里插入图片描述

五、简易绘图方

t:一元函数简易绘图

  • ezplot(f);
  • ezplot(f,[min,max]);
  • ezplot(f,[xmin,xmax,ymin,ymax]);
  • ezplot(x,y);
  • ezplot(x,y,[tmin,tmax]);
  • f:y=f(x)显函数,f(x,y)=0定义的隐函数
    – 可用字符串定义,也可用函数句柄定义
  • x,y:单参数t方程定义的隐函数
    默认的x范围:-2pi~2pi

例1

ezplot('x*x');

在这里插入图片描述

ezplot('x*x+y*y-1',[-1,1,-1,1]);

在这里插入图片描述

ezplot('cos(t)','sin(t)');

在这里插入图片描述

例2

fh=@(x,y)(x.^2 + y.^2-1);
ezplot(fh);

在这里插入图片描述
例3

ezplot('exp(x)*cos(y)+y^2/(1+cos(x*y))');
colormap([0 0 1]);

在这里插入图片描述

ezsurf:二元函数曲面简易绘图

  • ezsurf(f);

  • ezsurf(f,[min,max]);

  • ezsurf(f,[xmin,xmax,ymin,ymax]);

  • f:z=f(x,y)显函数

  • ezsurf(x,y,z);

  • ezsurf(x,y,z,[min,max]);

  • ezsurf(x,y,z,[smin,smax,tmin,tmax]);

  • x,y,z:双参数s,t方程定义的隐函数

  • 默认的x,y范围:-2pi~2pi

ezsurf('sqrt(1+x^2+y^2)');

在这里插入图片描述

ezsurf('real(atan(x+i*y))');

在这里插入图片描述

ezsurfc('y/(1 + x^2 + y^2)',[-5,5,-2*pi,2*pi],35);

在这里插入图片描述

ezmesh:二元函数网格简易绘图

  • ezmesh(f);
  • ezmesh(f,[min,max]);
  • ezmesh(f,[xmin,xmax,ymin,ymax]);
  • f:z=f(x,y)显函数
  • ezmesh(x,y,z);
  • ezmesh(x,y,z,[min,max]);
  • ezmesh(x,y,z,[smin,smax,tmin,tmax]);
  • x,y,z:双参数s,t方程定义的隐函数
  • 默认的x,y范围:-2pi~2pi
ezmesh('sqrt(1+x^2+y^2)');

在这里插入图片描述

  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值