matlab课程设计图像处理.docx
《matlab课程设计图像处理.docx》由会员分享,可在线阅读,更多相关《matlab课程设计图像处理.docx(36页珍藏版)》请在冰豆网上搜索。
matlab课程设计图像处理
摘要
MATLAB是主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
MATLAB强大的扩展功能为各个领域的应用提供了基础,由各个领域的专家相继给出了MATLAB工具箱,其中主要有信号处理,控制系统,神经网络,图像处助,鲁棒控制,非线性系统控制设计,最优化,小波,通信等工具箱,这此工具箱给各个领域的研究和工程应用提供了有力的工具。
借助于这些“巨人肩膀上的工具”,各个层次的研究人员可直现方便地进行分析、计算及设计工作,从而大大地节省了时间。
本次课程设计的目的在于较全面了解常用的数据分析与处理原理及方法,能够运用相关软件进行模拟分析。
通过对采集的图像进行常规的图像的亮度和对比度的调整,并进行最近邻插值和双线性插值等算法将用户所选取的图像区域进行放大和缩小整数倍的和旋转操作,并保存,比较几种插值的效果,以及对图像进行直方图和直方图均衡并加入噪声进行对比,达到本次课程设计的目的。
关键词:
MATLAB亮度和对比度插值放大旋转噪声
Abstract
MATLABismainfaceofscientificcalculation,visualizationandinteractiveprogramdesignofthehigh-techcomputingenvironment.MATLABisapowerfulextensionapplicationinvariousfieldstoprovideabasisbyexpertsinvariousfieldshavebeengivenaMATLABtoolbox,whicharesignalprocessing,controlsystems,neuralnetworks,imageprocessingsupport,robustcontrol,nonlinearcontrolsystemdesign,optimization,wavelets,communicationstoolkit,whichthiskittothevariousareasofresearchandengineeringapplicationsapowerfultool.Withthese"toolsontheshouldersofgiants,"researchersatalllevelscannowbeeasilyanalyzeddirectly,calculationanddesignwork,whichgreatlysavestime.
Thetrainingaimstostrengthenthebasisofamorecomprehensiveunderstandingofcommonlyuseddataanalysisandprocessingprinciplesandmethodsrelatedtotheuseofsimulationsoftware.Imagescollectedbyconventionalimagebrightnessandcontrastadjustments,andthenearestneighborinterpolationandbilinearinterpolationalgorithmtotheuserselectedimageareatozoominandoutseveraltimesandrotatethewholeoperation,andsave,comparetheeffectofseveralinterpolationandtheimagehistogramandhistogramandcomparedwithnoise,tothepurposeofthiscoursedesign.
Keywords:
MATLABbrightnessandcontrastrotationinterpolationnoiseamplification
1.MATLAB简介
1.1MATLAB说明
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
1.2MATLAB的语言特点
(1)语言简洁紧凑,使用方便灵活,库函数极其丰富。
运算符丰富。
(2)MATLAB既具有结构化的控制语句(如for循环,while循环,break语句和if语句),又有面向对象编程的特性。
(3)程序限制不严格,程序设计自由度大。
(4)MATLAB的图形功能强大。
(5)MATLAB的缺点是,它和其他高级程序相比,程序的执行速度较慢。
(6)由于MATLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。
1.3MATLAB系统构成
主要由以下五部分构成:
MATLAB系统构成
(1)MATLAB语言
(2)MATLAB工作环境
(3)图形处理
(4)MATLAB数学函数库
(5)MATLAB应用编程人员接口(API)
1.4MATLAB数值计算
1.4.1极限的计算、微分的计算、积分的计算、级数的计算、求解代数方程、求解常微分方程
①极限的计算
举例:
求极限
。
源代码如下:
symsxyf
y=(x+2)./(x.^2-x+3);
f=limit(y,x,0)
结果:
f=2/3
②微分的计算
举例:
求函数f(x)=3
-2x+1的导数。
源代码如下:
symsxfy
y=3*x^2-2*x+1;
f=diff(y,x)
结果:
f=6x-2
③积分的计算
举例:
求函数
分别对两个变量的积分。
源代码如下:
symsxsfy
f=cos(3*x)+x^2-2*s;
y=int(f,x)
y=int(f,s)
结果:
y=1/3*sin(3*x)+1/3*x^3-2*s*x
y=cos(3*x)*s+x^2*s-s^2
④级数的计算
举例:
求级数
之和
源代码如下:
symsnfy
f=1/(n^2+2);
y=symsum(f,n,1,inf)
结果:
y=
1/4*i*2^(1/2)*Psi(1-i*2^(1/2))-1/4*i*2^(1/2)*Psi(1+i*2^(1/2))
⑤求解代数方程
举例:
求多项式方程
的根。
源代码:
p=[1,-2,3,-4,5,-6,7]
roots(p)
结果:
ans=
1.3079+0.5933i
1.3079-0.5933i
-0.7104+1.1068i
-0.7104-1.1068i
0.4025+1.3417i
0.4025-1.3417i
⑥求解常微分方程
举例:
求微分方程
y(0)=2的解。
源代码:
dsolve('Dy=2+y^2')
dsolve('Dy=2+y^2','y(0)=2')
结果:
ans=2^(1/2)*tan(2^(1/2)*t+2^(1/2)*C1)-1/(t-C1)
ans=2^(1/2)*tan(2^(1/2)*t+atan(2^(1/2)))
1.4.2矩阵的最大值、最小值、均值、方差、转置、逆、行列式、特征值的计算、矩阵的相乘、右除、左除、幂运算
①矩阵的最大值、最小值
举例:
求矩阵A的最大值、最小值
源代码如下:
clearall
A=[
123
456
789]
max(A),min(A)
结果:
ans=
789
ans=
123
②矩阵的均值
举例:
求矩阵A的均值
源代码如下:
clearall
A=[
123
456
789]
mean2(A)
结果:
ans=5
③矩阵的方差
举例:
求矩阵A的方差
源代码如下:
clearall
A=[
123
456
789]
std2(A)
结果:
ans=2.7386
④矩阵的转置
举例:
已知矩阵
,求A的转置
源代码如下:
clearall
A=[
123
456
789]
A'
结果:
ans=
147
258
369
⑤矩阵的逆
举例:
已知
求A得逆。
源代码如下:
clearall
A=[
123
456
789]
inv(A)
结果:
ans=
1.0e+016*
-0.45040.9007-0.4504
0.9007-1.80140.9007
-0.45040.9007-0.4504
⑥矩阵的行列式
举例:
已知
,求A的行列式。
源代码如下:
clearall
A=[1,2,3;4,5,6;7,8,9]
det(A)
结果:
ans=0
⑦矩阵的特征值
举例:
求矩阵A的特征值
源代码如下:
clearall
A=[123;456;789]
eig(A)
结果:
ans=16.1168
-1.1168
-0.0000
⑧矩阵的相乘、右除、左除、幂运算
举例:
,
,
,求AB和AC。
源代码如下:
clearall
A=[1,2,3;4,5,6;7,8,9],B=[1,2;3,4;5,6],C=[1,2,3,4;5,6,7,8;9,10,11,12]
A*B,A*C
结果:
ans=
2228
4964
76100
ans=
38445056
8398113128
128152176200
举例:
已知
,求A\B,B/A。
源代码如下:
clearall
A=[1,2,4;7,4,27;-3,9,12],B=[1,-3,4;-6,9,1;27,8,-2]
A\B,B/A
结果:
ans=
-3.3733-4.43113.7511
1.2533-3.19562.8356
0.46671.9556-1.3556
ans=
-2.66670.53330.0222
1.0667-0.57331.0178
29.9333-2.4267-4.6844
举例:
设
,求
。
源代码如下:
clearall
A=[1,-1;1,1]
A^10,A.^10
结果:
ans=
0-32
320
ans=
11
11
1.4.3多项式加减乘除运算、多项式求导、求根和求值运算、多项式的部分分式展开、多项式的拟合、插值运算
①多项式加减乘除运算
举例:
f(x)=
g(x)=
源代码如下:
clearall
f=[1-23-40-67-89]
g=[00054-320-12]
h=f+g
h=f-g
h=conv(f,g)
结果:
h=1-2314-927-911
h=1-23-9-4-3-13-77
h=Columns1through9
0005-6418-6646
Columns10through17
-7616-136206-206202-2518
源代码如下:
clearall
f=[1-23-40-67-89];
g=[54-320-12];
[q,r]=deconv(f,g)
结果:
q=
0.2000-0.56001.1680-2.8704
r=
Columns1through5
00-0.0000026.3856
Columns6through9
-38.931266.6960-13.206414.7408
②多项式求导
举例:
g(x)=
源代码如下:
clearall
g=[5-43-21-10];
polyder(g)
结果:
ans=
25-169-41
③求根和求值运算
举例:
g(x)=
源代码如下:
clearall
g=[5-43-21-10];
roots(g)
结果:
ans=
1.2628
0.4804+1.1213i
0.4804-1.1213i
-0.7118+0.7468i
-0.7118-0.7468i
④多项式的部分分式展开
举例:
将有理多项式
展开成部分多项式
源代码如下:
B=[1,-3,5];
A=[1,5,-2,15];
[R,P,K]=residue(B,A)
结果:
R=1.3731
-0.1866-0.0325i
-0.1866+0.0325i
P=-5.7924
0.3962+1.5597i
0.3962-1.5597i
K=
[]
⑤多项式的拟合、插值
举例:
源代码(插值)如下:
x=[13579];
y=[246810];
x1=[1.23.46.5];
y1=interp1(x,y,x1)
结果:
y1=2.20004.40007.5000
举例:
源代码(拟合)如下:
x=[12345];
y=[00.20.40.91.5];
z=polyfit(x,y,2)
结果:
z=0.0786-0.10140.0400
2图像选择及变换
2.1原始图像选择读取
原始图片如下:
图1原始图片(来自网络)
MATLAB为用户提供了专门的函数以从图像格式的文件中读写图像数据。
采用的是imread函数来实现图像文件的读取操作,采用的格式如下:
A=imread(’filename.fmt’)
该语句用于读取字符串“filename”对应的灰度图像或彩色图像,“fmt”指定了文件的格式。
采用imfinfo函数查询图像文件的信息。
其语句格式如下:
Info=imfinfo(‘filename.fmt’)
该语句可以在命令窗口会显示出文件的基本信息。
采用imshow函数进行图像的显示,采用的格式如下:
A=imread(‘filename.fmt’);
imshow(A);
当这种显示方式要求被显示的图像要么在当前目录下或MATLAB的目录下。
采用rgb2gray函数进行真彩色图像与灰阶强度图像的转变,其格式调用如下:
A=rgb2gry(‘filename.fmt’);
得到的图像可以进行统计与处理,能完成要求。
图像读入与显示和变化的源代码如下:
closeall;
clearall;
x=imread('xuewu.jpg');
imshow(x);
imfinfo('xuewu.jpg')
程序运行结果如下图2所示:
图2读取后显示图片
命令窗口中,显示如下:
Filename:
'xuewu.jpg'
FileModDate:
'27-Dec-201108:
58:
56'
FileSize:
348015
Format:
'jpg'
FormatVersion:
''
Width:
1024
Height:
768
BitDepth:
24
ColorType:
'truecolor'
FormatSignature:
''
NumberOfSamples:
3
CodingMethod:
'Huffman'
CodingProcess:
'Sequential'
Comment:
{}2.2转换图像为灰阶图像
2.2图像的变换
在后期的处理中,有部分程序需要用到灰阶图片,因此提前将图片进行转换,得到灰阶图片。
采用rgb2gray函数进行真彩色图像与灰阶强度图像的转变其格式调用如下:
A=rgb2gry(‘filename.fmt’);
得到的图像可以进行统计与处理。
程序源代码如下:
x1=rgb2gray(x);
figure,imshow(x1)
程序运行结果如下图3所示:
图3灰阶图片
3图像处理及代码程序
3.1图像亮度对比度调整
3.1.1函数及其参数的说明
亮度的调节采用的是imadd函数,其调用格式如下:
Z=imadd(X,Y);
说明:
imadd函数可以将两幅图像相加或在图像上加上一个常量。
其中,X为图像数据矩阵,也可以是M*N*3的RGB图像矩阵。
Y可以是与X的格式类型完全的相同图像数据矩阵或者是一个double类型的数值。
对比度的调节采用的是imajust函数,其调用格式如下:
Z=imadjust(X,[low_in,high_in],[low_out,high_out]);
说明:
imadjust函数将图像矩阵X中的亮度值线性变换到输出矩阵Z中的新值。
输入图像X因为uint8类,uint16类或double类图像,输出图像Z与输入图像X有着相同的数据类型。
low_in、high_in、low_out与high_out这四个参数的取值范围不论输入X的数据类型为何都为[0,1]。
3.1.2源程序及运行结果
源程序如下:
x2=imadd(x1,50);%亮度调节
figure,imshow(x2)
x3=imadjust(x1,[0.3,0.7],[0,1]);%对比度调节
figure,imshow(x3)
运行结果如图4和图5所示:
图4亮度调节
图5对比度调节
3.2图像放大和缩小
3.2.1函数及其参数的说明
对图像进行放大和缩小可以采用imresize函数,其调用格式如下:
B=imresize(A,[mrowsncols],method)
说明:
mrowsncols是选择放大或缩小的倍数,method表示选用的插值方法,其可选值为nearest(最邻近插值法)、bilinear(双线性插值)和bicubic(双三次插值法),并且method的缺省表示为nearest。
3.2.2源程序及运行结果
源程序如下所示:
clc
x1=imread('91.jpg');
imshow(x1)
title('原图');
Info=imfinfo('91.jpg')
%放大2倍
x2=imresize(x1,2);%最邻近插法
figure,imshow(x2)
title('最邻近插法放大');
x3=imresize(x1,2,'bilinear');%双线性插值法
figure,imshow(x3)
title('双线性插值法放大');%缩小到原来的1/5
x4=imresize(x1,0.2);%最邻近插法
figure,imshow(x4)
title('最邻近插法缩小');
x5=imresize(x1,0.2,'bilinear');%双线性插值法
figure,imshow(x5)
title('双线性插值法缩小');
x6=imrotate(x1,45);
figure,imshow(x6)
%将原始灰度以双线性插值的方式将图像顺时针旋转45°
x7=imrotate(x1,45,'bilinear');
figure,imshow(x7)
程序运行结果如图6、7、8、9所示:
图6最邻近插法放大一倍
图7双线性插值法放大
图8最邻近插法缩小
图9双线性插值法缩小
3.3图像任意角度的旋转
3.3.1函数及其参数的说明
对图像进行旋转可以采用imrotate函数,其调用格式如下所示:
B=imrotate(A,angle,method,bbox)
说明:
A为输入二维图像矩阵,其数据类型不限。
angel为逆时针旋转的角度值,如果希望顺时针旋转,则选择该值为负。
method表示选用的插值方法,其可选值为nearest(最邻近插值法)、bilinear(双线性插值)和bicubic(双三次插值法),并且method的缺省表示为nearest。
bbox为指定输出图像尺寸的字符串,’crop’表示的通过裁剪使输出图像尺寸与输入图像一致,’loose’表示的不进行裁剪,故输出图像尺寸会比输入图像尺寸大,它在默认情况下为’loose’。
3.3.2源程序及运行结果
源程序如下:
clc
x1=imread('91.jpg');
imshow(x1)
title('原图');
%将原始灰度以最邻近插值的方式将图像顺时针旋转45°
x6=imrotate(x1,45);
figure,imshow(x6)
%将原始灰度以双线性插值的方式将图像顺时针旋转45°
x7=imrotate(x1,45,'bilinear');
figure,imshow(x7)
程序的运行结果下图10和图11所示
图10最邻近插值法45°逆时针旋转
图11双线性插值法逆时针45°旋转
3.4图像直方图统计和均衡
3.4.1函数及其参数的说明
要进行图像直方图统计可以采用imhist函数,其调用格式如下:
h=imhist(X,n)
其中,X为输入图像,h为其直方图,n是用于形成直方图的灰度级的个数。
一个灰度级可以包含几个灰度值,换言之,uint8类型的图像直方图的灰度级可以有256级,也可以只有8级,每个灰度级都有32个灰度值。
参数n可以缺省,在默认的情况下,如果X是灰度图像,则n为256个灰度级,如果X是二值图像,则n为2,表示有2个灰度级。
要进行图像直方图均衡可以采用histeq函数,其调用格式如下:
Z=histeq(X,n)
其中,X为输入灰度图像矩阵,其数据类型为double或uint8类型。
n为均衡后直