1、 钦钦州学院课程设计报告课程名称:数字图像处理 系 部:数学与计算机学院 专业班级:计科本 082 班 学生姓名:尹晓玲、李凤艳、彭程程指导教师:刘志先 完成时间: 2011-6-21 报告成绩: 评阅意见:评阅教师 日期 形态学图像处理2目 录一、 课程设计目的3二、 课程设计的要求3三、 框架和功能模块设计4四、 设计的具体实现54.1、文件54.1.1、打开54.1.2、保存54.1.3、另保存54.1.4、打印64.1.5、退出64.2、操作64.2.1、膨胀64.2.2、腐蚀74.2.3、开运算84.2.4、闭运算104.2.5、开-闭运算 104.2.6、闭-开运算104.2.7、
2、击中或击不中变换104.2.6、重构104.3、截图10五、 程序调试及结果分析11六、 心得体会11七、 参考文献11八、 附录12形态学图像处理3基于 Matlab 的图像处理课程设计报告一、课程设计目的综合运用 MATLAB 工具箱实现图像处理的 GUI 程序设计。1)熟悉和掌握 MATLAB 程序设计方法2)掌握 MATLAB GUI 程序设计3)学习和熟悉 MATLAB 图像处理工具箱4)学会运用 MATLAB 工具箱对图像进行处理和分析二、课程设计的要求要求利用 MATLAB 或 VC 设计图形用户界面,并实现以下图像处理功能:(1)实现图像文件的打开、保存、另存为、打印功能;(2
3、)选择某种结构元素,对打开的图像进行膨胀、腐蚀操作并分别显示(可以利用 STREL 函数) ;(3)实现开运算及闭运算并分别显示;(4)实现击中或击不中变换;(5)实现重构。三、框架和功能模块设计根 据 题 目 的 要 求 , 各 个 功 能 都 安 整 体 安 排 如 下 图 所 示 :形态学图像处理4进 入 后 总 体 的 设 计 界 面 如 下 图 所 示 :四、 设计的具体实现4.1、 图像文件的打开、保存、另存为、打印功能4.1.1、图像文件的打开功能使用者通过从“文件”“打开”读出想要打开的图像。让使用者更方便的使用,通过对话框的形式来选择文件,选择 uigetfile 函数来实现
4、,uigetfile函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件,由于这个 GUI 程序的操作对象是图像文件,所以设置这里的缺省后缀名为“.bmp”。操作打开得到如下对话框:形态学图像处理5实现“打开”功能的程序为:function m_file_open_Callback(hObject, eventdata, handles)% hObject handle to m_file_open (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles struc
5、ture with handles and user data (see GUIDATA)global file;% 全局变量,存放读取的图像set(gcf,Color,0.925,0.914,0.847);%设置界面的背景色FileName,PathName = uigetfile(*.jpg; *.bmp; *.gif; *.png; *.tif; *.cur; *.hdf, *.ico; *.pbm; *.pcx; *.pgm; *.pnm; *.ppm; *.ras; *.xwd);if isequal(FileName, 0)file = PathName, FileName;im=
6、imread(file);imshow(file);elseclear;end4.1.2、保存图像功能和打开一样,保存功能也是在“文件”的下拉菜单中,打开的图像是原图,不需要保存,需要保存的是处理后的图像,通过对话框的形式来保存图像数据,通过 uigetfile 函数选择文件名和路径,用 imwrite 函数,把数据 i 存到指定的文件。实现“保存”功能的程序为:function m_file_save_Callback(hObject, eventdata, handles)% hObject handle to m_file_save (see GCBO)% eventdata reser
7、ved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global file;% 全局变量,存放读取的图像imwrite(file);%保存在原目录4.1.3、图像另存为功能形态学图像处理6同样“另存为”也在“文件”的下拉菜单下,也通过对话框的形式来保存图像数据,通过 uigetfile 函数选择文件名和路径,最后用 imwrite 函数,把数据 i 存到指定的文件。操作得到如下图:实现“另存为”功能的程序为:function m_
8、file_savenew_Callback(hObject, eventdata, handles)% hObject handle to m_file_savenew (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global file;% 全局变量,存放读取的图像FileName,PathName = uiputfile(*.jpg;*.bmp;*.tiff;*.gi
9、f,Save as);imwrite(uint8(file),strcat(PathName,FileName);4.1.4、文件的打印功能使用者通过“文件”“打印”,可使用打印功能,正确操作得到如图所示:形态学图像处理7实现“打印”功能的程序为:function m_file_type_Callback(hObject, eventdata, handles)% hObject handle to m_file_type (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles
10、structure with handles and user data (see GUIDATA)global file;% 全局变量,存放读取的图像printdlg;4.1.5、退出点击文件下拉菜单的退出即可。function m_file_exit_Callback(hObject, eventdata, handles)% hObject handle to m_file_exit (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with ha
11、ndles and user data (see GUIDATA)selection = questdlg(是否关闭,get(gcf,name),窗口?,close,get(gcf,name),.,Yes,No,Yes);%是否关闭,get(gcf,name),窗口?对话框内容,%close,get(gcf,name),.%对话框标题if strcmp(selection,No)return;elsedelete(gcf);end 4.2、 操作形态学图像处理8图像的膨胀、磨蚀、开运算、闭运算等都是实现图像的形态学运算。4.2.1、 膨胀在 MATLAB 中,用函数 imdilate 实现对图
12、像的膨胀操作。该操作是通过“操作”“膨胀”来实现,得到如图所示: 实现“膨胀”功能的程序为:function m_peng_Callback(hObject, eventdata, handles)% hObject handle to m_peng (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global file;% 全局变量,存放读取的图像A=imread(fil
13、e);subplot(1,2,1),imshow(A);title(原图);se=strel(ball,15,5); %生成半径 15,高度 5 的椭圆形结构元素A2=imdilate(A,se);%用生成的结构元素对图像进行膨胀subplot(1,2,2),imshow(A2);title(膨胀后的图像);4.2.2、磨蚀在 matlab 中,使用 imerode 函数进行结构元素对图像的腐蚀处理,其格式如下:modified_image = imerode(original_image, structure_element);通过“操作”“磨蚀”操作得到结果如图所示:形态学图像处理9实现“
14、磨蚀”功能的程序是:function m_fu_Callback(hObject, eventdata, handles)% hObject handle to m_fu (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global file;% 全局变量,存放读取的图像B=imread(file);subplot(1,2,1); imshow(B);title(原图);s
15、e=strel(ball,15,5); %生成半径 15,高度 5 的椭圆形结构元素B2=imerode(B,se); %用生成的结构元素对图像进行腐蚀subplot(1,2,2); imshow(B2);title(腐蚀后的图像);4.2.3、开运算先腐蚀后膨胀的过程称为开运算。用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。在 MATLAB 中,用函数imopen 来实现对图像的开运算。和“膨胀” 、 “腐蚀”一样, “开运算”也是在“操作”的下拉菜单中,点击“操作”“开运算” ,得到运算后的原图和原图的对比,如下图:形态学图像处理10实现“开运算”功能的程
16、序是:function m_kai_Callback(hObject, eventdata, handles)% hObject handle to m_kai (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global file;% 全局变量,存放读取的图像M=imread(file);subplot(1,2,1),imshow(M);title(原图);se=strel(square,15);%生成边长为 10 的正方形结构元素fo=imopen(M,se);%用生成的结构元素对图像进行开运算subplot(1,2,2),imshow(fo);title(开运算后的图像);4.2.4、 闭运算先膨胀后腐蚀的过程称为闭运算。用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。对图像的闭运算处理是通过 imclose函数来实现的,点击“操作”“闭运算”,得到闭运算处理后的图片,如图所示:实现闭运算功能的程序是: