MATLAB编程实习.docx
- 文档编号:12378916
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:16
- 大小:695.58KB
MATLAB编程实习.docx
《MATLAB编程实习.docx》由会员分享,可在线阅读,更多相关《MATLAB编程实习.docx(16页珍藏版)》请在冰豆网上搜索。
MATLAB编程实习
前言
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
在科学研究和工程应用中,往往要进行大量的数学计算,其中包括矩阵运算等。
这些运算一般来说都难以用手工精确、快捷地完成,而通常是借助特定的计算机程序来完成相应的计算功能,目前流行的编程语言有Basic、Fortran和C语言等。
对于大多数科学工作者来说,既需要掌握本专业的相关知识,还需要熟练地掌握编程语言,这无疑具有一定的难度。
编制程序也是繁杂的工作,不仅消耗人力与物力,而且影响工作进程和效率。
MATLAB就是为解决上述矛盾而产生的。
MATLAB是数学建模必备工具。
MATLAB以商品形式出现后,仅短短几年,就以其良好的开放性和运行的可靠性,使原先控制领域里的封闭式软件包(如英国的UMIST,瑞典的LUND和SIMNON,德国的KEDDC)纷纷淘汰,而改以MATLAB为平台加以重建。
在时间进入20世纪九十年代的时候,MATLAB已经成为国际控制界公认的标准计算软件。
到九十年代初期,在国际上30几个数学类科技应用软件中,MATLAB在数值计算方面独占鳌头,而Mathematica和Maple则分居符号计算软件的前两名。
Mathcad因其提供计算、图形、文字处理的统一环境而深受中学生欢迎。
MATLAB的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。
附加的工具箱(单独提供的专用MATLAB函数集)扩展了MATLAB环境,以解决这些应用领域内特定类型的问题。
在国际学术界,MATLAB已经被确认为准确、可靠的科学计算标准软件。
在许多国际一流学术刊物上,(尤其是信息科学刊物),都可以看到MATLAB的应用。
在设计研究单位和工业部门,MATLAB被认作进行高效研究、开发的首选软件工具。
如美国NationalInstruments公司信号测量、分析软件LabVIEW,Cadence公司信号和通信分析设计软件SPW等,或者直接建筑在MATLAB之上,或者以MATLAB为主要支撑。
又如HP公司的VXI硬件,TM公司的DSP,Gage公司的各种硬卡、仪器等都接受MATLAB的支持。
一、彩色图转灰度图
1、设计目的:
1)掌握读、写图像的基本方法。
2)掌握MATLAB语言中图像数据与信息的读取方法。
3)理解图像灰度变换处理在图像增强的作用。
4)掌握绘制灰度直方图的方法,理解灰度直方图的灰度变换及均衡化的方法
2、设计任务:
(1)、读入彩色和灰度图像并显示;
(2)、对彩色图像转化为灰度图像并显示;
(3)、比较两种彩色图像转灰度图像方法的效果。
3、源代码如下:
%RGB转YUV
Clear%清理变量空间
x=imread('lena512.BMP');%读取图像的像素值
[width,height,dim]=size(x);%读取图像的尺寸信息
x=double(x);%转换变量类型
%方法一:
元素乘
y=round(x(:
:
1)*0.299+x(:
:
2)*0.587+x(:
:
3)*0.114);%每个像素值转换为Y值
subplot(1,3,1),imshow(uint8(x));%显示原图
subplot(1,3,2),imshow(uint8(y));%显示对应灰度图
%方法二:
矩阵乘
A=[0.2990.5870.114;-0.147-0.287.0436;0.615-.0515-0.100];%建立转换矩阵
form=1:
1:
width%扫描图像的每一行
forn=1:
1:
height%扫描图像的每一列
stemp=[x(m,n,1)x(m,n,2)x(m,n,3)]*A';%将每一个元RGB像素点转换为YUV
B(m,n,1)=stemp
(1);%将Y分量赋值存储
B(m,n,2)=stemp
(2);%将U分量赋值存储
B(m,n,3)=stemp(3);%将V分量赋值存储
end%结束列扫描
end%结束行扫描
form=1:
1:
width%扫描每一行
forn=1:
1:
height%扫描每一列
z(m,n)=uint8(B(m,n,1));%将Y值赋予新图像
end%结束列扫描
end%结束行扫描
subplot(1,3,3),imshow(uint8(z));%显示彩色转灰度后得到的图像
四、效果比较:
由以上三幅图像可以看出,用不同的系数与R、G、B相乘后的值赋给亮度Y以后,所得的图像比对R、G、B求均值后赋给亮度Y的方法所得的图的亮度更加强,从MATLAB仿真平台也能看出用第一种方法得到的像素值比第二种方法得到的像素值大。
二、灰度图像的缩放
1、设计目的:
、掌握灰度图像缩放的原理及算法;
、掌握利用if语句实现选择结构的方法;
2、设计任务:
对灰度图像实现按比例缩小和放大功能:
缩小:
行数*0.6,列数*0.75;
放大:
行数*1.2,列数*1.5。
3、源代码如下:
(1)缩小代码:
%按比例缩小
Clear%清理变量空间
x=imread('couple512x512.BMP');%读取图像的像素值
[width,height,dim]=size(x);%读取图像的尺寸信息
%按比例缩小:
k1=0.6,k2=0.75
k1=0.6;%横向缩小比例
k2=0.75;%纵向缩小比例
m=round(k1*width);%计算横向缩小后尺寸
n=round(k2*height);%计算纵向缩小后尺寸
y=zeros(m,n);%用来存储新图像
fori=1:
1:
m%扫描每一行
h(i)=round(i/0.6);%对行元素坐标进行抽取
end%结束行扫描
fori=1:
1:
n%扫描每一列
l(i)=round(i/0.75);%对列元素坐标进行抽取
end%结束列扫描
fori=1:
1:
m%扫描每一行
forj=1:
1:
n%扫描每一列
ifh(i)>widthh(i)=width;%判断行元素坐标是否超出,若超出则赋于最大行坐标
elseh(i)=h(i);end%否则直接赋值
ifl(j)>heightl(j)=width;%判断列元素坐标是否超出,若超出则赋于最大列坐标
elsel(j)=l(j);end%否则直接赋值
y(i,j)=x(h(i),l(j));%将抽取后的数值赋于新图
end%结束列扫描
end%结束行扫描
subplot(1,2,1),imshow(uint8(x));%显示原图像
subplot(1,2,2),imshow(uint8(y));%显示缩小后图像
效果比较:
由上图可以看出,缩小后的图像的出现失真。
(2)放大代码:
%按比例放大
Clear%清理变量空间
x=imread('lena256.BMP');%读取图像的像素值
[width,height,dim]=size(x);%读取图像尺寸信息
%按比例放大:
k1=1.2,k2=1.5
k1=1.2;%横向放大比例
k2=1.5;%纵向放大比例
m=round(k1*width);%计算放大后横向尺寸
n=round(k2*height);%计算放大后纵向尺寸
y=zeros(m,n);%存储放大后图像
fori=1:
1:
m%扫描每一个行元素
h(i)=round(i/1.2);%计算放大后图像的行元素坐标
end%结束行扫描
fori=1:
1:
n%扫描每一个列元素
l(i)=round(i/1.5);%计算放大后图像的列元素坐标
end%结束列扫描
fori=1:
1:
m%扫描每一行
forj=1:
1:
n%扫描每一列
ifh(i)>widthh(i)=width;%判断行元素值是否越界,若是则赋于最大行值
elseh(i)=h(i);end%否则直接赋值
ifl(j)>heightl(j)=hieght;%判断列元素值是否越界,若是则赋于最大列值
elsel(j)=l(j);end%否则直接赋值
y(i,j)=x(h(i),l(j));%向新图像赋值
end%结束列扫描
end%结束行扫描
imshow(uint8(x));%显示原图
figure%建立显示窗口
imshow(uint8(y));%显示放大后图像
效果比较:
由上图可以看出,放大后的图像出现失真。
三、直方图均衡化
1、设计目的:
、掌握灰度图像直方图均衡化的原理及算法;
、掌握利用for语句实现循环的方法;
、掌握绘制二维图形的常用函数。
2、设计任务:
对灰度图像进行直方图均衡化处理
3、源代码如下:
%直方图均衡化
Clear%清除变量空间
x=imread('pattern.BMP');%读取图像像素
[width,height,dim]=size(x);%读取图像信息
%原图直方图
h=zeros(1,256);%用来存储像素累计出现次数
l=0;%需用变量
m=1;%需用变量
fork=0:
1:
255%扫描每一个像素
fori=1:
1:
width%扫描每一行
forj=1:
1:
height%扫描每一列
ifx(i,j)==kl=l+1;%判定该像素值是否与K值相同
elsecontinue%否则,继续
end%结束IF语句
end%结束列扫描
end%结束行扫描
h(m)=l;l=0;%变量恢复
m=m+1;%数组坐标递增
end%结束扫描像素值
%总像素
nf=width*height;%计算总像素值
%分布概率
hs=zeros(1,256);%存储分布概率
fori=1:
1:
256%扫描每个数组中的元素
hs(i)=h(i)/nf;%计算每个像素出现的分布概率
end%结束扫描每个数组元素
%累积分布
hp=zeros(1,256);%存储累计累计分布概率
temp=0;%需用变量
fori=1:
1:
256%扫描数组的每一个元素
temp=hs(i)+temp;%累计分布概率
hp(i)=temp;%存储每个累计分布概率
end%结束扫描
%新灰度值
g=zeros(1,256);%存储新像素值
fori=1:
1:
256%扫描数组的每个元素
g(i)=round(255*hp(i));%计算新像素值
end%结束扫描
%新像素替换旧像素
fork=1:
1:
255%扫描每一个像素值
fori=1:
1:
width%扫描每一行
forj=1:
1:
height%扫描每一列
ifx(i,j)==ky(i,j)=g(k);%判断元素值是否与K同
end%结束IF语句
end%结束列扫描
end%结束行扫描
end%结束扫描K值
%图像显示
z=0:
1:
255;%用来显示直方图分布的变量
%新像素统计
w=zeros(1,256);%存储新图像的像素值
l=0;%需用变量
m=1;%需用变量
fork=0:
1:
255%扫描像素值
fori=1:
1:
width%扫描每一行
forj=1:
1:
height%扫描每一列
ify(i,j)==kl=l+1;%判断当前像素值是否与K相同
elsecontinue%否则继续
end%结束IF语句
end%结束列扫描
end%结束行扫描
w(m)=l;l=0;%变量初始化
m=m+1;%数组下标递进
end%结束像素扫描
subplot(2,2,1),imshow(uint8(x));%显示原图
subplot(2,2,2),plot(z,h);%显示原图像素分布情况
subplot(2,2,3),imshow(uint8(y));%显示新图
subplot(2,2,4),plot(z,w);%显示新图像素分布情况
四、图像滤波
1、设计目的:
、掌握均值滤波和中值滤波的原理及算法;
、掌握两矩阵相乘的方法。
2、设计任务:
对灰度图像完成中值滤波和均值滤波,模板大小分别取3*3和5*5,并从滤波器和模板尺寸角度出发分析滤波效果。
3、源代码如下:
均值滤波:
%均值滤波
Clear%清理变量空间
x=imread('lena256noisegau.BMP');%读取图像像素值
[width,height,dim]=size(x);%读取图像数据
%均值滤波模块3*3
k=3;%模块大小设定
t=0;%需用变量
x=double(x);%图像像素类型转换
y=x;%用来存储新图象
fori=round(k/2):
1:
(width-round(k/2)+1)%扫描每一行
forj=round(k/2):
1:
(height-round(k/2)+1)%扫描每一列
form=i-round(k/2)+1:
1:
i+round(k/2)-1%扫描k*k的单元格的每一行,每k*k个元素取出
forn=j-round(k/2)+1:
1:
j+round(k/2)-1%扫描k*k的单元格的每一列
s=x(m,n);%赋值S
t=t+s;%累加K*K个像素
end%结束列扫描
end%结束行扫描
y(i,j)=round(t/(k*k));%求K*K个数的平均值并赋于新图
t=0;%变量初始化
end%结束列扫描
end%结束行扫描
subplot(1,2,1),imshow(uint8(x));%显示原图
subplot(1,2,2),imshow(uint8(y));%显示新图
高斯噪声的滤波图
椒盐噪声的滤波图
效果比较:
由上图可以看出,对于高斯噪声,均值滤波不能很好的去除;对于椒盐噪声滤波对其的去除效果强于对高斯噪声的去除效果。
中值滤波
%中值滤波模块5*5
Clear%清除变量空间
x=imread('lena256noisesalt.BMP');%读取像素值
[width,height,dim]=size(x);%读取图像信息
k=5;%设定参数K
temp=1;%所用变量
y=zeros(1,k*k);%存储矩阵
z=x;%建立新图
fori=round(k/2):
1:
(width-round(k/2)+1)%扫描每一行
forj=round(k/2):
1:
(height-round(k/2)+1)%扫描每一列
form=i-round(k/2)+1:
1:
i+round(k/2)-1%扫描5*5的单元格的每一行,每5*5个元素取出
forn=j-round(k/2)+1:
1:
j+round(k/2)-1%扫描5*5的单元格的每一列
y(temp)=x(m,n);%将5*5中每一个元素取出
temp=temp+1;%数组下标递增
end%结束列扫描
end%结束行扫描
temp=1;%数组下标恢复1
fort=1:
1:
k*k%扫描每个元素,5*5个元素排序
fort1=1:
1:
k*k%扫描每个元素
ift1 ify(t1)>=y(t1+1)%判断当前元素是否大于后一元素 s=y(t1);%将当前值储存 y(t1)=y(t1+1);%将后一值赋到当前位置 y(t1+1)=s;%完成交换 elseend%结束IF语句 elseend%结束IF语句 end%结束矩阵列扫描 end%结束矩阵行扫描 z(i,j)=y(round(k*k/2));%取出中间的值 end%结束列扫描 end%结束行扫描 subplot(1,2,1),imshow(uint8(x));%显示原图 subplot(1,2,2),imshow(uint8(z));%显示滤波后图像 椒盐噪声的滤波图 高斯噪声的滤波图 效果比较: 由上图可以看出,中值滤波对椒盐噪声可以很好的去除,但是滤波后的图像的细节处没有原图清晰;中值滤波对高斯噪声不能去除。 四、效果比较: 由以上均值滤波和中值滤波后得到的图形来看,中指滤波可以去除椒盐噪声,均值滤波可以去除高斯噪声。 五、收获与体会 经过这次对MATLAB编程的短暂学习,使我对MATLAB编程有了更深的认识和掌握,在对其 学习的过程中,我发现学习MATLAB语言,不仅要有一般的编程基础,还要有一定的外语水平和 可用的计算机资源,在对其的使用过程中,也使我对以前学过的C语言知识也巩固了一番,而且 MATLAB的界面更加人性化,用起来比其他类的软件能够更加简单和易学。 在对图像的处理过程中, 自己也体会到了图像变化的乐趣,使自己对学习这门语言有了更高的兴趣。 通过这段时间的编程实习,让我对MATLAB的兴趣更加浓厚了
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 编程 实习