数字图像处理课程设计.docx
《数字图像处理课程设计.docx》由会员分享,可在线阅读,更多相关《数字图像处理课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
数字图像处理课程设计
数字图像处理课程设计
学院:
自动化学院
专业:
电子信息科学与技术
班级:
姓名:
12级B方向
起讫日期:
12月28日~1月1日
指导教师:
摘要
基于数字信号处理原理,在数字滤波器设计理论和Matlab编程技术及其GUI图形用户界面设计的基础上,开发了具有交互式特点的数字图像处理GUI软件,界面操作简单方便。
MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。
它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。
根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或编程以完成各自的计算。
MATLAB中集成了功能强大的图像处理工具箱。
由于MATLAB语言的语法特征与C语言极为相似,而且更加简单、更加符合科技人员对数学表达式的书写格式,而且可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以MATLAB在图像处理的应用中具有很大的优势。
关键词:
MatlabGUI;数字图像处理;图形用户界
目录
第1章于MATLAB的图形用户界面(GUI)设计1
1.1前言1
1.2句柄图形及图形用户界面1
1.3GUIDE1
1.3.1GUI设计工具简介2
1.3.2编制回调程序3
第2章课程设计的目的4
第3章课程设计的内容及要求5
第4章设计内容及结果分析6
4.1文件操作6
4.1.1保存6
4.1.3退出6
4.2编辑7
4.2.1灰度7
4.2.2截图8
4.2.3缩放9
4.2.4上下翻转10
4.2.5加入噪声11
4.2.6图片选择13
4.2.7二值图像14
4.2.8图像分割(计算45度边缘)14
4.2.9边缘检测15
4.2.10图像保存16
第5章课程设计的目的18
第6章参考文献19
第1章基于MATLAB的图形用户界面(GUI)设计
1.1前言
MATLAB是由MathWorks公司于1984年推出的数学软件,早期以矩阵运算为主,但随着科学可视化的需求日增,MATLAB在第4版推出了句柄图形,自此之后,所有的Demos都包含友好的图形用户界面,MATLAB的图形界面设计功能也日益完善。
如今,MATLAB已成为集数值计算功能、符号运算功能和图形处理功能为一身的超级科学计算语言,满足了不同领域用户的需求。
1.2句柄图形及图形用户界面
句柄图形(HandleGraphics)就是将一个图形的每一个组件都视为一个对象(Object),每一个对象都有一个独一无二的“句柄”(handle),根据这个句柄,就可以找到这个对象(即图形组件)的各项属性,并进而更改这些属性,以产生不同的图形呈现效果。
图形用户界面GUI(GraphicsUserInterface)是由各种图形对象,如图形窗口、图轴、菜单、按钮、文本框等构建的用户界面,是人机交流信息的工具和方法,在该界面内,用户可以根据界面提示完成整个程,却不必去了解工程内部是如何工作的。
GUI设计即可以基本的MATLAB程序设计为主,也可以鼠标为主利用GUIDE工具进行设计。
利用GUIDE设计图形用户界面时,可通过GUI应用属性设置编辑器来设置对句柄操作的响应,findobj命令可以获得所需对象的句柄。
1.3GUIDE
GUIDE(GraphicsUserInterfaceDesignEnviron-ment)是一个专用于GUI程序设计的快速开发环境,使用者通过鼠标就能迅速地产生各种GUI控件,并随心所欲地改变它们的外形、大小及颜色等,从而帮助用户方便地设计出各种符合要求的图形用户界面。
1.3.1GUI设计工具简介
在GUIDE设计环境中,需要用到的工具有属性编辑器、控件布置编辑器、菜单编辑器、对象浏览器、网格标尺设置编辑器以及GUI应用属性设置编辑器等。
(1)属性编辑器(PropertiesInspector)
打开属性编辑器的方法有多种,最常用的,选中控件对象以后,点击工具条上的属性设置按钮,即可打开属性编辑器。
通过该属性编辑器来对所选图形对象设置相关属性。
(2)控件布置编辑器(AlignmentObjects)
在编辑CUI过程中,通过控件布置编辑器可以方便地设置面板上GUI控件的布局。
选中需要对齐的对象,然后选择工具条上的控件布置按钮,即可打开控件布置编辑器。
在控件布置编辑器中可以设置GUI控件水平以及垂直布局,包括对齐方式以及控件间距等。
(3)对象浏览器(ObjectBrowser)
在GUI面板中点击对象浏览按钮可打开对象浏览器,在该浏览器中可以方便地显示出所有的图形对象,单击该对象则可以打开相应的属性编辑器。
(4)菜单编辑器(MenuEditor)
在GUI面板中点击菜单编辑按钮可打开菜单编辑器,通过菜单编辑器可以为图形界面添加、设置和修改菜单项,以及为右键添加快捷菜单。
(5)网格标尺设置编辑器(GridandRulers)
通过网格标尺设置编辑器,可以在GUI面板中添加网格以及标尺,来方便用户的界面设计。
选择GUIDE主菜单中的Tools/GridandRulers即可打开网标尺设置编辑器。
1.3.2编制回调程序
完成控件的布局之后,也就完成了整个图形界面的结构设计,接下来则是最为重要的功能设计,即要编制菜单、控件的回调程序。
若要编制某一控件的回调程序,用右键单击该控件,在弹出菜单中点击ViewCallbacks,然后从子菜单中选择一种激活回调程序的方式,就可以编制回调程序了,如Callback指单击控件时激活回调程序完成一定的功能。
菜单的回调程序在菜单编辑器的Callbacks文本框中给出。
第2章课程设计的目的
1、加强对数字图像处理的理解,了解和体会数字图像处理基本方法的运用;
2、熟悉掌握MatlabGUI程序设计方法,学会运用Matlab图像处理工具箱对数字图像进行分析和处理。
第3章课程设计的内容及要求
1、利用MatlabGUI设计一个图形用户界面,实现图像的读取、显示、保存和另存为等功能,并预留出处理后的显示区域,以便观察对比效果;
2、在图形用户界面上添加图像的几何变换功能,要求至少可以实现图像的放大和缩小,并对比显示处理前后的图像效果;
3、在图形用户界面上增加为图像添加噪声和相应的图像滤波功能,要求至少实现两种噪声的添加(例如椒盐噪声和高斯噪声)和相应的滤波功能,并对比显示处理前后的图像效果;
4、在图形用户界面上添加图像的边缘检测功能,并对比显示处理前后的图像效果。
第4章设计内容及结果分析
设计完成后运行的软件界面如图1所示
图1运行的软件界面
4.1文件操作
4.1.1保存
同样也通过对话框的形式来保存图像数据,通过uigetfile函数选择文件名和路径,用getimage(gca)取出坐标2变换后的图像数据保存到变量i,最后用imwrite函数,把数据i存到指定的文件。
4.1.3退出
退出比较简单,程序如下所示:
clc;
closeall;
close(gcf);
4.2编辑
4.2.1灰度
由于RGB图像是三维图像,所以图像数据是一个三维数组,为了显示灰度图像,把三维图像降为二维,可以只取其中的二维数据,实现方法程序为:
y=(handles.img(:
:
1));%当然也可以选择(:
:
2)或(:
:
3)
imshow(y);
但是这样的话,根据程序所选的不同,图像数据也不同,显示也就不一样。
另一种方法就是,运用rgb2gray函数实现彩色图像到灰度图像的转换。
程序为:
y=rgb2gray(handles.img);
imshow(y);
这个程序只能用于RGB图像转换灰度图像,当原始图像本来就是灰度图像时,运行该程序时就会出错,但是使用者在使用时有时并不知道这些,为了使该程序更加完善,应该在使用者原先图像时灰度图像时使用该功能时,应该要显示提示类信息。
所以在开始时应该要有一个RGB图像或是灰度图像的判断过程。
完整的程序如下:
ifisrgb(handles.img)
y=rgb2gray(handles.img);
imshow(y);
else
msgbox('这已经是灰度图像','转换失败');
end
如果原图是RGB,执行该操作的结果如下图:
图2灰度图像
如果原图本身已经是灰度图像了,执行该操作弹出如下图所示的提示对话框
图3对话框
4.2.2截图
在MATLAB中,用函数imcrop实现对图像的剪切操作。
该操作剪切的是图像中的一个矩形子图,用户可以通过参数指定这个矩形四个顶点的坐标,也可以交互地用鼠标选取这个矩形。
Imcrop函数的调用格式如下:
y=imcrop(handles.img);
不管handles.img是三维的还是二维数据,该函数都能进行操作。
下图就是对三维图像的截图:
图4截图图像
4.2.3缩放
在MATLAB中,用函数imresize来实现对图像的放大或缩小。
插值方法可选用三种方法,最近邻插值,双线性插值,双三次插值。
该函数的调用格式如下:
B=imresize(A,m,method)
其中:
参数method用于指定插值的方法,可选的值为“nearest”(最近邻法),“bilinear”(双线性插值)、“bicubic”(双三次插值),缺省值为“nearest”。
B=imresizee(A.m,method)表示返回原图A的m倍放大图像(m小于1时实际上是缩小);
下图就是采用邻近插值法的放大和缩小图像,参数值保持默认设置:
图5图像放大
4.2.4上下翻转
函数flipud是实现一个二维矩阵的上下翻转,如a=[12;34],经过该函数处理后,原矩阵变为[34;12];所以利用该函数也可以对图像进行上下翻转处理,但由于该函数针对二维数据的处理,所以在写程序时,要对RGB图像和灰度图像分开处理,这就要用到isrgb函数来判断,如果是灰度图像,则可以直接用这个函数进行处理,否则就要对RGB图像进行降维处理,fork=1:
3
y(:
:
k)=flipud(x(:
:
k));
end
处理结果如图:
图6图像翻转
4.2.5加入噪声
经常用到的噪声有三种,高斯噪声,椒盐噪声,乘性噪声,可以通过以下三个函数来实现:
y=imnoise(handles.img,'gaussian',p1,p2);%高斯噪声
y=imnoise(x,'salt&pepper',p1);%椒盐噪声
p1,p2的参数也通过输入对话框的形式得到,原图加入高斯噪声和椒盐噪声结果分别如下所示:
图7加入高斯噪声
图8加入椒盐噪声
4.2.6图片选择
在MATLAB中,图片选择的操作代码如下:
value = get( handles.popupmenu4, 'Value' ) - 1 ;
if value > 0
value_s = num2str( value );
file_index = [ value_s , '.jpg' ];
Image_to_be_Matched = imread(file_index );
axes( handles.axes1 ) ;
imshow( Image_to_be_Matched );
end
handles.To_be_matched = value ;
guidata( hObject , handles ) ;
结果如下图:
图9图片选择图10图片显示
4.2.7二值图像
MATLAB中DIP工具箱函数im2bw使用阈值(threshold)变换法把灰度图像(grayscaleimage)转换成二值图像。
一般意义上是指只有纯黑(0)、纯白(255)两种颜色的图像。
当然,也可以是其他任意两种颜色的组合。
函数调用为j=im2bw(J);%二值。
图像如下:
图11将图像转成二值图像
4.2.8图像分割(计算45度边缘)
在MATLAB中,使用sobel监测器对图像进行分割的MATLAB程序
f=imread('E:
\数字图像处理实验指导书\misc\5.1.13.tiff');
[gv,t1]=edge(f,'sobel','vertical');%使用edge函数对图像f提取垂直的边缘
[gb,t2]=edge(f,'sobel','horizontal');%使用edge函数对图像f提取垂直的边缘
w45=[-2-10;-101;012];%指定模版使用imfilter计算45度方向的边缘
g45=imfilter(double(f),w45,'replicate');
T=0.3*max(abs(g45(:
)));%设定阈值
g45=g45>=T;%进行阈值处理
subplot(221),imshow(gv);
subplot(222),imshow(gb);
subplot(223),imshow(g45);在函数中使用'prewitt'和'roberts'的过程,类似于使用sobel边缘检测器的过程。
处理结果如下图所示:
图12计算45度边缘
4.2.9边缘检测
在MATLAB中,边缘的提取代码如下:
f=imread('C:
\Users\aa\Desktop\\room.tif');
[gv,t1]=edge(f,'sobel','vertical');%使用edge函数对图像f提取垂直的边缘
imshow(gv)
[gb,t2]=edge(f,'sobel','horizontal');%使用edge函数对图像f提取垂直的边缘
figure,imshow(gb)
w45=[-2-10;-101;012];%指定模版使用imfilter计算45度方向的边缘
g45=imfilter(double(f),w45,'replicate');T=0.3*max(abs(g45(:
)));%设定阈值
g45=g45>=T;%进行阈值处理
figure,imshow(g45)
处理结果如下图:
图13边缘检测
4.2.10图像保存
MATLAB的GUI中保存axes图片的方法如下:
在按钮的回调函数中写下如下代码:
functionpushbutton5_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton5(seeGCBO)
%eventdatareserved–tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesand
userdata(seeGUIDATA)
[f,p]=uiputfile({'*.jpg'},'保存文件');
str=strcat(p,f);
pix=getframe(handles.axes2);
imwrite(pix.cdata,str,'jpg')
实验结果如下图所示:
图14保存图片
第5章课程设计的目的
通过本次课程设计,使自己对MATLABGUI设计流程有了比较深刻的体会,同时也了解了一般软件设计的过程。
在设计过程中碰到了很多的问题,通过这些问题,使自己分析问题,解决问题的能力得到了较大的提高。
在理工科的专业应用背景下,用matlab进行相关计算与仿真编程的优势非常突出。
特定的问题处理算法,我们通常都以M文件的文本形式给定最终的解决方案,自己设计的程序是在MATLAB环境下,用MATLAB语言编写的,这对于有安装MATLAB软件的计算机上运行并不存在什么问题,关键是一般的计算机很少有去安装MATLAB软件的,那么要在这些机子上运行该程序要怎么办呢,难道要先安装MATLAB软件,这显然太麻烦了,对于一个通用的,比较成熟的解决方案,我们当然期望它能应用到更多的场合,而.exe(可执行)文件可运行于所有的通用WINDOWS操作系统,为此,将M文件转换成.exe文件倒是个不错的想法。
第6章参考文献
[1]郑阿奇,曹戈,赵阳.MATLAB实用教程[M].北京:
电子工业出版社
[2]程卫国,冯峰,姚东,徐听.MATLAB5.3应用指南[M].北京:
人民邮电出版社
[3]陈杨.MATLAB6.X图像编程与图像处理[M].西安:
西安电子科技大学出版社
[4]张德丰,数字图像处理MATLAB详解[J].电子工业出版社2010.7(MATLAB仿真与应用系列丛书)
[5]朱来东,廉小亲,江远志.小波变换在信号降噪中的应用及MATLAB实现[J].北京工商大学学报(自然科学版),2009,27
(2):
46-49.
[6]郑治真,沈萍,杨选辉,小波变换及其MATLAB工具的应用[M]1北京:
地震出版社,2001.
[7]岚基于DSP的自适应线性滤波器的设计与实现[J].《甘肃科技》2008,16.