MATLAB编程实习Word下载.docx
《MATLAB编程实习Word下载.docx》由会员分享,可在线阅读,更多相关《MATLAB编程实习Word下载.docx(16页珍藏版)》请在冰点文库上搜索。
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:
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%结束行扫描
width%扫描每一行
height%扫描每一列
z(m,n)=uint8(B(m,n,1));
%将Y值赋予新图像
end%结束列扫描
subplot(1,3,3),imshow(uint8(z));
%显示彩色转灰度后得到的图像
四、效果比较:
由以上三幅图像可以看出,用不同的系数与R、G、B相乘后的值赋给亮度Y以后,所得的图像比对R、G、B求均值后赋给亮度Y的方法所得的图的亮度更加强,从MATLAB仿真平台也能看出用第一种方法得到的像素值比第二种方法得到的像素值大。
二、灰度图像的缩放
、掌握灰度图像缩放的原理及算法;
、掌握利用if语句实现选择结构的方法;
对灰度图像实现按比例缩小和放大功能:
缩小:
行数*0.6,列数*0.75;
放大:
行数*1.2,列数*1.5。
(1)缩小代码:
%按比例缩小
couple512x512.BMP'
%按比例缩小:
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:
m%扫描每一行
h(i)=round(i/0.6);
%对行元素坐标进行抽取
n%扫描每一列
l(i)=round(i/0.75);
%对列元素坐标进行抽取
end%结束列扫描
forj=1:
ifh(i)>
widthh(i)=width;
%判断行元素坐标是否超出,若超出则赋于最大行坐标
elseh(i)=h(i);
end%否则直接赋值
ifl(j)>
heightl(j)=width;
%判断列元素坐标是否超出,若超出则赋于最大列坐标
elsel(j)=l(j);
y(i,j)=x(h(i),l(j));
%将抽取后的数值赋于新图
subplot(1,2,1),imshow(uint8(x));
%显示原图像
subplot(1,2,2),imshow(uint8(y));
%显示缩小后图像
效果比较:
由上图可以看出,缩小后的图像的出现失真。
(2)放大代码:
%按比例放大
lena256.BMP'
%读取图像尺寸信息
%按比例放大:
k1=1.2,k2=1.5
k1=1.2;
%横向放大比例
k2=1.5;
%纵向放大比例
%计算放大后横向尺寸
%计算放大后纵向尺寸
%存储放大后图像
m%扫描每一个行元素
h(i)=round(i/1.2);
%计算放大后图像的行元素坐标
n%扫描每一个列元素
l(i)=round(i/1.5);
%计算放大后图像的列元素坐标
%判断行元素值是否越界,若是则赋于最大行值
heightl(j)=hieght;
%判断列元素值是否越界,若是则赋于最大列值
%向新图像赋值
imshow(uint8(x));
figure%建立显示窗口
imshow(uint8(y));
%显示放大后图像
由上图可以看出,放大后的图像出现失真。
三、直方图均衡化
、掌握灰度图像直方图均衡化的原理及算法;
、掌握利用for语句实现循环的方法;
、掌握绘制二维图形的常用函数。
对灰度图像进行直方图均衡化处理
%直方图均衡化
Clear%清除变量空间
pattern.BMP'
%读取图像像素
%读取图像信息
%原图直方图
h=zeros(1,256);
%用来存储像素累计出现次数
l=0;
%需用变量
m=1;
fork=0:
255%扫描每一个像素
fori=1:
ifx(i,j)==kl=l+1;
%判定该像素值是否与K值相同
elsecontinue%否则,继续
end%结束IF语句
end%结束行扫描
h(m)=l;
%变量恢复
m=m+1;
%数组坐标递增
end%结束扫描像素值
%总像素
nf=width*height;
%计算总像素值
%分布概率
hs=zeros(1,256);
%存储分布概率
256%扫描每个数组中的元素
hs(i)=h(i)/nf;
%计算每个像素出现的分布概率
end%结束扫描每个数组元素
%累积分布
hp=zeros(1,256);
%存储累计累计分布概率
temp=0;
256%扫描数组的每一个元素
temp=hs(i)+temp;
%累计分布概率
hp(i)=temp;
%存储每个累计分布概率
end%结束扫描
%新灰度值
g=zeros(1,256);
%存储新像素值
256%扫描数组的每个元素
g(i)=round(255*hp(i));
%计算新像素值
%新像素替换旧像素
fork=1:
255%扫描每一个像素值
ifx(i,j)==ky(i,j)=g(k);
%判断元素值是否与K同
end%结束扫描K值
%图像显示
z=0:
255;
%用来显示直方图分布的变量
%新像素统计
w=zeros(1,256);
%存储新图像的像素值
255%扫描像素值
ify(i,j)==kl=l+1;
%判断当前像素值是否与K相同
elsecontinue%否则继续
w(m)=l;
%变量初始化
%数组下标递进
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);
%显示新图像素分布情况
四、图像滤波
、掌握均值滤波和中值滤波的原理及算法;
、掌握两矩阵相乘的方法。
对灰度图像完成中值滤波和均值滤波,模板大小分别取3*3和5*5,并从滤波器和模板尺寸角度出发分析滤波效果。
均值滤波:
%均值滤波
lena256noisegau.BMP'
%读取图像像素值
%读取图像数据
%均值滤波模块3*3
k=3;
%模块大小设定
t=0;
%图像像素类型转换
y=x;
%用来存储新图象
fori=round(k/2):
(width-round(k/2)+1)%扫描每一行
forj=round(k/2):
(height-round(k/2)+1)%扫描每一列
form=i-round(k/2)+1:
i+round(k/2)-1%扫描k*k的单元格的每一行,每k*k个元素取出
forn=j-round(k/2)+1:
j+round(k/2)-1%扫描k*k的单元格的每一列
s=x(m,n);
%赋值S
t=t+s;
%累加K*K个像素
y(i,j)=round(t/(k*k));
%求K*K个数的平均值并赋于新图
t=0;
高斯噪声的滤波图
椒盐噪声的滤波图
由上图可以看出,对于高斯噪声,均值滤波不能很好的去除;
对于椒盐噪声滤波对其的去除效果强于对高斯噪声的去除效果。
中值滤波
%中值滤波模块5*5
lena256noisesalt.BMP'
%读取像素值
k=5;
%设定参数K
temp=1;
%所用变量
y=zeros(1,k*k);
%存储矩阵
z=x;
%建立新图
i+round(k/2)-1%扫描5*5的单元格的每一行,每5*5个元素取出
j+round(k/2)-1%扫描5*5的单元格的每一列
y(temp)=x(m,n);
%将5*5中每一个元素取出
temp=temp+1;
%数组下标递增
temp=1;
%数组下标恢复1
fort=1:
k*k%扫描每个元素,5*5个元素排序
fort1=1:
k*k%扫描每个元素
ift1<
k*k%判断像素值是否为最大
ify(t1)>
=y(t1+1)%判断当前元素是否大于后一元素
s=y(t1);
%将当前值储存
y(t1)=y(t1+1);
%将后一值赋到当前位置
y(t1+1)=s;
%完成交换
elseend%结束IF语句
end%结束矩阵列扫描
end%结束矩阵行扫描
z(i,j)=y(round(k*k/2));
%取出中间的值
subplot(1,2,2),imshow(uint8(z));
%显示滤波后图像
由上图可以看出,中值滤波对椒盐噪声可以很好的去除,但是滤波后的图像的细节处没有原图清晰;
中值滤波对高斯噪声不能去除。
由以上均值滤波和中值滤波后得到的图形来看,中指滤波可以去除椒盐噪声,均值滤波可以去除高斯噪声。
五、收获与体会
经过这次对MATLAB编程的短暂学习,使我对MATLAB编程有了更深的认识和掌握,在对其
学习的过程中,我发现学习MATLAB语言,不仅要有一般的编程基础,还要有一定的外语水平和
可用的计算机资源,在对其的使用过程中,也使我对以前学过的C语言知识也巩固了一番,而且
MATLAB的界面更加人性化,用起来比其他类的软件能够更加简单和易学。
在对图像的处理过程中,
自己也体会到了图像变化的乐趣,使自己对学习这门语言有了更高的兴趣。
通过这段时间的编程实习,让我对MATLAB的兴趣更加浓厚了