《基于MATLAB的图形滤波器程序设计演示教学.doc》由会员分享,可在线阅读,更多相关《基于MATLAB的图形滤波器程序设计演示教学.doc(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。基于MATLAB的图形滤波器程序设计-华侨大学厦门工学院MATLAB课程设计报告题目:专业、班级:学生姓名:学号:指导教师:2014年月日MATLAB课程设计任务书系电子信息工程专业电子信息工程学生姓名陈嘉贤学号1102201005设计题目基于MATLAB的图形滤波器程序设计基本要求:1、 掌握MATLAB编程的原理和方法。2、 熟悉语音信号的基本特征和分析处理方法。3、 掌握数字信号处理的基本概念、理论和方法。熟练运用MATLAB设计合适的IIR数字滤波器。主要内容:学习掌握数字图像处理中的图像滤波特
2、点,并了解MATLAB语言中的相关函数,设计程序实现各种图像滤波功能以及一些图片处理。设计要求:自行编写算法,并进行调试,最终实现图像滤波的数字图像处理功能。学有余力的情况下,可以考虑采用图形用户界面(GUI)的方法实现。目录内容4一、设计内容4二、设计要求4三、方案论证与设计原理描述4四、设计结果51.GUI程序的设计:6(1)调整亮度的程序设计:6(2)完成彩图到灰度图的转换:6(3)在开始菜单下的打开按钮的程序:6(4)保存按钮的程序:7(5)退出程序:7(6)添加噪声程序:7(7)还原按键的程序:8(8)翻转程序:82.结果8总结12参考文献12附录12内容一、设计内容学习掌握数字图像
3、处理中的图像滤波特点,并了解MATLAB语言中的相关函数,设计程序实现各种图像滤波功能。二、设计要求自行编写算法,并进行调试,最终实现图像滤波的数字图像处理功能。学有余力的情况下,可以考虑采用图形用户界面(GUI)的方法实现。三、方案论证与设计原理描述图像滤波是改变图像质量,去除图像噪声的一种方法。主要包括空间域滤波和频域滤波。空间域滤波主要包括线性滤波、中值滤波、维纳滤波。滤波运算matlab函数imfilter(A,H)(或filter2(B,X)),其中A/B为原始图像,H/X为滤波掩膜。fspecial(type,para):主要的三种类型:1、average:均值滤波,参数为hsiz
4、e代表模板尺寸,默认值为【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.imfinfoimfinfo函数用于读取图像文件的有关信息,如:imfinfo(e:w01.jpg)3. rgb2grayrgb2gray()函数用于把真彩
5、图转换为灰度图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
6、);%高斯拉普拉斯(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为加噪声后图象的
7、灰度矩阵一般情况下用(式3-1)表示即可,(式3-2)中表示是允许修改参数,而(式3-1)中使用缺省参数;(式3-3)中对图像I加高斯噪声,均值为m,方差为v。高斯平滑滤波器的原理高斯滤波器是根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对去除服从正态分布的噪声有很好的效果。一维零均值高斯函数决定了高斯滤波器的宽度。对图像来说,常用二维零均值离散高斯函数做平滑滤波器,在高斯滤波器的设计中,高斯函数的最佳逼近由二项式展开的系数决定。由高斯函数的可分离性得到,二维高斯滤波器能用2个一维高斯滤波器逐次卷积来实现,一个沿水平方向,一个沿垂直方向。实际上,这种运算可以通过使用单个一维高斯模
8、板,对两次卷积之间的图像和最后卷积的结果图像进行转置来完成。对较大的滤波器,二项式系数对大多数计算机来说都太多,但是,任意大的高斯滤波器都能通过重复使用小的高斯滤波器来实现。高斯滤波器的二项式逼近的可用高斯函数拟合二项式系数的最小方差来计算设计高斯滤波器的另一种途径是直接从离散的高斯分布中计算模板值。为了计算方便,一般希望滤波器权值是整数。在模板的一个角点处取一个值,并选择一个K使该角点处值为1。通过这个系数可以使滤波器整数化,由于整数化后的模板权值之和不等于1,为了保证图像的均匀灰度区域不受影响,必须对滤波模板进行权值规范化。-四、设计结果i=imread(C:UsersAdministra
9、torDesktops15.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)globalTaxes(handles.axes2);T=getimage;prompt=调整倍数;defans
10、=1;p=inputdlg(prompt,input,1,defans);p1=str2num(p1);y=imadjust(handles.img,p1);imshow(y);handles.img=y;guidata(hObject,handles);(2)完成彩图到灰度图的转换:functionUntitled_7_Callback(hObject,eventdata,handles)globalTaxes(handles.axes2);T=getimage;x=rgb2gray(handles.img);imshow(x);handles.img=x;guidata(hObject,h
11、andles);(3)在开始菜单下的打开按钮的程序:functionUntitled_2_Callback(hObject,eventdata,handles)filename,pathname=uigetfile(*.jpg;*.bmp;*.tif;*.*,载入图像);ifisequal(filename,0)|isequal(pathname,0)errordlg(没有选中文件,出错);return;elsefile=pathname,filename;globalSS=file;x=imread(file);set(handles.axes1,HandleVisibility,ON);a
12、xes(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);Ifisequal(sfilename,s
13、filepath,0,0)sfilefullname=sfilepath,sfilename;imwrite(handles.img,sfilefullname);elsemsgbox(你按了取消键,保存失败);end(5)退出程序:functionUntitled_4_Callback(hObject,eventdata,handles)clc;closeall;close(gcf);clear;clear;(6)添加噪声程序:functionuipanel1_SelectionChangeFcn(hObject,eventdata,handles)globalTstr=get(hObjec
14、t,string);axes(handles.axes2);switchstrcase高斯噪声T=getimage;prompt=输入高斯噪声1:,输入高斯噪声2;defans=0,0.02;p=inputdlg(prompt,input,1,defans);p1=str2num(p1);p2=str2num(p2);f=imnoise(handles.img,gaussian,p1,p2);imshow(f);handles.img=f;guidata(hObject,handles);case乘性噪声T=getimage;prompt=输入乘性噪声1:;defans=0.02;p=inpu
15、tdlg(prompt,input,1,defans);p1=str2num(p1);f=imnoise(handles.img,speckle,p1);imshow(f);handles.img=f;guidata(hObject,handles);end(7)还原按键的程序:functionpushbutton1_Callback(hObject,eventdata,handles)globalSaxes(handles.axes2);y=imread(S);f=imshow(y);handles.img=y;guidata(hObject,handles);(8)翻转程序:functio
16、npushbutton2_Callback(hObject,eventdata,handles)globalTaxes(handles.axes2);T=getimage;prompt=旋转角度:;defans=0;p=inputdlg(prompt,input,1,defans);p1=str2num(p1);f=imrotate(handles.img,p1,bilinear,crop);imshow(f);handles.img=f;guidata(hObject,handles);2.结果原图:原图的灰度图像:高斯加噪的图:高斯去噪后的图像:GUI界面的设计:GUI界面运行图:调整亮度
17、:形成灰度图:通过添加乘性噪声效果图:添加高斯噪声形成效果图:翻转效果:用户菜单设计:总结此次课程设计,要求对MATLAB进行基础的运用和掌握,虽然只是对MATLAB一小部分进行运用。以前,对MATLAB并没有太多的接触,仅仅是在第一次进行课程设计时利用MATLAB进行了图像的绘制和一些简单的处理函数。但经过这次我才发现,MATLAB软件功能真的很强大,它的图像工具箱几乎包括所有经典的图像处理方法,可以很方便的对图像进行处理。对于一款软件的应用还是应该自己动手实际操作才会有深刻理解。通过这次的课程设计,我意识到了想要做好一件事,要有耐心,细心,要脚踏实地,而不应该毛躁,而且要学会很好的利用网络
18、资源,之前我并没有接触过图像信号处理系统,所以对这方面的知识是一点储备都没有,但是通过网络查询和利用MATLAB实际操作之后,我对图像信息的获得和处理有了一点基本的认识。其次,做这个东西真的很考验一个人的耐心,尤其在编写程序的时候明明感觉是对的,但是运行出来却不是想要的结果,而且总是很难发现自己错在哪里,这时候就需要足够的耐心去检查程序,发现错误。在今后的学习过程中,我还会继续深入学习MATLAB,让它更好的为我所用。参考文献1.百度:基于MATLAB的GUI滤波器设计专题论文2.张志涌精通MATLAB6.5版教程.北京:北京航天航空大学出版社,2003(56)-=附录系统原理图或完整程序程序
19、设计:i=imread(C:UsersAdministratorDesktop截图12.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);GUI程序的完整设计:functionvarargout=chenjiaxian(varargin)gui_Singleton=1;gui_State=struct(gui_Name,mfilename,.g
20、ui_Singleton,gui_Singleton,.gui_OpeningFcn,chenjiaxian_OpeningFcn,.gui_OutputFcn,chenjiaxian_OutputFcn,.gui_LayoutFcn,.gui_Callback,);ifnargin&ischar(varargin1)gui_State.gui_Callback=str2func(varargin1);endifnargoutvarargout1:nargout=gui_mainfcn(gui_State,varargin:);elsegui_mainfcn(gui_State,varargi
21、n:);endfunctionchenjiaxian_OpeningFcn(hObject,eventdata,handles,varargin)handles.output=hObject;guidata(hObject,handles);functionvarargout=chenjiaxian_OutputFcn(hObject,eventdata,handles)varargout1=handles.output;functionpushbutton1_Callback(hObject,eventdata,handles)globalSaxes(handles.axes2);y=imr
22、ead(S);f=imshow(y);handles.img=y;guidata(hObject,handles);functionpushbutton2_Callback(hObject,eventdata,handles)globalTaxes(handles.axes2);T=getimage;prompt=旋转角度:;defans=0;p=inputdlg(prompt,input,1,defans);p1=str2num(p1);f=imrotate(handles.img,p1,bilinear,crop);imshow(f);handles.img=f;guidata(hObje
23、ct,handles);functionUntitled_2_Callback(hObject,eventdata,handles)filename,pathname=uigetfile(*.jpg;*.bmp;*.tif;*.*,载入图片);ifisequal(filename,0)|isequal(pathname,0)errordlg(没有选中文件,出错);return;elsefile=pathname,filename;globalSS=file;x=imread(file);set(handles.axes1,HandleVisibility,ON);axes(handles.ax
24、es1);imshow(x);set(handles.axes1,HandleVisibility,OFF);axes(handles.axes2);imshow(x);handles.img=x;guidata(hObject,handles);endfunctionUntitled_3_Callback(hObject,eventdata,handles)sfilename,sfilepath=uiputfile(*.jpg;*.bmp;*.tif;*.*,保存图像文件,untitled.jpg);ifisequal(sfilename,sfilepath,0,0)sfilefullnam
25、e=sfilepath,sfilename;imwrite(handles.img,sfilefullname);elsemsgbox(你按了取消键,保存失败);endfunctionUntitled_4_Callback(hObject,eventdata,handles)clc;closeall;close(gcf);clear;functionUntitled_6_Callback(hObject,eventdata,handles)globalTaxes(handles.axes2);T=getimage;prompt=调整倍数;defans=1;p=inputdlg(prompt,i
26、nput,1,defans);p1=str2num(p1);y=imadjust(handles.img,p1);imshow(y);handles.img=y;guidata(hObject,handles);functionUntitled_7_Callback(hObject,eventdata,handles)globalTaxes(handles.axes2);T=getimage;x=rgb2gray(handles.img);imshow(x);handles.img=x;guidata(hObject,handles);functionUntitled_1_Callback(h
27、Object,eventdata,handles)functionUntitled_5_Callback(hObject,eventdata,handles)functionuipanel1_SelectionChangeFcn(hObject,eventdata,handles)globalTstr=get(hObject,string);axes(handles.axes2);switchstrcase高斯噪声T=getimage;prompt=输入高斯噪声1:,输入高斯噪声2;defans=0,0.02;p=inputdlg(prompt,input,1,defans);p1=str2num(p1);p2=str2num(p2);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(p1);f=imnoise(handles.img,speckle,p1);imshow(f);handles.img=f;guidata(hObject,handles);end-