MATLAB的基本运算及基于MATLAB的图像滤波设计.docx
- 文档编号:15074444
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:42
- 大小:2.22MB
MATLAB的基本运算及基于MATLAB的图像滤波设计.docx
《MATLAB的基本运算及基于MATLAB的图像滤波设计.docx》由会员分享,可在线阅读,更多相关《MATLAB的基本运算及基于MATLAB的图像滤波设计.docx(42页珍藏版)》请在冰点文库上搜索。
MATLAB的基本运算及基于MATLAB的图像滤波设计
学号:
课程设计
题目
MATLAB的基本运算及基于MATLAB的图像滤波设计
学院
专业
班级
姓名
指导教师
年
月
日
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
题目:
一、必做题:
MATLAB的基本运算
二、选做题:
基于MATLAB的图像滤波设计
初始条件:
(1)Matlab应用软件的基本知识以及基本操作技能
(2)高等数学、线性代数等基础数学中的运算知识
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
一、采用MATLAB选用适当的函数或矩阵进行如下计算
(1)极限的计算、微分的计算、积分的计算、级数的计算、求解代数方程、求解常微分方程;
(2)矩阵的最大值、最小值、均值、方差、转置、逆、行列式、特征值的计算、矩阵的相乘、右除、左除、幂运算;
(3)多项式加减乘除运算、多项式求导、求根和求值运算、多项式的部分分式展开、多项式的拟合、插值运算。
二、
(1)读入图像并分别加入高斯噪声、椒盐噪声和乘性噪声,并比较结果。
(2)设计巴特沃斯低通滤波对图像进行低通滤波处理,显示结果。
(3)设计高斯高通滤波器对图像进行处理,显示结果。
(4)采用维纳滤波和中值滤波对图像进行处理,显示结果
时间安排:
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
本课程设计首先介绍了matlab在高等数学中微机分的一些基本运算,线性代数中矩阵的一些基本计算以及多项式中的计算,采用具体举例,然后根据具体的例子建模,然后编写m文件,然后实际调试运行来得出结果的方式来整理报告。
其次,本课程设计介绍了基于MATLAB的图像滤波的相关运算。
MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。
它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。
根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或编程以完成各自的计算。
MATLAB中集成了功能强大的图像处理工具箱。
由于MATLAB语言的语法特征与C语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式,而且这种语言可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以MATLAB在图像处理的应用中具有很大的优势,在图像滤波中有着重要的作用。
MATLAB的基本运算及基于MATLAB的图像滤波设计
1.前言
1.1MATLAB产生的历史背景
MATLAB是美国MathWorks公司生产的一个为科学和工程计算专门设计的交互式大型软件,是一个可以完成各种精确计算和数据处理的、可视化的、强大的计算工具。
它集图示和精确计算于一身,在应用数学、物理、化工、机电工程、医药、金融和其他需要进行复杂数值计算的领域得到了广泛应用。
它不仅是一个在各类工程设计中便于使用的运算工具,而且也是一个在数学、数值分析和工程计算等课程教学中的优秀的教学工具,在世界各地的高等院校中十分流行,在各类工业应用中更有不俗的表现。
MATLAB可以在几乎所有的PC机和大型计算机上运行,适用于Windows、UNIX等多种系统平台。
MATLAB名称是由两个英文单词Ma~ix和Laboratory的前二个字母组成。
20世纪70年代后期,美国新墨西哥大学计算机系主任Cleve.Moler教授为了便于教学,减轻学生编写Fortran程序的负担,为两个矩阵运算软件包Linpack和Eispack编写了接口程序,这也许就算MATLAB的第一个版本。
1984年,在JackLittle(也称JohnLittle)的建议推动下,由Little、Moler、SteveBangert三人合作,成立rMathWorks公司,同时把MATLAB正式推向市场。
从那时开始,MATLAB的源代码采用C语言编写,增加了数据图形的可视化功能。
1993年,MathWorks公司推出了MATLAB的4.0版本,系统平台由DOS改为Windows,推出了功能强大的、可视化的、交互环境的用于模拟非线性动态系统的工具Simulink,为MATLAB进行实时数据分析、处理和硬件开发而推出了与外部直接进行数据交换的组件,为MATLAB能融科学计算、图形可视、文字处理于一体而制作了Notebook,MathWorks使MATLAB成为国际控制界公认的标准计算软件。
MATLAB拥有了更丰富的数据类型和结构,更好的面向对象的快速精美的图形界面,更多的数学和数据分析资源,MATLAB工具也达到了25个,几乎涵盖了整个科学技术运算领域。
在大部分大学里,应用代数、数理统计、自动控制、数字信号处理、模拟与数字通信、时间序列分析、动态系统仿真等课程的教材都把MATLAB作为必不可少的内容。
1.2MATLAB应用领域
MATLAB的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。
附加的工具箱(单独提供的专用MATLAB函数集)扩展了MATLAB环境,以解决这些应用领域内特定类型的问题。
MATLAB产品族可以用来进行以下各种工作:
(1)数值分析
(2)数值和符号计算
(3)工程与科学绘图
(4)控制系统的设计与仿真
(5)数字图像处理技术
(6)数字信号处理技术
(7)通讯系统设计与仿真
(8)财务与金融工程
MATLAB的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。
附加的工具箱(单独提供的专用MATLAB函数集)扩展了MATLAB环境,以解决这些应用领域内特定类型的问题。
1.3MATLAB中数学运算的重要意义
通过上文我们已经知道MATLAB的应用对跟数字有关的领域几乎是无所不及,随着科技的发展尤其是计算机科学的问世,传统人工计算工作已经几乎全部交由计算机来工作了,而MATLAB最强大的地方正是在于它的计算功能,返璞归真,几乎所有的自然科学都是以数学为基础的,所以它的数学运算功能也就尤其重要了。
2.MATLAB基本运算的编程及运行结果
2.1基础微积分计算
微积分的计算可以说是数学的基础,关于基础的微机分计算主要有求函数的极限,微分运算,积分运算,级数的计算,代数的求解,以及常微分方程的求解,下面分别介绍。
2.1.1极限的计算
MATLAB中极限函数limit格式如下:
limit(F,x,a);limit(F,a);limit(F);limit(F,x,a,'right');limit(F,x,a,'left')
其中F表示的是函数式,x表示求极限的变量,a表示的是变量取的值,left或right表示是取左极限还是右极限。
例:
求
;
分析:
这是一个典型的求极限的题目,题目中涉及了两个变量,故在程序开始应该先定义两个变量,然后直接利用函数limit编程计算。
示例程序如下:
symsxy
limit(limit(log(2*x+exp(y))/sqrt(2*x*x+y*y),x,2),y,0)
运行结果如下:
2.1.2微分的计算
MATLAB中微分函数diff格式如下:
Y=diff(X);Y=diff(X,n);Y=diff(X,n,dim)
其中X表示待微分的变量,n表示n次微分,第三式表示沿着定维dim的n阶微分。
例:
求
sin(3x+5)的微分;
分析:
微分运算能直观的显示函数值的变化快慢,在平时计算中常常反映变量的变化对函数值的影响大小这是一个简单的一阶微分式子,可以直接写定义变量然后求结果。
示例程序如下:
symsxydy
y=sqrt(5)/3*2*sin(3*x+5);
dy=diff(y)
运行结果如下:
2.1.3积分的计算
MATLAB中积分常用函数为int,格式如下:
int(f,x,a,b)
其中f表示待积分的函数,x表示积分变量,而a,b则分别表示积分起始终止点。
例:
求下列变上限积分
分析:
积分运算大量运用于求面积体积等,此处选用的是一个变上限积分,属于有些典型的积分例子,但任然是根据函数格式就可以写出程序。
示例程序如下:
symskxf;
y=(2+3*k)^(1/2);
f=int(y,k,x,x^3)
运行结果如下:
2.1.4级数的计算
MATLAB中级数常用函数为symsum,格式如下:
r=symsum(s);r=symsum(s,v);r=symsum(s,a,b);r=symsum(s,v,a,b)
函数表达的意义是表达式s关于变量v从a到b求和。
例:
计算级数
的值
分析:
对于级数我们最先接触的就是常数项无穷级数,因为技术结果一般较复杂,所以用simple求解最简形式,还有Inf为无穷大。
示例程序如下:
symsn;
simple(symsum(3/n^3,1,Inf))%simple求解最简形式,Inf为无穷大
运行结果如下:
2.1.5求解代数方程
代数方程分为很多种,有简单有复杂,方法也有很多。
一般多项式方程的根可为实数,也可为复数,可用MATLAB符号工具箱中的solve()函数,MATLAB中求解代数方程常用函数solve格式如下:
[x,…]=solve(eqn1,eqn2,…,eqnn,’x,…’)
其中eqn表示的是式子,x等表示的是变量。
例:
求解方程5x+2=12
分析:
为了计算的简单,同时为了避免需要验证的麻烦,这里选用了基础的一元一次方程,直接用语句描述即可。
示例程序如下:
symsx
[x]=solve('5*x+2=12','x')
运行结果如下:
2.1.6求解常微分方程
未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。
如果未知函数是一元函数,称为常微分方程。
MATLAB中主要用dsolve求符号解析解。
dsolve的基本格式是:
s=dsolve(‘方程1’,‘方程2’,…,’初始条件1’,’初始条件2’…,’自变量’)
例:
求解微分方程
求解析解。
分析:
求解此微分方程的解析解直接采用dsolve即可。
Dsolve示例程序如下:
symsyk%定义变量
s=dsolve('Dy=-2*y+3*k+1','y(0)=1','k');%程序主体部分
simplify(s)%化简函数
运行结果如下:
2.2矩阵的基本计算
矩阵计算是线性代数中的核心内容,其对于整个数学系统的计算方面的意义是十分巨大的,集中它的基本运算包括最大值、最小值、均值、方差、转置、逆、行列式、特征值的计算、矩阵的相乘、右除、左除、幂运算等等,下面将具体介绍。
矩阵的运算都是要以矩阵为基础的,本报告中决定选用一组矩阵来完成几乎全部可以完成的计算,那么首先就得生成矩阵了。
矩阵的定义和分配可以有多种方法。
最简单的方法是有方括号[]包围的逐行给定元素。
若定义一个标量,则方括号就不需要了。
相同行中的元素是由一行或多个空格‘’或一个逗号‘,’分隔,列由分号‘;’或回车键分隔。
没有结尾分号的每个命令在屏幕上显示出其结果。
若结尾带分号,就执行计算,但计算结果并不显示。
如定义3×3矩阵如下:
则在命令窗口输入:
A=[254;537;8610]
屏幕显示结果为:
同上依次输入:
B=[-89-7;562;-1513]就可以得到B矩阵(如下)。
2.2.1矩阵的最大值、最小值
MATLAB中max函数可以表示求每一列的最大值,那么经过分析可以知道,先求出每一列的最大值然后求出这些最大值里面的最大值,下面以A矩阵为例。
示例程序如下:
y=max(A)
x=max(y)
运行结果如下:
对比A中数值发现结果是正确的。
MATLAB中求最小值的函数为min,求解思路与求最大值思路类似,仍然以矩阵A为例。
示例程序如下:
y=min(A)
x=min(y)
运行结果如下:
对比A中数值发现结果是正确的。
2.2.2矩阵的均值、方差
MATLAB中求解矩阵均值的函数是mean,它的具体用法如下:
mean(A,1)表示对列取平均,mean(A,2)表示对行取平均,mean(A)则默认为mean(A,1)。
下面以矩阵B分别举例,程序示例如下:
a=mean(B)
b=mean(B,2)
运行结果如下:
观察可知,a,b分别显示出了矩阵行列的均值。
如果想求矩阵的均值可以进行2次操作。
示例程序如下:
c=mean(a)
运行结果如下:
可以观察到c的值就是矩阵b所有值的均值。
MATLAB中求解矩阵方差的函数是var,它的常用格式是V=var(X),如果X是一个矩阵,var(X)返回一个包含矩阵X每一列方差的行向量。
下面还是以矩阵B来示例,程序如下:
d=var(var(B))
运行结果如下:
2.2.3矩阵的转置
矩阵的一个重要的运算是转置,如果A是一个实数矩阵,那么它被转置时,第1行变成第1列,第2行变成第2列,依此类推,一个m×n矩阵变为一个n×m矩阵。
如果矩阵是方阵,那么这个矩阵在主对角线反映出来。
MATLAB中求转置的函数是conj,以A为例,编程如下:
e=conj(A’)
运行结果如下:
可以观察到矩阵A转置成了矩阵e。
2.2.4矩阵的逆、行列式
实际中求矩阵的逆跟行列式均要求矩阵是方阵,MATLAB中求逆的函数是inv,格式为Y=inv(X),求矩阵的函数是det,格式为Y=det(X)。
下面仍以矩阵A为例来编程示例,如下:
f=inv(A)
运行结果如下:
编程如下:
c=det(A)
运行结果:
2.2.5矩阵特征值的计算
矩阵的特征值的求解,就是找到方程组的解:
其中λ是一个标量,x是一个长度为n的列向量。
标量λ是A的特征值,x是相对应的特征向量。
对于实数矩阵A来说,特征值和特征向量可能是复数。
一个n×n的矩阵有n个特征值,表示为
。
求矩阵的特征值和特征向量可用eig函数。
Eig(A)求包含矩阵A的特征值的向量。
[V,D]=eig(A)产生一个矩阵A的特征值在对角线上的对角矩阵D和矩阵
V,它的列是相应的特征向量,,满足AV=VD,下面以矩阵A为例来演示。
编程如下:
[V,D]=eig(A)
运行结果如下:
2.2.6矩阵的相乘
假定有两个矩阵A和B,若A为m×n矩阵,B为n×p矩阵,则C=A×B为m×p矩阵。
元素
是A的第i行和B的第j列的点积。
对于方阵,也定义了积BA,但其结果通常与AB不同。
MATLAB中求矩阵的乘积直接用符号*即可,下面以A、B矩阵为例来分别演示AB与BA区别。
示例程序如下:
c=A*B
d=B*A
运行结果如下:
对比可以知道,AB与BA的结果是有区别的。
2.2.7矩阵右除和左除
在MATLAB中,有两个矩阵除法的符号,左除“\”和右除“/”。
如果A是一个非奇异方阵,那么A\B和B/A对应A的逆与B的左乘和右乘,即分别等价于命令inv(A)*B和B*inv(A)。
可是,MATLAB执行它们时是不同的,且在MATLAB中求解一个系统用左除比用逆和乘法所需的运算次数要少。
令R=B/A,L=A\B,下面仍然以A、B为例来演示。
示例程序如下:
R=B/A
L=A\B
运行结果如下:
2.2.8矩阵的幂运算
对于二维方阵,A的p次乘方可以用A^p实现。
如果p是一个正整数,那么这个幂可以由许多矩阵乘法运算定义。
对于p=0,得到与A维数相同的同一个矩阵;当p<0时,如果A-1存在,可定义A^p,它是与inv(A)^(-p)相同。
A0=A^3,A1=A.^3,A2=A^-3
Ap0为3个A矩阵相乘,Ap1中的元素为A矩阵中相应元素的立方,矩阵Ap2为矩阵A的逆矩阵的乘积,A3为A0的逆矩阵。
以矩阵A为例,分别编程实例如下:
A0=A^3%3个A矩阵相乘
A1=A.^3%A矩阵中相应元素的立方
A2=A^-3%A的逆矩阵的乘积
A3=A0^-1%A0的逆矩阵
运行结果如下:
对比可以知道A0与A1显示了矩阵运算与元素运算的区别,A2跟A3是相同的,说明先逆后立方与先立方后逆效果一样。
2.3多项式的基本运算
多项式的运算,主要包括多项式加减乘除、多项式求导、求根和求值运算、多项式的部分分式展开、多项式的拟合、插值运算。
为方面计算,我选用两个典型的式子f(x)=2x^3+3x^2+4x+10,g(x)=x^2+2x+5.下文分别以f和g来代替它们。
2.3.1多项式的四则运算
多项式的四则运算就是包括加减乘除,其中加减运算可以直接用+、-来运算,它们的运算规则中注意要满足向量的长度相同,而乘除就得用函数了,其中乘法的计算函数是conv,它本来是卷积的意思,同时它也符合多项式函数的运算规则,除法运算是相乘的逆运算,但会有余子式。
下面以f,g为例来进行四则运算。
示例编程如下:
f=[2,3,4,10];
g=[1,2,5];
a=f+[0,g]%因为两个向量长度不同,而加运算要求长度相同,所以要补0
b=f-[0,g]%减法运算
c=conv(f,g)%乘法运算
[d,r]=deconv(c,f)%除法运算,因为还有余子式,所以选用相乘的结果除,使得结果干净
运行结果如下:
2.3.2多项式的求导、求根、求值
多项式的求导、求根、求值运算是多项式运算的又一大板块,其中多项式求导数的函数是polyder,调用格式是e=polyder(c),其中c表示的是待求导的函数式,然后求根运算的函数是roots或poly,其中roots是根据函数求多项式的根,它的调用格式是h=roots(c),c代表待求根的函数式,而poly函数是根据根求函数,格式是i=poly(h),表示根据h求函数i,然后求值运算的函数是polyval,将多项式的自变量赋予值z,则调用格式是j=polyval(f,z),表示当变量是1时,函数f的结果。
下面编程演示。
示例编程如下:
e=polyder(c)%求函数c的导数
h=roots(c)%求函数c的根
i=poly(h)%根据所求的根求函数
j=polyval(c,1)%当变量值为1时,函数c的值
运行结果如下:
2.3.3多项式的部分分式展开
函数residue可以将多项式之比用部分分式展开,也可以将一个部分分式表示为多项式之比。
其调用格式如下:
[r,p,k]=residue(a,b)返回多项式之比a/b的部分分式展开,参照下面公式。
[a,b]=residue(r,p,k)返回部分分式的多项式向量。
示例程序如下:
a=[23-41];
b=[1-32];
[r,p,k]=residue(a,b)%返回多项式之比a/b的部分分式展开
[c,d]=residue(r,p,k)%f返回部分分式的多项式向量运行结果如下:
运行结果如下:
2.3.4多项式的拟合
多项式拟合用polyfit(x,y,n)来实现,n是拟合多项式的阶次。
调用函数polyfit常用格式为p=polyfit(x,y,n),x为变量,y为函数,n为阶数。
为了能形象说明问题,我采用绘图来演示。
示例程序如下:
x=linspace(0,2*pi,100);%定义向量,从0到2派分为100份
y=cos(x);%定义函数
t=polyfit(x,y,6);%6次拟合
y1=polyval(t,x);%根据拟合的结果求多项式的值
subplot(2,1,1),plot(x,y,'ro',x,y1,'g--')%作图
s=polyfit(x,y,3);%3次拟合
y2=polyval(s,x);%根据拟合的结果求多项式的值
subplot(2,1,2),plot(x,y,'ro',x,y2,'g--')%作图
运行结果如下:
对比可以知道高次拟合的效果要好一些。
图2.3.4
2.3.5多项式插值运算
插值函数通常是分段的,,插值数据通过给定的数据点x,y。
插值函数一般地可表示为yi=interpi(x,y,xi,’method’)其中i代表几维插值可取1、2,xi为插值范围内的任意点集的x坐标,yi是插值后对应数据点集的坐标,method为插值函数的类型选项,有linear为线性,也是缺省项,cubic和cubicspline为三次样条等三样。
例:
已知某矩形温箱中3×5个测试点上的温度,求全箱的温度分布。
给定:
wid=1:
5;dep=1:
3;tem=[7271706974;6953515571;7374717677]
要求计算沿宽度和深度细分网格:
di=1:
0.2:
3;wi=1:
0.2:
5;交点温度。
示例程序如下:
wid=1:
5;dep=1:
3;
tem=[7271706974;6953515571;7374717677];
di=1:
0.2:
3;wi=1:
0.2:
5;
tc=interp2(wid,dep,tem,wi,di','cubic');%求温度,di必须变成列向量
mesh(wi,di,tc)%画三维图
运行结果如下:
图2.3.5
三维图像显示出了所求各点的分布状况。
3.基于MATLAB的图像滤波设计
3.1总体设计
由于要实现的功能并不是很多,所以在排版的过程中,把各个功能都安排在界面上,整体安排如下图所示:
图3.1
注:
1、保存功能为保存程序运行后当前的图像
2、高斯功能为在原图像中加入高斯噪声,并显示处理后结果
3、椒盐功能为在原图像中加入椒盐噪声,并显示处理后结果
4、乘性功能为在原图像中加入乘性噪声,并显示处理后结果
5、灰度功能为将原图像转变为灰度图像,并显示处理后结果
6、代替功能为浏览本地文件,选择图片放入axes1中
7、低通功能为巴特沃斯低通滤波对图像进行低通滤波处理,显示结果。
(只能处理灰度图像截止频率为50khz)
8、高通功能为高斯高通滤波器对图像进行处理,显示结果。
(只能处理灰度图像截止频率为3khz)
9、非限低通功能为巴特沃斯低通滤波对图像进行低通滤波处理,显示结果。
(可直接处理彩色图像,图像变形截止频率为50khz)
10、非限高通功能为高斯高通滤波器对图像进行处理,显示结果。
(可直接处理彩色图像,图像变形截止频率为25khz)
11、维纳功能为采用维纳滤波对图像进行处理,显示结果
12、中值功能为采用中值滤波对图像进行处理,显示结果
3.2图像的读取和保存
3.2.1图像的读取
为了让使用者更方便的使用,所以在设计的时候,通过对话框的形式来选择文件,选择uigetfile函数来实现,uigetfile函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件,由于这个GUI程序的操作对象是图像文件,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 基本 运算 基于 图像 滤波 设计