基于MATLAB的图形滤波器程序设计资料.docx
《基于MATLAB的图形滤波器程序设计资料.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的图形滤波器程序设计资料.docx(14页珍藏版)》请在冰豆网上搜索。
基于MATLAB的图形滤波器程序设计资料
MATLAB课程设计报告
题目:
彩色退化图像滤波处理
专业、班级:
14通1班
学生姓名:
毛剑星
学号:
1434314119
2016年12月21日
MATLAB课程设计任务书
系
电子信息工程
专业
电子信息工程
学生姓名
陈嘉贤
学号
1102201005
设计题目
基于MATLAB的图形滤波器程序设计
基本要求:
1、掌握MATLAB编程的原理和方法。
2、熟悉语音信号的基本特征和分析处理方法。
3、掌握数字信号处理的基本概念、理论和方法。
4、熟练运用MATLAB设计合适的IIR数字滤波器。
主要内容:
学习掌握数字图像处理中的图像滤波特点,并了解MATLAB语言中的相关函数,设计程序实现各种图像滤波功能以及一些图片处理。
设计要求:
自行编写算法,并进行调试,最终实现图像滤波的数字图像处理功能。
学有余力的情况下,可以考虑采用图形用户界面(GUI)的方法实现。
目录
内容4
一、设计内容 4
二、设计要求 4
三、方案论证与设计原理描述4
四、设计结果 5
1.GUI程序的设计:
6
(1)调整亮度的程序设计:
6
(2)完成彩图到灰度图的转换 :
6
(3)在开始菜单下的打开按钮的程序:
6
(4)保存按钮的程序:
7
(5)退出程序:
7
(6)添加噪声程序:
7
(7)还原按键的程序:
8
(8)翻转程序:
8
2.结果8
总结 12
参考文献12
附录 12
内容
一、设计内容
学习掌握数字图像处理中的图像滤波特点,并了解MATLAB语言中的相关函数,设计程序实现各种图像滤波功能。
二、设计要求
自行编写算法,并进行调试,最终实现图像滤波的数字图像处理功能。
学有余力的情况下,可以考虑采用图形用户界面(GUI)的方法实现。
三、方案论证与设计原理描述
图像滤波是改变图像质量,去除图像噪声的一种方法。
主要包括空间域滤波和频域滤波。
空间域滤波主要包括线性滤波、中值滤波、维纳滤波。
滤波运算matlab函数imfilter(A,H)(或filter2(B,X)),其中A/B为原始图像,H/X为滤波掩膜。
fspecial(type,para):
主要的三种类型:
1、‘average’:
均值滤波,参数为hsize代表模板尺寸,默认值为【3,3】
2、‘gaussian’:
高斯低通滤波,有两个参数,hsize表示模板尺寸,默认值为【33】,sigma为滤波器的标准值,单位为像素,默认值为0.5.
3、‘laplacian’:
拉普拉斯算子,参数alpha用于控制算子形状,取值范围为【0,1】,默认值为0.2.
基本函数
1.imreadimread函数用于读入各种图像文件,如:
a=imread('e:
\w01.jpg')注:
计算机E盘上要有w01相应的.jpg文件。
2.imfinfo
imfinfo函数用于读取图像文件的有关信息,如:
imfinfo('e:
\w01.jpg')
3.rgb2grayrgb2gray()函数用于把真彩图转换为灰度图
4.4.imshowimshow函数用于灰度图像文件的显示,如:
i=imread('e:
\w01.jpg');imshow(i);1.imnoiseimnoise函数用于对图像生成模拟噪声,如:
i=imread('e:
\w01.jpg');j=imnoise(i,'gaussian',0,0.02);%模拟高斯噪声
5.5.fspecialfspecial函数用于产生预定义滤波器,如:
h=fspecial('sobel');%sobel水平边缘增强滤波器h=fspecial('gaussian');%高斯低通滤波器h=fspecial('laplacian');%拉普拉斯滤波器h=fspecial('log');%高斯拉普拉斯(LoG)滤波器h=fspecial('average');%均值滤波器6.中值滤波medfilt2函数用于图像的中值滤波,如:
i=imread('e:
\w01.jpg');j=medfilt2(i);
加入高斯噪声比的方式
高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。
MATLAB中为图片加高斯噪声的语句是
(1)J=imnoise(I,'gaussian');(式3-1)
(2)J=imnoise(I,'gaussian',parameters);(式3-2)
(3)J=imnoise(I,'gaussian',m,v);(式3-3)
其中I为原图象的灰度矩阵,J为加噪声后图象的灰度矩阵一般情况下用(式3-1)表示即可,(式3-2)中表示是允许修改参数,而(式3-1)中使用缺省参数;(式3-3)中对图像I加高斯噪声,均值为m,方差为v。
高斯平滑滤波器的原理
高斯滤波器是根据高斯函数的形状来选择权值的线性平滑滤波器。
高斯平滑滤波器对去除服从正态分布的噪声有很好的效果。
一维零均值高斯函数决定了高斯滤波器的宽度。
对图像来说,常用二维零均值离散高斯函数做平滑滤波器,在高斯滤波器的设计中,高斯函数的最佳逼近由二项式展开的系数决定。
由高斯函数的可分离性得到,二维高斯滤波器能用2个一维高斯滤波器逐次卷积来实现,一个沿水平方向,一个沿垂直方向。
实际上,这种运算可以通过使用单个一维高斯模板,对两次卷积之间的图像和最后卷积的结果图像进行转置来完成。
对较大的滤波器,二项式系数对大多数计算机来说都太多,但是,任意大的高斯滤波器都能通过重复使用小的高斯滤波器来实现。
高斯滤波器的二项式逼近的σ可用高斯函数拟合二项式系数的最小方差来计算.设计高斯滤波器的另一种途径是直接从离散的高斯分布中计算模板值。
为了计算方便,一般希望滤波器权值是整数。
在模板的一个角点处取一个值,并选择一个K使该角点处值为1。
通过这个系数可以使滤波器整数化,由于整数化后的模板权值之和不等于1,为了保证图像的均匀灰度区域不受影响,必须对滤波模板进行权值规范化。
-
四、设计结果
i=imread('C:
\Users\Administrator\Desktop\s15.jpg');
g0=i(:
:
2);figure,imshow(g0);
g1=imnoise(g0,'gaussian',0,0.01);
figure,imshow(g1);
h1=fspecial('gaussian',3,1);
g2=imfilter(g1,h1,'same');
figure;imshow(g2);
1.GUI程序的设计:
(1)调整亮度的程序设计:
functionUntitled_6_Callback(hObject,eventdata,handles)
globalT
axes(handles.axes2);
T=getimage;
prompt={'调整倍数'};
defans={'1'};
p=inputdlg(prompt,'input',1,defans);
p1=str2num(p{1});
y=imadjust(handles.img,[],[],p1);
imshow(y);
handles.img=y;
guidata(hObject,handles);
(2)完成彩图到灰度图的转换 :
functionUntitled_7_Callback(hObject,eventdata,handles)
globalT
axes(handles.axes2);
T=getimage;
x=rgb2gray(handles.img);
imshow(x);handles.img=x;
guidata(hObject,handles);
(3)在开始菜单下的打开按钮的程序:
functionUntitled_2_Callback(hObject,eventdata,handles)
[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'载入图像');
ifisequal(filename,0)|isequal(pathname,0)
errordlg('没有选中文件','出错');
return;
else
file=[pathname,filename];
globalS
S=file;
x=imread(file);
set(handles.axes1,'HandleVisibility','ON');
axes(handles.axes1);
imshow(x);
set(handles.axes1,'HandleVisibility','OFF');
axes(handles.axes2);
imshow(x);
handles.img=x;
guidata(hObject,handles);
end
(4)保存按钮的程序:
functionUntitled_3_Callback(hObject,eventdata,handles)
[sfilename,sfilepath]=uiputfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'保存图像文件','untitled.jpg');
If~isequal([sfilename,sfilepath],[0,0])
sfilefullname=[sfilepath,sfilename];
imwrite(handles.img,sfilefullname);
else
msgbox('你按了取消键','保存失败');
end
(5)退出程序:
functionUntitled_4_Callback(hObject,eventdata,handles)
clc;
closeall;
close(gcf);
clear;
clear;
(6)添加噪声程序:
functionuipanel1_SelectionChangeFcn(hObject,eventdata,handles)
globalT
str=get(hObject,'string');
axes(handles.axes2);
switchstr
case'高斯噪声'
T=getimage;
prompt={'输入高斯噪声1:
','输入高斯噪声2'};
defans={'0','0.02'};
p=inputdlg(prompt,'input',1,defans);
p1=str2num(p{1});
p2=str2num(p{2});
f=imnoise(handles.img,'gaussian',p1,p2);
imshow(f);
handles.img=f;
guidata(hObject,handles);
case'乘性噪声'
T=getimage;
prompt={'输入乘性噪声1:
'};
defans={'0.02'};
p=inputdlg(prompt,'input',1,defans);
p1=str2num(p{1});
f=imnoise(handles.img,'speckle',p1);
imshow(f);
handles.img=f;
guidata(hObject,handles);
end
(7)还原按键的程序:
functionpushbutton1_Callback(hObject,eventdata,handles)
globalS
axes(handles.axes2);
y=imread(S);
f=imshow(y);
handles.img=y;
guidata(hObject,handles);
(8)翻转程序:
functionpushbutton2_Callback(hObject,eventdata,handles)
globalT
axes(handles.axes2);
T=getimage;
prompt={'旋转角度:
'};
defans={'0'};
p=inputdlg(prompt,'input',1,defans);
p1=str2num(p{1});
f=imrotate(handles.img,p1,'bilinear','crop');
imshow(f);
handles.img=f;
guidata(hObject,handles);
2.结果
原图:
原图的灰度图像:
高斯加噪的图:
高斯去噪后的图像:
GUI界面的设计:
GUI界面运行图:
调整亮度:
形成灰度图:
通过添加乘性噪声效果图:
添加高斯噪声形成效果图:
翻转效果:
用户菜单设计:
总结
此次课程设计,要求对MATLAB进行基础的运用和掌握,虽然只是对MATLAB一小部分进行运用。
以前,对MATLAB并没有太多的接触,仅仅是在第一次进行课程设计时利用MATLAB进行了图像的绘制和一些简单的处理函数。
但经过这次我才发现,MATLAB软件功能真的很强大,它的图像工具箱几乎包括所有经典的图像处理方法,可以很方便的对图像进行处理。
对于一款软件的应用还是应该自己动手实际操作才会有深刻理解。
通过这次的课程设计,我意识到了想要做好一件事,要有耐心,细心,要脚踏实地,而不应该毛躁,而且要学会很好的利用网络资源,之前我并没有接触过图像信号处理系统,所以对这方面的知识是一点储备都没有,但是通过网络查询和利用MATLAB实际操作之后,我对图像信息的获得和处理有了一点基本的认识。
其次,做这个东西真的很考验一个人的耐心,尤其在编写程序的时候明明感觉是对的,但是运行出来却不是想要的结果,而且总是很难发现自己错在哪里,这时候就需要足够的耐心去检查程序,发现错误。
在今后的学习过程中,我还会继续深入学习MATLAB,让它更好的为我所用。
参考文献
1.XX:
基于MATLAB的GUI滤波器设计专题论文
2. 张志涌 精通MATLAB 6.5版教程.北京:
北京航天航空大学出版社, 2003(56)
-é=ë