用matlab实现图像灰度变换课程设计Word文档格式.docx
《用matlab实现图像灰度变换课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《用matlab实现图像灰度变换课程设计Word文档格式.docx(15页珍藏版)》请在冰点文库上搜索。
MATLAB中集成了功能强大的图像处理工具箱。
由于MATLAB语言的语法特征与C语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式,而且这种语言可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以MATLAB在图像处理的应用中具有很大的优势。
MATLAB是一种以矩阵运算为基础的交互式程序语言,能够满足科学、工程计算和绘图的要求,与其它计算机语言相比,其特点是简洁和智能化,适应科技专业人员的思维方式和书写习惯,使得编程和调试效率大大提高。
我们学习掌握MATLAB,也可以说是在科学工具上与国际接轨。
具体设计过程及调试
5.1、图像的读入和显示
采用matlabGuide设计图像界面;
可以读入并显示图像,设计实现下列功能的按钮,点击相应的按钮可以实现相应的功能。
图形界面
5.1.1、打开图像
从计算机中查找要打开的图片
5.1.2、显示原图像
把选中的图片显示在第一显示区
5.1.3、图像灰度处理
利用灰度处理函数rgb2gray()对原真彩图像灰阶化
5.1.4、灰阶后的图像显示
把灰阶后的图像显示在第二显示区,对两幅图片进行比较,观察两者特点。
显示原图像和灰阶后的图像
结论:
对图像灰阶处理就是对原图像黑白化
5.2、直方图均衡化
直方图均衡化是一种常用的灰度增强算法,是将原图的直方图经过变换函数修正为均匀的直方图,然后按照均衡后直方图修整原图像。
5.2.1、生成直方图
图像的直方图是表示数字图像中每一灰度级与该灰度级出现的频数,函数为imhist(X,map)
显示原图像的灰度直方图
5.2.2、直方图均衡化
均衡化函数为histeq(I,n),其中n默认为64
直方图均衡化比较
5.3、灰度变换
某些情况下,需要对图像的灰度级整个范围或者其中的某一段扩展或压缩到记录器件输入灰度级动态范围之内。
灰度变换可分为线性变换、分段线性变换、非线性变换和其他的灰度变换。
5.3.1、线性变换
具体实现形式为:
g(x,y)=(d-c)/(b-a)[f(x,y)-a]+c
线性变换结果对比
作用:
使曝光不充分图像中黑的更黑,白得更白,从而提高图像对比度
5.3.2、分段线性变换
具体实现形式:
g(x,y)=c/df(x,y)0<
=f(x,y)<
=a
g(x,y)=(d-c)/(b-a)[f(x,y)-a]+ca<
=b
g(x,y)=(f-b)/(e-a)[f(x,y)-b]+db<
=c
分段线性变换结果对比
5.3.3、非线性变换
g(x,y)=a+ln[f(x,y)+1]/b*lnc
非线性变换结果对比
六、心得体会
这次MATLAB课程设计让我学到了很多,不仅仅是知识,还学到了许多学习方法。
MATLAB软件在这之前接触的很少,仅仅是在数字信号处理的实验课上有过一点了解。
为了做好这次的课程设计,我查阅了大量的资料,并上网搜索了许多与此相关的知识,这个过程使我受益匪浅,那就认识了很多关于MATLAB的论坛,论坛上面提供了很多关于MATLAB学习的方法及其自学的方法,那些论坛对于将来学习MATLAB及其它方面的知识也有很大的帮助。
虽然在规定的时间内完成了老师所布置的课题,但是还是觉得不免有些不足。
由于时间局限,对许多MATLAB所运用到的知识仅仅是有所了解,而并没有完全地掌握,甚至可以说是只知其然,而不知其所以然。
这使我意识到对于MATLAB的学习任务还很艰巨,还有许多知识需要去了解,去深入研究。
通过这次MATLAB课设,学到了MATLABGUI程序设计,并通过MATLAB所生成的图像调试结果,以达到系统的要求。
MATLAB作为第四代计算机语言,具有相当强大的矩阵运算和操作功能,其程序编写也比其它语言要简单,是一种对学习非常有帮助的软件,在之后的时间,我依然会对它进行学习。
七、参考文献
1.郭仕剑、邱志模、陆静芳.MATLAB入门与实践.北京:
人民邮电出版社,2008
2.张智星.MATLAB程序设计及应用.北京:
清华大学出版社,2002
3.肖伟、刘忠.MATLAB程序设计与应用[M].北京:
清华大学出版社,2005
4.瞿亮.基于MATLAB的控制系统计算机仿真.北京:
清华大学出版社,北京交通大学出版社.2005
八、程序清单
一打开图片和灰阶化
globalim
globalx
globaly
globalz
x=0.002;
y=0.02;
z=0.04;
[filename,pathname]=...
uigetfile();
str=[pathnamefilename];
im=imread(str);
axes(handles.axes1);
imshow(im);
title();
im=rgb2gray(im);
axes(handles.axes2);
title();
二线性变换
globalim;
globalJ;
J=imadjust(im,[0.3,0.7],[]);
axes(handles.axes1);
imshow(im);
axes(handles.axes2);
imhist(im);
axes(handles.axes3);
imshow(J);
axes(handles.axes4);
imhist(J);
三分段线性变换
globalH;
H=double(im);
[M,N]=size(H);
%½
ø
Ð
»
Ò
¶
È
±
ä
fori=1:
M
forj=1:
N
ifH(i,j)<
=30
H(i,j)=H(i,j);
elseifim(i,j)<
=150
H(i,j)=(200-30)/(150-30)*(H(i,j)-30)+30;
else
H(i,j)=(255-200)/(255-150)*(H(i,j)-150)+200;
end
%±
º
ó
µ
Ä
½
á
¹
û
imshow(uint8(H));
imhist(uint8(H));
四非线性变换
J=double(im);
H=(log(J+1))/10;
imshow(H);
imhist(H);
五生成灰度直方图
六直方图均衡化
J=histeq(im);
title
平滑处理
用3*3屏蔽窗口的8近邻均值进行滤波
for(intj=1;
j<
height-1;
j++)
{
for(inti=1;
i<
wide-1;
i++)
{
averg=0;
averg=(int)((p_data[(j-1)*wide+(i-1)]+p_data[(j-1)*wide+i]
+p_data[(j-1)*wide+(i+1)]+p_data[j*wide+(i-1)]
+p_data[j*wide+i+1]+p_data[(j+1)*wide+(i-1)]
+p_data[(j+1)*wide+i]+p_data[(j+1)*wide+i+1])/8);
//求周围8近邻均值
if(abs(averg-p_temp[j*wide+i])>
127.5)
p_temp[j*wide+i]=averg;
}
}
利用巴特沃斯(Butterworth)低通滤波器对受噪声干扰的图像进行平滑处理
I=imread('
aaa.jpg'
);
imshow(I);
J1=imnoise(I,'
salt&
pepper'
%叠加椒盐噪声
figure,imshow(J1);
f=double(J1);
%数据类型转换,MATLAB不支持图像的无符号整型的计算
g=fft2(f);
%傅立叶变换
g=fftshift(g);
%转换数据矩阵
[M,N]=size(g);
nn=2;
%二阶巴特沃斯(Butterworth)低通滤波器
d0=50;
m=fix(M/2);
n=fix(N/2);
fori=1:
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d/d0)^(2*nn));
%计算低通滤波器传递函数
result(i,j)=h*g(i,j);
end
result=ifftshift(result);
J2=ifft2(result);
J3=uint8(real(J2));
figure,imshow(J3);
%显示滤波处理后的图像
运行结果: