1、 目录一、 实习目的3二、 实习任务3三、 主要内容3四、 算法实现5五、 实习总结11参考文献12一、 实验目的1 用MATLAB或其他的语言来实现数字图像处理方面的一些操作;2 熟悉MATLAB7.1的一些基本函数及与数字图像处理相关的函数;3 熟悉图形用户界面(GUI),并用其来编写界面;4 熟悉在界面(GUI)实现读图像,保存图像,Robert算子、Sobel算子、Prewitt算子、Log算子、Canny算子、zerocross算子进行边缘检测。并能用MATLAB实现以上的功能;5 掌握从简单到复杂的方法,一步一步的实现功能,并能耐心排错,养成合作互助精神。二、 实验任务1实现图像的
2、打开,显示,保存操作。2实现图像的边缘检测,如Robert算子边缘检测,Sobel算子边缘检测,Prewitt算子边缘检测,Log算子边缘检测,Canny算子边缘检测,zerocross算子边缘检测;3实现整个界面的设计,编排,最终达到一种比较完美的效果。三、 主要内容整个程序的设计过程,大致上是按照实习的任务顺序来设计的。基本设计过程如下所示:1、 在刚刚接触MATLAB的GUI设计时,还不太熟悉GUI。因而经过了一段时间的资料查询和书本学习以及和同学们讨论过后,渐渐掌握了基本的GUI用户交互界面的设计方法。2、 首先是新建一个空白的GUI界面,然后根据功能的需要,往界面里拖动各个控件。在这
3、个时候,整个界面的对齐和控件的摆放都需要经过设计。由于我们所设计的界面思路是:将所有需要实现的功能全部摆放在界面上,当使用者进入界面时就能直截了当地看到所有的东西,点击控件就能实现想要的功能。所有功能都能在GUI 界面上直接找到。3、 在设计任务上要求的有几个大范围,我们对各个任务的设计如下:文件的打开、显示、保存。我们将文件的打开、保存以及程序退出放到GUI界面上,点击各个选项就能实现相应功能。可以打开在文件夹MATLAB中*.png、*.tif、*jpg、*.bmp、*.gif格式的图像文件,并将其显示到GUI界面中的“原始图像”和“处理后图像”。“文件保存”则是将当前“处理后图像”以*.
4、jpg的形式保存到文件夹MATLAB中。对于“图像显示”,我们的设计是:当用户一进入GUI界面时,就能看到界面中已经显示出来的两幅的图像,它们就是“待处理图像”和“处理后图像”。而后“待处理图像”在整个功能实现过程中,除了“文件打开”功能会变换显示的图像之外,“待处理图像”一直不做改变以便与“处理后图像”形成对比。实现图像的边缘检测。包括“Robert算子”、“Sobel算子”、“Prewitt算子”、“Log算子”、“Canny算子”zerocross算子这6个选择。这6项均放在一个“button group”“边缘检测”中,每次点击都只有一项“radio Button”起作用,分别对“待处
5、理图像”进行处理后显示到“处理后图像”中,4、 为了图像处理的易于观察性,我们添加了一个名为“恢复原图”的“push Button”。当使用者点击该按钮时,在“处理后图像”中则会显示与“原始图像”相同的未经过处理的图像。这时,使用者可以像刚进入GUI界面一样进行各种处理,若不满意“处理后图像”或者不下心点击了其它不需要的功能,则可以点击该按钮,使图像复原。5、 整个设计过程中,最重要的也是花费最多时间的部分就是为各个功能按钮添加程序代码,从图像的读入到处理后图像的显示,每个细节都需要考虑并且在实验过程进行中反复的纠错和修改。6、 设计完成之后整个界面如下:四、 算法实现读取图片,使用者可以从按
6、钮中读出文件夹“MATLAB”中的图像,并将其显示到两个坐标轴axes1和axes2中。在菜单编辑器中“打开”的Callback中加入如下程序代码:function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)
7、%global imfilename,pathname=. uigetfile(*.*;*.bmp;*.jpg;*.tif;*.png,selecet pictrue);if isequal(filename,0)|isequal(pathname,0) return;endstr=pathname filename;im=imread(str);axes(handles.axes1);imshow(im);setappdata(handles.figure1,im,im);图片保存。当用户想要对处理后图像进行保存时,可以通过按钮实现功能,将“处理后图像”即坐标轴axes2中的图像文件保存到文
8、件夹“MATLAB”中。在菜单编辑器中“保存”的Callback函数中加入如下程序代码:function pushbutton2_Callback(hObject, eventdata, handles)% hObject handle to pushbutton2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)%global BWfilename,pathname=.
9、uiputfile(*.tif;*.jpg;*.png;*.bmp,save pictrue);if isequal(filename,0)|isequal(pathname,0) returnelse str=pathname filename axes(handles.axes2); im=getimage(handles.axes2); imwrite(im,str);End程序退出。当用户点击“退出”按钮,则执行整个GUI界面的退出功能。在菜单编辑器中“退出”的Callback子函数中添加如下代码:function pushbutton3_Callback(hObject, event
10、data, handles)% hObject handle to pushbutton3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)close(gcf) %关闭当前Figure窗口句柄 图像的边缘检测。对于该功能的实现,本程序在一个Button group“边缘检测”中设置了6个radio Button,分别在每个按钮的回调函数Callback中添加代码,每次用户点
11、击该组按钮时只有一个按钮起作用,分别对同一图像进行边缘检测处理。所添加的程序如下:function uipanel5_SelectionChangeFcn(hObject, eventdata, handles)global BW %定义全局变量im=getappdata(handles.figure1,im);str=get(hObject,string); %拿到所选按钮的名称axes(handles.axes2); %使用第二个axes switch str %选择语句 %恢复原图 caseInitial %点击原图按钮 imshow(im); %显示原图 %Robert算子 caseR
12、oberts %点击Roberts边缘检测按钮 BW=edge(im,roberts); imshow(BW); %Sobel算子caseSobel %点击Sobel边缘检测按钮 BW=edge(im,sobel,0.02); imshow(BW);%Prewitt算子casePrewitt %点击Prewitt边缘检测按钮 BW=edge(im,prewitt,0.04); imshow(BW); %LOG算子 caseLog %点击Log边缘检测按钮 BW=edge(im, log,0.003); imshow(BW); %Cannny算子caseCanny %点击Canny边缘检测按钮
13、BW=edge(im,canny,0.2); imshow(BW);caseZerocross %点击Zerocross边缘检测按钮 BW=edge(im,zerocross,0.01); imshow(BW);end;guidata(hObject,handles)五、 总结 虽然这次实习只有二个星期的时间,但是我们对图像处理的各种方法及应用有了更深的理解,学会了应用MATLAB软件及GUI来实现界面的操作和编程处理。MATLAB是我们在以前和以后的学习工作中都会经常应用到的软件,但是在以前还是对其了解不足,操作不是很了解,在实习之初便因为这个问题而无从下手。于是我们寻找了许多这方面的书籍以
14、及应用网络教程来对其进行学习,逐渐的增强了对MATLAB及GUI的了解,能够摸索着开始进行编写。实习中也遇到了很多问题,但通过查阅书籍、同学间讨论、请教老师以及网上查找最终能够得以解决,完成这次实习。 通过这次实习,我们学会了应用MATLAB软件来实现图像处理中的一些重要的操作并且对MATLAB也能够更加了解,对其的一些常见函数以及与图像处理相关的函数都比较了解,并能够应用这些函数来解决图像处理的问题。GUI对于我们是一个新的知识,通过各方面的学习,我们最终对GUI也有了比较深的了解,能够很顺利的应用GUI来设计出适合并且美观的界面。图像处理是我们这学期的一门很重要的课程,在课上虽然学习了很多
15、知识,但是不经过自己动手操作而只看到书上的一些概念和处理的图片并不能很清楚的了解到各种操作的效果,并且不动手操作,知识就只能局限于书本上。经过这次实习,不但能够让我们再次复习了本学期所学的图像处理的知识,加深了对这些知识的记忆,并且让我们对图像处理的各种处理方法有了更加直观的了解,不但加深了记忆也能因此更加了解各种处理方法的应用,可以用MATLAB软件来对这些处理来实现。 这次实习要实现的内容比较多,其中有一些易操作的也有一些比较复杂的,在实习过程中也会遇到一些难以突破的问题,但是在这个过程中需要我们耐心的学习,一步一步通过各种途经学习到解决的方法,也培养了我们的耐心和学习的能力。这次是四人一
16、组的实习,因此合理的分工合作也是很重要的,通过实习也培养了我们之间分工协作互帮互助的精神。 总体来说,我们的这次实习还是比较成功的,较为成功的完成了我们的实习任务,并且达到到了我们实习的目的。六、 参考文献MATLAB 7.X图像处理 :贺兴华、周媛媛、王继阳、周晖等编著,人民邮电出版社 2006年版MATLAB GUI设计学习手记 :罗华飞编著,北京航空航天大学出版社2009版。数字图像处理(MATLAB版) :冈萨雷斯著、阮秋琦等译,电子工业出版社2005版。MATLAB基础及其应用教程 :周开利、邓春晖主编,北京大学出版社2007版。MATLAB在信号与图像处理中的应用 :朱习军、隋思涟、张宾、刘尊年主编,电子工业出版社2009版。MATLAB语言与工程数据分析 :隋思涟、王岩主编,清华大学出版社2009版。MATLAB函数速查手册 :邓薇编著,人民邮电出版社2008版。本文来自网络,版权归原作者所有,请下载后,尽快删除。