图像边缘检测系统设计Word文档下载推荐.docx
《图像边缘检测系统设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《图像边缘检测系统设计Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
3、要求界面能够读入并显示图片,通过各种控件选择并进行图像的边缘检测操作,操作结果在对比窗口中显示
4、图像边缘检测功能至少包括单方向一阶微分检测(水平/垂直方向)、无方向微分检测(Roberts算子、Sobel算子、Prewitt算子、Laplacian算子、LOG算子)等,每项功能可采用一个或多个算法实现
三.课程设计要求
1、要求每个同学独立完成设计任务。
2、课程设计说明书封面格式要求见《课程设计说明书格式要求》。
3、课程设计的说明书要求简洁、通顺,图像表达内容完整、清楚、规范。
4、课程设计说明书要求:
1)说明题目的设计原理和思路、采用方法及设计流程。
2)可采用图表或文字对图形用户界面各子模块的功能以及各子模块之间的关系做较详细的描述。
3)详细说明代码的编写流程。
4)采用图像及文字详细说明各功能的演示结果。
指导教师(签字):
系主任(签字):
批准日期:
2016年12月1日
第1章总体设计1
1.1设计目的1
1.2设计方案1
第2章GUI界面设计3
2.1启动GUI界面3
2.2控件设计4
第3章运行结果及主要程序8
3.1边缘检测的步骤及结果8
3.2主要程序10
总结15
参考文献16
第1章总体设计
1.1设计目的
设计一个实现图像边缘检测功能的界面,通过各种控件选择并进行图像的边缘检测操作,操作结果在对比窗口中显示,完成一个简单的图片处理。
1.2设计方案
先通过GUI可视化界面窗口设计一个对用户使用起来相对方便的界面布局,然后针对界面上的每一个控件进行脚本函数的编写,以实现每一个控件的相应功能。
需要实现的功能:
图片的读取与显示,图片的对比显示和存储,彩色图片到灰度图像的转换,图片的各种算子边缘检测并显示(Roberts算子、Sobel算子、Prewitt算子、Laplacian算子、LOG算子等),并增加了退出程序按钮,最终生成一个可执行软件。
软件的总体设计界面布局如图1-1所示,主要分为2个部分:
显示区域与操作区域。
显示区域:
显示载入原图,以及通过处理后的图像。
操作区域:
通过功能键实现对图像的各种处理。
在截图中可见,左部为一系列功能按键有“读取图片”、“二值化”、“灰度化”三个按钮。
界面右部分为图片显示部分,下方有“存储图片”、“退出”功能键。
界面中间方为系列功能切换选择组包括单方向一阶微分检测(水平/垂直方向)、无方向微分检测(Roberts算子、Sobel算子、Prewitt算子、Laplacian算子、LOG算子)等。
图1-1设计界面图
第2章GUI界面设计
2.1启动GUI界面
通过单击MATLAB菜单项“Home”-->
“New”-->
“GraphicalUserInterface”,显示GUI开发环境的启动窗口,也可在命令窗口输入命令:
guide——打开GUIDE启动界面,如下图2-1所示。
弹出GUIDEQuickStart对话框,如图2-2所示。
选择BlankGUI,打开版图编程器如图2-3。
图2-1命令窗口
图2-2GUI启动窗口
图2-3版图编辑器
2.2控件设计
1.button按钮
利用版图编辑器在布局区添加按钮,双击控件调出属性编辑器,对其进行属性设计。
String表示控件的显示信息,Tag表示控件的唯一标识符。
图2-4按钮控件的设置
右击button选择“Callback”选项,定位该控件的回调函数。
如下图所示。
图2-5查看button回调函数
回调函数初始代码:
functionpushbutton3_Callback(hObject,eventdata,handles)
pushbutton3_Callback是按钮的回调函数,Callback函数是当用户每次触发GUI对象时执行的回调函数;
hObject为当前回调函数对应的GUI对象的句柄;
eventdata表示事件代码;
handles为当前GUI所有数据的结构体,包含所有GUI对象的句柄和用户定义的数据。
2.按钮组
为方便编程,采用按钮组进行算法实现,利用版图编辑器的按钮组,添加单选按钮到按钮组。
如图2-6所示。
图2-6按钮组
右击按钮组选择SelectionChangeFcn选项,定位该控件的回调函数,如图2-7所示。
图2-7查看按钮组回调
回调函数初始代码:
functionuipanel1_SelectionChangeFcn(hObject,eventdata,handles),程序代码见附录。
搭建结果界面截图如2-6所示。
图2-8设计界面图
设计完成后运行的软件界面如图2-9所示,点击按钮组里算法选项可看到程序运行结果,程序见附录。
图2-9运行界面图
第3章运行结果及主要程序
3.1边缘检测的步骤及结果
一般来说,边缘检测的算法有如下四个步骤:
1)滤波:
边缘检测算法主要是基于图像增强的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能。
2)增强:
增强边缘的基础是确定图像各点邻域强度的变化值。
增强算法可以将邻域(或局部)强度之有显著变化的点突显出来。
边缘增强一般都是通过计算梯度幅值来完成的。
3)检测:
在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些是边缘点。
最简单的边缘检测判据是梯度幅值阈值判据。
4)定位:
如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来。
图3-1算子运行结果
(1)
图3-2算子运行结果
(2)
1.一阶微分
作为坐标点(x,y)处的灰度倾斜度的一阶微分值,可以用具有大小和方向的向量表示如下:
其中,
为x方向的微分,
为y方向的微分。
和
在数字图像中是用下式计算的:
微分值
被求出后,由以下的公式就能算出边缘的强度与方向。
强度:
或者
,方向:
向量
的朝向。
2.Roberts算子,边缘定位精度较高,但容易丢失一部分边缘,同时图像没经过平滑处理,所以不具备抑制噪声的能力。
该算子适用于具有陡峭边缘且含噪声少的图像。
3.Sobel算子和Prewitt算子,对噪声具有一定抑制能力,但不能完全排除虚假边缘。
定位效果不错但容易产生多像素边缘。
4.LOG算子,抑制噪声会将尖锐的边缘平滑掉而无法被检测到。
当高斯滤波器宽度参数取值较小时,边缘定位精度高,但图像平滑作用较弱;
增大取值时,又导致模板增大,使边缘位置偏移严重,且运动量增加。
5.Canny算子,当弱边缘和强边缘相连时,才输出弱边缘,检测效果要比LOG算子好。
6.拉普拉斯算子,不依赖于边缘方向的二阶微分算子,定位准确,对噪声非常敏感,使噪声加强,从而使部分信息丢失,造成一些不连续的边缘。
由上可知,算子不同,结果存在明显差异,但是在原始图像上边缘明显的部分都被有效的提取出来了。
Roberts算子检测出的边缘线比较清晰,但噪声大多也同时提取出来了。
对于模糊部分取差分间隔宽的Sobel算子和Prewitt算子似乎有效。
Canny算子可以检测到弱边缘,但受阴影的影响较大。
LoG算子易于强化噪声,更适用于点状物的检测和图像锐化。
3.2主要程序
1.读取图片程序,定义可读取“.jpg.bmp.gif.png”属性的图片,读取图片到axes1坐标轴中显示。
functionpushbutton1_Callback(hObject,eventdata,handles)
globalim
[filename,pathname]=...
uigetfile({'
*.jpg'
;
'
*.bmp'
*.gif'
*.png'
},'
选择图片'
);
str=[pathnamefilename];
im=imread(str);
axes(handles.axes1);
imshow(im);
2.存储图片程序,存储axes2坐标轴的结果图像到自定义路径,可选择存储属性为“.bmp.tif.png”。
functionpushbutton4_Callback(hObject,eventdata,handles)
globalim%定义全局变量
[filename,pathname,filterindex]=...
uiputfile({'
*.tif'
save?
picture'
%存储图片路径
ifisequal(filename,0)||isequal(pathname,0)
return%如果取消操作,返回
elsestr=[pathnamefilename];
%合成路径+文件名
axes(handles.axes2);
%使用第二个axes
im=getimage(handles.axes2);
imwrite(im,str);
%写入图片信息,即保存图片
end
3.关闭窗口程序。
functionpushbutton5_Callback(hObject,eventdata,handles)
close(gcf)%关闭当前Figure窗口句柄
4.按钮组功能,当选择按钮组中不同算法变换时,用switch语句进行算法的选择进行图像变换,显示结果在axes2坐标轴中。
functionuipanel1_SelectionChangeFcn(hObject,eventdata,handles)
[m,n,o]=size(im);
ifo>
1
im=rgb2gray(im);
R=double(im)/255;
else
str=get(hObject,'
string'
axes(handles.axes2);
switchstr
case'
Initial'
imshow(im)
directionX'
a=[-1-2-1;
000;
121]/256;
b=[-101;
-202;
-101]/256;
BW=conv2(im,a,'
same'
BW=abs(BW);
%处理水平方向算子的结果
imshow(BW);
directionY'
BW=conv2(im,b,'
%处理垂直方向算子的结果
directionXY'
BW1=conv2(im,a,'
BW1=abs(BW1);
%处理水平方向算子的结果?
?
BW2=conv2(im,b,'
BW2=abs(BW2);
%处理垂直方向算子的结果?
BW=max(BW1,BW2);
%取水平及垂直方向上的大值
Roberts'
BW=edge(im,'
Sobel'
Prewitt'
LoG'
Canny'
Laplacian'
a=[010;
1-41;
010]/56;
BW=abs(BW);
5.图像二值化,利用2bw进行图像二值化转化,并将转换结果在axes2坐标轴中显示。
functionpushbutton2_Callback(hObject,eventdata,handles)
BW=im2bw(im,0.4);
imshow(BW);
6.灰度图像转化,判断所读取图像是否为彩色图像,如果是则转化为灰度图像,并在axes2坐标轴中显示转换结果图像。
BW=rgb2gray(im);
BW=im;
总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日新日异,软件方面的应用已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为大学来说掌握各种软件的应用是十分重要的。
数字图像处理是我们这个学期的重点课程。
在没有做课程设计以前觉得课程设计只是对我所学知识的单纯总结,但是通过这次做课程设计发现自己的看法有点太片面。
课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。
通过这次课程设计使我明白了自己原来知识还比较欠缺,明白了学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。
此次课程设计使我重新又学习了MATLAB的有关知识,对该软件掌握的更加熟练。
总之,最后终于做完了有种如释重负的感觉。
此外,还得出一个结论:
实践是检验知识的唯一标准。
有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。
在此要感谢我们指导老师对我们悉心的指导与帮助。
在设计过程中,我通过与同学交流经验和自学,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
在整个设计中我懂得了许多东西,也培养了我独立工作的能力。
参考文献
[1]罗华飞.MATLABGUI设计学习手记[M].北京:
北京航空航天大学出版社,2009
[2]秦襄培.MATLAB图像处理与界面编程宝典[M].电子工业出版社,2009
[3]张强,王正林.精通MATLAB图像处理[M].电子工业出版社,2009
[4]杨娜,葛广英.基于MATLAB的灰度图像边缘检测技术[M].中国科技教育,2008年02期
[5]张秀兰.基于MATLAB的数字图像的边缘检测[M].吉林化工学院学报,2002年02期
[6]贾永红.数字图像处理[M].武汉:
武汉大学版社,2002:
25-79.
[7]求是科技.MATLAB7.0从入门到精通[M].北京:
人民邮电出版社,2006:
407-428.