基于MATLAB的图像处理教学内容.doc

上传人:1595****071 文档编号:52291017 上传时间:2022-10-22 格式:DOC 页数:48 大小:1.88MB
返回 下载 相关 举报
基于MATLAB的图像处理教学内容.doc_第1页
第1页 / 共48页
基于MATLAB的图像处理教学内容.doc_第2页
第2页 / 共48页
点击查看更多>>
资源描述

《基于MATLAB的图像处理教学内容.doc》由会员分享,可在线阅读,更多相关《基于MATLAB的图像处理教学内容.doc(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Good is good, but better carries it.精益求精,善益求善。基于MATLAB的图像处理-目录一、 .3二、 .3三、 .3四、 .3五、 .4六、 .56.1、 文件.56.1.1、打开.56.1.2、保存.56.1.3、退出.56.2、编辑.56.2.1、灰度.56.2.2、亮度.66.2.3、截图.76.2.4、缩放.76.3、旋转.96.3.1、上下翻转.96.3.2、左右翻转.96.3.3任意角度翻转.96.4、噪声.106.5、滤波.106.6、直方图统计116.7、频谱分析.126.7.1、频谱图.126.7.2、通过高通滤波器.126.7.3、通过

2、低通滤波器.136.8、灰度图像处理.146.8.1、二值图像.146.8.2、创建索引图像.146.9、颜色模型转换.146.10、操作界面设计.15七、 程序调试及结果分析.15八、 心得体会.16九、 参考文献.17十、 附录.18基于MATLAB的图像处理的课程设计摘要:数字图像处理技术是20世纪60年代发展起来的一门新兴学科,随着图像处理理论和方法的进一步完善,使得数字图像处理技术在各个领域得到了广泛应用,并显示出广阔的应用前景。MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。根据它提

3、供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或编程以完成各自的计算。MATLAB中集成了功能强大的图像处理工具箱。由于MATLAB语言的语法特征与C语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式,而且这种语言可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以MATLAB在图像处理的应用中具有很大的优势。关键词:MATLAB,数字图像处理一、 课程设计目的综合运用MATLAB工具箱实现图像处理的GUI程序设计。二、 课程设计要求1)熟悉和掌握MATLAB程序设计方法2)掌握MATLABGUI程序设计3)学习和熟悉MATLAB图像处理

4、工具箱4)学会运用MATLAB工具箱对图像进行处理和分析三、 课程设计的内容学习MATLABGUI程序设计,利用MATLAB图像处理工具箱,设计和实现自己的Photoshop。要求:按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。然后按照自己拟定的功能要求进行程序设计和调试。以下几点是程序必须实现的功能。1)图像的读取和保存。2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域,显示和保存该选择区域。4)编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行

5、放大和缩小整数倍的操作,并保存,比较几种插值的效果。5)图像直方图统计和直方图均衡,要求显示直方图统计,比较直方图均衡后的效果。6)能对图像加入各种噪声,并通过几种滤波算法实现去噪并显示结果。比较去噪效果。四、 题目分析信息化社会中,计算机在各种信息处理中发挥着重要的作用。我们可以借助计算机,对数字图像进行处理,以达到不同的效果。根据题目的要求,除了实现要求的功能外,还有很多的功能需要用到。(1)、将一个RGB图像转换为灰度图像。(2)、可以对图像做各种变换,如旋转等。(3)、有时并不需要图像显示其细节部分,只要其轮廓,这时候不要很高的灰度级。可以把图像转换为二值图像,进行图像腐蚀,或是创建索

6、引图像等。(4)、分析一个图像的频谱特征,利用傅里叶变换,将图像从空间域变换到频域,然后进行各种处理,经过高通滤波器或是低通滤波器。(5)、为了科学地定量描述和使用颜色,人们提出了各种颜色模型,按用途可分为三类:计算颜色模型,视觉颜色模型和工业颜色模型。有时为了不同的需要,要对颜色模型进行转换。五、 总体设计六、 由于要实现的功能并不是很多,所以在排版的过程中,把各个功能都安排在目录栏上,整体安排如下图所示:同时在调节亮度时,虽然可以同对话框的形式输入调节的比例系数,但是这样效果不好了,不容易调节,因此这里考虑用滚动条来调节。因此,总体的设计界面如下图所示:具体设计6.1、 文件6.1.1、打

7、开为了让使用者更方便的使用,所以在设计的时候,通过对话框的形式来选择文件,选择uigetfile函数来实现,uigetfile函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件,由于这个GUI程序的操作对象是图像文件,所以设置这里的缺省后缀名为“.bmp”。Uigetfile函数的调用格式为name,path=yigetfile(),在按下对话框中的执行按钮“打开”后,返回选择的文件名和路径,分别保存到“name”和“path”中。如果按下取消按钮或是发生错误,则返回值是0。根据返回值的情况,如果是0,则弹出提示错误的对话框,否则,通过imread函数读出图像数据,把图像数据赋

8、值给全局变量handles.img。6.1.2、保存同样也通过对话框的形式来保存图像数据,通过uigetfile函数选择文件名和路径,用getimage(gca)取出坐标2变换后的图像数据保存到变量i,最后用imwrite函数,把数据i存到指定的文件。6.1.3、退出退出比较简单,程序如下所示:clc;closeall;close(gcf);6.2、 编辑6.2.1、灰度由于RGB图像是三维图像,所以图像数据是一个三维数组,为了显示灰度图像,把三维图像降为二维,可以只取其中的二维数据,实现方法程序为:y=(handles.img(:,:,1);%当然也可以选择(:,:,2)或(:,:,3)im

9、show(y);但是这样的话,根据程序所选的不同,图像数据也不同,显示也就不一样。另一种方法就是,运用rgb2gray函数实现彩色图像到灰度图像的转换。程序为:y=rgb2gray(handles.img);imshow(y);这个程序只能用于RGB图像转换灰度图像,当原始图像本来就是灰度图像时,运行该程序时就会出错,但是使用者在使用时有时并不知道这些,为了使该程序更加完善,应该在使用者原先图像时灰度图像时使用该功能时,应该要显示提示类信息。所以在开始时应该要有一个RGB图像或是灰度图像的判断过程。完整的程序如下:ifisrgb(handles.img)y=rgb2gray(handles.i

10、mg);imshow(y);elsemsgbox(这已经是灰度图像,转换失败);end如果原图是RGB,执行该操作的结果如下图:如果原图本身已经是灰度图像了,执行该操作弹出如右图所示的提示对话框6.2.2、亮度用imadjust函数,其调用格式如下:g=imadust(f,low_inhigh_in,low_outhigh_out),gamma)gamma表示映射性质,默认值是1表示线性映射。由于该函数有五个参数需要输入,为了方便用户改变,所以这里设计一个输入对话框,用户通过对话框把五个参数赋值给low_inhigh_in,low_outhigh_out,gamma这五个参数,如下一组命令建立

11、了如图所示的输入对话框:prompt=输入参数1,输入参数2,输入gamma;defans=00.7,01,1;p=inputdlg(prompt,输入参数,1,defans);但是,这种方法并不能很好的让用户能够对图像进行任意的亮度和对比度变化调整,有时并不事先知道参数的值要多少,也不关心,而是任意调节的,直到满意为止。所以应该用滑动条来调节图像的亮度和对比度,这样更适合用户的使用习惯。由于imadjust函数有五个参数,所以原则上需要设计五个滑动条来调节对比度,这对用户来说显然比较麻烦,因此在设计的时候固定其中的三个参数,通过调节两个参数的值来改变亮度和对比度。0handles.beta,

12、01,handles.gm,这里的变量handles.beta和handles.gm就通过滑动条得到,滑动条设计如下图:亮度调整的tag名为ld,取值范围01,gamma值的tag名为gamma,取值范围为05。获取滑动条参数的程序如下:handles.beta=get(handles.ld,value);handles.gm=get(handles.gamma,value);执行该操作,调节滑动条到上图所示位置,结果如下图:6.2.3、截图在MATLAB中,用函数imcrop实现对图像的剪切操作。该操作剪切的是图像中的一个矩形子图,用户可以通过参数指定这个矩形四个顶点的坐标,也可以交互地用鼠

13、标选取这个矩形。Imcrop函数的调用格式如下:y=imcrop(handles.img);不管handles.img是三维的还是二维数据,该函数都能进行操作。下图就是对三维图像的截图:6.2.4、缩放在MATLAB中,用函数imresize来实现对图像的放大或缩小。插值方法可选用三种方法,最近邻插值,双线性插值,双三次插值。该函数的调用格式如下:Bimresize(A,m,method)其中:参数method用于指定插值的方法,可选的值为“nearest”(最近邻法),“bilinear”(双线性插值)、“bicubic”(双三次插值),缺省值为“nearest”。Bimresizee(Am

14、,method)表示返回原图A的m倍放大图像(m小于1时实际上是缩小);下图就是采用邻近插值法的放大和缩小图像,参数值保持默认设置:虽然处理后看不出放大的效果,这是由于坐标轴限制的原因,如果把处理后的图片保存起来,再把处理后的文件打开,就可以看到比较明显的放大效果。缩小后的结果如下:6.3、 旋转6.3.1、上下翻转函数flipud是实现一个二维矩阵的上下翻转,如a=12;34,经过该函数处理后,原矩阵变为34;12;所以利用该函数也可以对图像进行上下翻转处理,但由于该函数针对二维数据的处理,所以在写程序时,要对RGB图像和灰度图像分开处理,这就要用到isrgb函数来判断,如果是灰度图像,则可

15、以直接用这个函数进行处理,否则就要对RGB图像进行降维处理,fork=1:3y(:,:,k)=flipud(x(:,:,k);end处理结果如图:6.3.2、左右翻转对图像的左右翻转也可以用fliplr函数来处理,同样的,也要对灰度和彩色图像分开处理,处理结果如图:6.3.3任意角度翻转用函数imrotate来实现对图像的插值旋转。该函数的调用格式如下:Bimrotate(A,angle,method,crop)其中,参数method用于指定插值的方法,可选的值可以有三种,分别为邻近插值,双线性插值,双三次插值,缺省时为邻近插值,参数angle代表旋转的角度。一般来说,旋转后的图像会比原图大,

16、用户可以指定“crop”参数对旋转后的图像进行剪切(取图像的中间部分),使返回的图像与原图大小相同。执行结果为:6.4、 噪声经常用到的噪声有三种,高斯噪声,椒盐噪声,乘性噪声,可以通过以下三个函数来实现:y=imnoise(handles.img,gaussian,p1,p2);%高斯噪声y=imnoise(x,salt&pepper,p1);%椒盐噪声y=imnoise(handles.img,speckle,p1);%乘性噪声p1,p2的参数也通过输入对话框的形式得到,原图加入高斯噪声后结果如下所示:6.5、 滤波这里选择三种滤波方法,k=medfilt2(handles.noise_i

17、mg);%中值滤波k=wiener2(handles.noise_img,5,5);%自适应滤波k=filter2(fspecial(average,3),handles.noise_img)/255;%平滑滤波同样的,这些函数也是针对二维数据,所以要先判断是彩色图像还是灰度图像,然后分别进行处理,下面是对彩色图像的自适应滤波处理:i=handles.noise_img;ifisrgb(i)a=handles.noise_img(:,:,1);b=handles.noise_img(:,:,2);c=handles.noise_img(:,:,3);k(:,:,1)=wiener2(a,5,5

18、);k(:,:,2)=wiener2(b,5,5);k(:,:,3)=wiener2(c,5,5);imshow(k);执行结果如图:对其他方法的滤波程序也类似,由于把各个滤波方法放在一个选择框里,所以程序要用以下的选择语句:switchstrcase中值滤波case自适应滤波case平滑滤波end6.6、 直方图统计用imhist函数对图像数据进行直方图统计,x=imhist(handles.img(:,:,1);bar(horz,x);其中,x矩阵的数据是0255灰度值的统计个数,如果直接对x矩阵数据进行图形图显示,由于有256个数据,在坐标系中就会很密集,为了更清楚的显示条形图,所以在程

19、序设计时,把x数据进行部分提取,x1=x(1:10:256);horz=1:10:256;bar(horz,x1);除了显示数据的直方图统计外,还可以对图像进行均衡处理,所用到的函数是histeq,这两个函数同样只使用于二维数据,所以也要对二维和三维数据分开处理。直方图显示和均衡后的图像分别如下图所示6.7、 频谱分析6.7.1、频谱图为了得到图像的频谱图,先要对数据进行傅里叶变换,用fft2函数对二维数据进行快速傅里叶变换,同时为了更好的观察频谱图,需要把fft2变换后的数据进行平移,利用fftshift函数,把快速傅里叶变换的DC组件移到光谱中心。这样图像能量的低频成分将集中到频谱中心,图

20、像上的边缘、线条细节信息等高频成分将分散在图像频谱的边缘。如下图所示:6.7.2、通过高通滤波器axes(handles.axes2);x=(handles.img);ifisrgb(x)msgbox(这是彩色图像,不能通过高通滤波器,失败);elsey1=imnoise(x,gaussian);%加高斯噪声f=double(y1);%数据类型转换k=fft2(f);%傅立叶变换g=fftshift(k);%转换数据矩阵M,N=size(g);nn=2;d0=3;%截止频率为3m=fix(M/2);n=fix(N/2);fori=1:Mforj=1:Nd=sqrt(i-m)2+(j-n)2);

21、%计算高通滤波器传递函数ifdmccmfun1.mfun2.m.其中fun1就是最后的可执行文件的名称。3、通过本次课程设计,使自己对MATLABGUI设计流程有了比较深刻的体会,同时也了解了一般软件设计的过程。在设计过程中碰到了很多的问题,通过这些问题,使自己分析问题,解决问题的能力得到了较大的提高。九、 参考文献【1】 郑阿奇,曹戈,赵阳.MATLAB实用教程M.北京:电子工业出版社【2】 程卫国,冯峰,姚东,徐听.MATLAB5.3应用指南M.北京:人民邮电出版社十、 陈杨.MATLAB6.X图像编程与图像处理M.西安:西安电子科技大学出版社附录-functionvarargout=tw

22、o(varargin)%Begininitializationcode-DONOTEDITgui_Singleton=1;gui_State=struct(gui_Name,mfilename,.gui_Singleton,gui_Singleton,.gui_OpeningFcn,two_OpeningFcn,.gui_OutputFcn,two_OutputFcn,.gui_LayoutFcn,.gui_Callback,);ifnargin&ischar(varargin1)gui_State.gui_Callback=str2func(varargin1);endifnargoutva

23、rargout1:nargout=gui_mainfcn(gui_State,varargin:);elsegui_mainfcn(gui_State,varargin:);end%Endinitializationcode-DONOTEDIT%-Executesjustbeforeerzhiismadevisible.functiontwo_OpeningFcn(hObject,eventdata,handles,varargin)%Thisfunctionhasnooutputargs,seeOutputFcn.-%接下来是菜单的程序-functionfile_Callback(hObje

24、ct,eventdata,handles)-%文件打开程序functionopen_Callback(hObject,eventdata,handles)name,path=uigetfile(*.bmp,载入图像);ifisequal(name,0)|isequal(path,0)errordlg(没有选中文件,出错);return;elsex=imread(path,name);axes(handles.axes1);imshow(x);handles.img=x;handles.noise_img=x;guidata(hObject,handles)end-functionsave_Ca

25、llback(hObject,eventdata,handles)%文件保存filename,pathname=uiputfile(*.bmp,图片保存为);ifisequal(filename,pathname,0,0)errordlg(没有保存,出错);return;elsefile=strcat(pathname,filename);(handles.axes2);i=getimage(gca);imwrite(i,file);end-functionexit_Callback(hObject,eventdata,handles)clc;closeall;close(gcf);-%编辑菜

26、单的程序-functionedit_Callback(hObject,eventdata,handles)-functionhuidu_Callback(hObject,eventdata,handles)%灰度处理axes(handles.axes2);ifisrgb(handles.img)y=rgb2gray(handles.img);%RGBimshow(y);elsemsgbox(这已经是灰度图像,转换失败);end-functionliangdu_Callback(hObject,eventdata,handles)%亮度处理prompt=输入参数1,输入参数2,输入gamma;d

27、efans=00.7,01,1;p=inputdlg(prompt,输入参数,1,defans);p1=str2num(p1);p2=str2num(p2);p3=str2num(p3);gamma=p3;x=(handles.img);y=imadjust(x,p1,p2,gamma);axes(handles.axes2);imshow(y);-functionjietu_Callback(hObject,eventdata,handles)%截图set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);y=imcrop(hand

28、les.img);imshow(y);handles.Timage=y;-functionfangda_Callback(hObject,eventdata,handles)-functionlingjz_Callback(hObject,eventdata,handles)%邻近插值放大axes(handles.axes2);prompt=输入放大倍数:;defans=2;p=inputdlg(prompt,输入放大倍数,1,defans);p1=str2num(p1);y=imresize(handles.img,p1,nearest);%最近邻插值法放大imshow(y);-functi

29、onshuangxianfa_Callback(hObject,eventdata,handles)%双线放大axes(handles.axes2);prompt=输入放大倍数:;defans=2;p=inputdlg(prompt,输入放大倍数,1,defans);p1=str2num(p1);y=imresize(handles.img,p1,bilinear);%最近邻插值法放大imshow(y);-functionshuangsanci_Callback(hObject,eventdata,handles)%双三次放大axes(handles.axes2);prompt=输入放大倍数:

30、;defans=2;p=inputdlg(prompt,输入放大倍数,1,defans);p1=str2num(p1);y=imresize(handles.img,p1,bicubic);imshow(y);-functionsuoxiao_Callback(hObject,eventdata,handles)%邻近插值缩小axes(handles.axes2);prompt=输入放大倍数:;defans=0.2;p=inputdlg(prompt,输入放大倍数,1,defans);p1=str2num(p1);y=imresize(handles.img,p1,nearest);%最近邻插值法缩小imshow(y);-functionshuangxian_Callback(hObjec

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁