图像边缘检测课程设计_图像处理综合训练.doc_第1页
图像边缘检测课程设计_图像处理综合训练.doc_第2页
图像边缘检测课程设计_图像处理综合训练.doc_第3页
图像边缘检测课程设计_图像处理综合训练.doc_第4页
图像边缘检测课程设计_图像处理综合训练.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

* 实践教学实践教学 * 兰州理工大学兰州理工大学 计算机与通信学院 图像处理图像处理综合训练综合训练 题 目: 图像边缘检测课程设计 目目 录录 摘 要1 一、前言2 二、算法分析与描述3 三、详细设计过程8 四、调试过程中出现的问题及相应解决办法10 五、程序运行截图及其说明11 六、简单操作手册14 设计总结16 参考资料17 致谢18 附录19 1 摘摘 要要 在实际图像处理问题中,图像的边缘作为图像的一种基本特征,经常被应 用到较高层次的图像应用中去。它在图像识别,图像分割,图像增强以及图像 压缩等的领域中有较为广泛的应用,也是它们的基础。 边缘检测是图像处理与分析中最基础的内容之一,也是至今仍没有得到圆 满解决的一类问题。图像的边缘包含了图像的位置、轮廓等特征,是图像的基 本特征之一,广泛地应用于特征描述、图像分割、图像增强、图像复原、模式 识别、图像压缩等图像分析和处理中。因此,图像边缘和轮廓特征的检测与提 取方法,一直是图像处理与分析技术中的研究热点,新理论、新方法不断涌现。 本文研究了一些边缘检测算法,包括传统的 roberts、sobel、prewitt、canny 等算法。经典边缘检测方法的抗噪声性能都 较差,解决该问题的主要方法就是设置阈值,把得到的图像高频部分与阈值相 比较以达到去噪的目的,所以阈值的选取显得尤为重要。传统方法中的阈值都 是通过实验确定的,没有统一的阈值选取方法。本文利用边缘的最大后验概率 估计,介绍一种新的边缘估计方法,从理论上说明了怎样选取最佳阈值。文章 中关于这些方法都有较详细的介绍,以及算法的实现步骤,对算法均进行了仿 真实验。 关键词:边缘检测; 图像处理; matlab; sobel; 检测算法 2 1、前言前言 随着信息技术的不断发展和用户需求的不断增长,嵌入式系统逐渐走进国民 生产的方方面面,其应用也日益广泛。目前国内一个普遍被认同的定义是:以应 用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可 靠性、成本、体积、功耗严格要求的专用计算机系统。 嵌入式系统的应用领域 也非常广泛。嵌入式系统几乎包括了生活中的所有电器设备,如掌上 pda 、 移动计算设备、手机上网、数字电视、多媒体、汽车、数字相机、电梯、空调、 安全系统、自动售货机、工业自动化仪表与医疗仪器等。 而图像边缘检测则是图像处理中非常基础但是及其重要步骤。边缘是两个 不同区域之间的边界。图像边缘检测是图像处理,图像分析,模式识别等一系 列图像处理过程中最重要的步骤。目前,学界上已经有许多种不同点的方法来 实现边缘检测的功能,比如说差分法(kirsch,1971)和曲线拟合法 (haralick,1984) 。传统的边缘检测方法,比如 sobel、prewitt、kirsch 算法, 通过计算第一阶方向导数来决定边缘的位置。零点交叉边缘检测法 (bovik,1998)运用了二阶导数和拉普拉斯算符。而 canny 算法 (canny,1986)是目前学界最流行并且应用最广泛的的高斯边缘检测算法。 尽管高斯检测算法(yuksel,2007)相对来说有更好的性能表现,但是所需要 的计算也比传统基于求导的检测算法复杂的多。 近些年来,对于图像处理在许多不同的科学和工程领域应用的研究越来越 火热。在嵌入式系统上实现图像处理能够很好的解决在一般 pc 或者工控机上 实现图像处理的不足之处,比如说便携性差,功耗大,移动性,灵活性不强等。 同时加之以集成度高,与网络的耦合也越来越紧密等特点。嵌入式系统将是未 来工业控制和其他一些行业的主要发展方向。 3 本文主要阐述了图像边缘检测算法的一些理论,并对检测的效果加以比较, 同时介绍了嵌入式系统开发的流程,为图像类嵌入式开发系统开发提出可行的 方案。最后设计实现了边缘检测系统。 二、算法分析与描述二、算法分析与描述 2.1 roberts 算子 由 roberts 提出的算子是一种利用局部差分算子寻找边缘的算子,对于边 界陡峭且噪比较小的图像检测效果比较好,它在 22 邻域上计算对角导数, 22 ,=,1,11,1g i jf i jf ijf ijf i j gi,j又称为 roberts 交叉算子。在实际应用中,为简化运算,用梯度函 数的 roberts 绝对值来近似: ,=,1,11,1g i jf i jf ijf ijf i j 用卷积模板,上式变成: , xy g i jgg 其中gx和gy由下面图 1 所示的模板计算: 图 1 robert 边缘检测算子的模板 roberts 算子是该点连续梯度的近似值,而不是所预期的点处的近似值。 由上面两个卷积算子对图像运算后,代入 2 式,可求得图像的梯度幅度值 gi,j,然后选取适当的门限th,作如下判断:gi,jth,i,j为阶跃状边 缘点,gi,j为一个二值图像,也就是图像的边缘。由于利用局部差分检测 比较陡峭的边缘,但对于噪声比较敏感,经常会出现孤立点,于是人们又提出 了 prewitt 算子4。 4 通过分析可知,sobel 算子法对高频成分丰富的图像处理效果好,对中低 频成分的图像效果差。 2.2 prewitt 算子 为在检测边缘的同时减少噪声的影响,prewitt 算子从加大边缘检测算子 出发。由 22 扩大到 33 来计算差分算子,所以其卷积模板为图 2 所示: 图 2 prewitt 边缘检测算子的模板 在图像中的每个像素位置都用这 2 个模板做卷积,prewitt 算子将方向差 分运算与局部平均结合起来,表达式如下: 1,1,11,11,1,11,1 x ff xyf x yf xyf xyf x yf xy 1,11,1,11,11,1,1 y ff xyf xyf xyf xyf xyf xy 根据两式可以计算 prewitt 梯度,选取适当的阈值t,对梯度图像二值化, 得到一幅边缘二值图像。采用 prewitt 算子不仅能检测边缘点,而且还能抵制 噪声的影响5。 通过分析可知,prewitt 算子法对高频成分丰富的图像处理效果好,对中 低频成分的图像效果差。 2.3 sobel 算子 传统的 sobel 图像边缘检测方法,是在图像空间利用两个方向模板与图像 进行邻域卷积来完成的。这两个方向模板一个检测垂直边缘,一个检测水平边 缘,如图 3 所示。图中,模板内的数字为模板系数,梯度方向与边缘方向总是 正交 5 水平边缘 sobel 算子垂直边缘 sobel 算子 图 3 sobel 算子 模板元素和窗口像素之间的对应关系(以 33 窗口为例)定义如下: 设窗口灰度为: 1,11,1,1 ,1,1 1,11,1,1 fjkfjkfjk ffj kfj kfj k fjkfjkfjk 模板卷积计算就是下式求乘积和的过程: 11 , 11 , i im n mn fj kf jm kn m 式中,i=1,2 分别代表垂直和水平模板。为模板卷积法边缘检测的输出, i fj k ,l为窗口宽度,对 33 窗口,l=1。将两个卷积结果的最大值,赋给2ll 图像中对应模板中心位置的像素,作为该像素的新灰度值,即: max max,1,2 i ffj ki 通过分析可知,sobel 算子法对高频成分丰富的图像处理效果好,对中低 频成分的图像效果差。 2.4 laplacian 算子 拉普拉斯算子是二阶导数的二维等效式。函数f(x,y)的拉普拉斯算子公式 为: 22 2 22 ff f xy 使用差分方程对x和y方向上的二阶偏导数近似如下: 2 2 ,1, ,1, ,22,1, x gf xx f i jf i j x f i jf i j xx f i jf i jf i j 6 这一近似式是以点fi,j+1为中心的,用j-1替换j得到 2 2 ,12,1 f f i jf i jf i j x 它是以点i,j为中心的二阶偏导数的理想近似式,类似地, 2 2 1,2,1, f f ijf i jf ij x 把式(2-3)和式(2-4)合并为一个算子,就成为式(2-5)能用来近似拉普拉斯 算子的模板: 2 010 141 010 有时候希望邻域中心点具有更大的权值,比如下面式(2-6)的模板就是一种 基于这种思想的近似拉普拉斯算子: 2 141 4204 141 当拉普拉斯算子输出出现过零点时就表明有边缘存在,其中忽略无意义的 过零点(均匀零区)。原则上,过零点的位置精度可以通过线性内插方法精确到 子像素分辨率。 通过分析可知,它不过由于噪声,以及由噪声引起的边缘两端的不对称性, 结果可能不会很精确。 2.5 canny 算子 canny 检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值的 像素点。检测阶跃边缘的大部分工作集中在寻找能够用于实际图像的梯度数字 逼近。由于实际的图像经过了摄像机光学系统和电路系统(带宽限制)固有的低 通滤波器的平滑,因此,图像中的阶跃边缘不是十分陡立。图像也受到摄像机 噪声和场景中不希望的细节的干扰。图像梯度逼近必须满足两个要求:首先逼 近必须能够抑制噪声效应;其次必须尽量精确地确定边缘的位置。抑制噪声和 边缘精确定位是无法同时得到满足的,也就是说,边缘检测算法通过图像平滑 算子去除了噪声,但却增加了边缘定位的不确定性;反过来,若提高边缘检测 算子对边缘的敏感性,同时也提高了对噪声的敏感性。有一种线性算子可以在 7 抗噪声干扰和精确定位之间提供最佳折衷方案,它就是高斯函数的一阶导数。 通过分析可知,采用高斯函数对图像进行平滑处理,因此具有较强的噪声 抑制能力;同样该算子也将一些高频边缘平滑掉,造成边缘丢失,采用了双阈 值算法检测和连接边缘,边缘的连续性较好。 8 3、详细设计过程详细设计过程 roberts 算子、sobel 算子、prewitt 算子的检测效果相差不大,三种算子 的检测效果较之 canny 和 log 算子还是存在一定的差距。这三种检测算子的阈 值选择范围与 log 和 canny 算子相比要小些。边缘点不够锐利和明确,线边缘 检测要好于点边缘检测。总体而言由于 prewitt 算子受噪声影响较小,故检测 效果要略好于另外两种。 由于 roberts 算子是利用图像的两个对角线的相邻像素之差进行梯度幅值 的检测,所以求得的是在差分点处梯度幅值的近似值,并且检测水平和垂直方 向边缘的性能好于斜线方向的边缘,检测精度比较高,但容易丢失一部分边缘, 同时由于没经过图像平滑计算,因此不能抑制噪声,但该算子对具有陡峭的低 噪声图像响应最好。 prewitt 算子和 sobel 算子都是对图像进行差分和滤波运算,仅在平滑部 分的权值选择上有些差异,因此两者均对噪声具有一定的抑制能力,但这种抗 噪能力是通过像素平均来实现的,所以图像产生了一定的模糊,而且还会检测 出一些伪边缘,所以检测精度比较低,该算子比较适合用于图像边缘灰度值比 较尖锐且图像噪声比较小的情况。 canny 算子采用高斯函数对图像进行平滑处理具有较强的去噪能力,容易 平滑掉一些边缘信息,边缘定位精度较高。该算子与其它边缘检测算子的不同 之处在于,它使用 2 种不同的阈值分别检测强边缘和弱边缘,并且仅当弱边缘 相连时才将弱边缘包含在输出图像中,因此这种方法较其它方法而言不容易被 噪声“填充”更容易检测出真正的弱边缘。通过对 lena 图的仿真实验结果可以 看出,该算子在上述几种边缘检测算子当中效果最好。边缘定位准确,连续性 较好,虚假边缘少且边缘均具有单像素宽度。 log 算子首先通过高斯函数对图像进行平滑处理,因此对噪声的抑制作用 比较明显,但同时也可能将原有的边缘也平滑了,造成某些边缘无法检测到, 比外高斯分布因子的选择对图像边缘检测效果有较大的影响,越大,检测 到的图像细节越丰富,但抗噪能力下降,从而出现伪边缘,反之则抗噪能力提 9 高,但边缘精度下降,易丢失许多真边缘,因此,对于不同图像应选择不同参 数。 roberts 算子:采用对角线方向相邻两像素之差表示信号的突变,检测水 平和垂直方向边缘的性能好于斜线方向,定位精度比较高,但对噪声敏感,检 测出的边缘较细。 prewitt 算子:对噪声有平滑作用,检测出的边缘比较粗,定位精度低, 容易损失角点。 sobel 算子:产生的边缘效果较好,对噪声具有平滑作用。但存在伪边缘,边 缘比较粗且定位精度低。 laplacian 算子:是二阶微分算子,对图像中的阶跃性边缘点定位准确,对噪 声非常敏感,丢失一部分边缘的方向信息,造成一些不连续的检测边缘。 canny 算子:采用高斯函数对图像进行平滑处理,因此具有较强的噪声抑 制能力;同样该算子也将一些高频边缘平滑掉,造成边缘丢失,采用了双阈值 算法检测和连接边缘,边缘的连续性较好。 10 4、调试过程中出现的问题及相应解决办法调试过程中出现的问题及相应解决办法 4.1 代码在运行过程中的错误: filename, pathname = uigetfile( . *.bmp;*.jpg;*.png;*.jpeg, image files (*.bmp, *.jpg, *.png, *.jpeg); . *.*, all files (*.*), . pick an image); axes(handles.axes_src); fpath=pathname filename; 此代码缺少了imread读入图片,因此不能够正确的运行。应在代码后面加入如 下代码: img_src=imread(fpath); 4.2 图像运行过程中出现的错误: 应该将代码中的i=rgb2gray();改为i=rgb2gray(i); 11 五、程序运行截图及其说明五、程序运行截图及其说明 5.1 roberts 算子图像边缘检测截图如图(4)所示 图(4) 5.2 prewitt 算子图像边缘检测截图如图(5)所示 图(5) 12 5.3 sobel 算子图像边缘检测如图(6)所示 图(6) 5.4 laplacian 算子图像边缘检测如图(7)所示 图(7) 13 5.5 canny 算子图像边缘检测如图(8)所示 图(8) 14 6、简单操作手册简单操作手册 本系统主要是对图像边缘检测中一阶微分算子,二阶微分算子等的实现,以 sobel 为例,在程序实现的过程中主要步骤有以下几点: 6.1 程序执行的初始界面如图(9)所示 图(9) 6.2 打开图象进行 sobel 算子边缘检测界面如图(10)所示 图(10) 6.3 经 sobel 算子处理后的图象如图(11)所示 15 图(11) 6.4 退出程序 16 设计总结设计总结 虽然这次课程设计只有二个星期的时间,但是我们对图像处理的各种方法 及应用有了更深的理解,学会了应用 matlab 软件及 gui 来实现界面的操作和编 程处理。matlab 是我们在以前和以后的学习工作中都会经常应用到的软件,但 是在以前还是对其了解不足,操作不是很了解,在实习之初便因为这个问题而 无从下手。于是我们寻找了许多这方面的书籍以及应用网络教程来对其进行学 习,逐渐的增强了对 matlab 及 gui 的了解,能够摸索着开始进行编写。实习中 也遇到了很多问题,但通过查阅书籍、同学间讨论、请教老师以及网上查找最 终能够得以解决,完成这次实习。 通过这次课程设计,对其的一些常见函数以及与图像处理相关的函数都 比较了解,并能够应用这些函数来解决图像处理的问题。gui 对于我们是一个 新的知识,通过各方面的学习,我们最终对 gui 也有了比较深的了解,能够很 顺利的应用 gui 来设计出适合并且美观的界面。图像处理是我们这学期的一门 很重要的课程,在课上虽然学习了很多知识,但是不经过自己动手操作而只看 到书上的一些概念和处理的图片并不能很清楚的了解到各种操作的效果,并且 不动手操作,知识就只能局限于书本上。经过这次课程设计,不但能够让我们 再次复习了本学期所学的图像处理的知识,加深了对这些知识的记忆,并且让 我们对图像处理的各种处理方法如 sobel 算子、robert 算子、priwitt 算子、拉普 拉斯算子、canny 等对图像产生的效果有了更加直观的了解,不但加深了记忆也 能因此更加了解各种处理方法的应用,可以用 matlab 软件来对这些处理来实现。 这次课程设计要实现的内容比较多,其中有一些易操作的也有一些比较 复杂的,在实习过程中也会遇到一些难以突破的问题,但是在这个过程中需要 我们耐心的学习,一步一步通过各种途经学习到解决的方法,也培养了我们的 耐心和学习的能力。这次是两人一组的实习,因此合理的分工合作也是很重要 的,通过实习也培养了我们之间分工协作互帮互助的精神。 总体来说,我们的这次课程设计还是比较成功的,较为成功的完成了我 们的边缘图像检测,并且达到到了我们这次课程设计的目的。 17 参考资料参考资料 1 朱虹. 数字图像处理基础m. 科学出版社, 2005 2 r c.gonzalez, r e.woods 著,阮秋琦,阮宇智等译.数字图像处理(第 2 版).北 京:电子工业出版社,2003 3 k.r.castleman. 数字图像处理.北京:电子工业出版社,2002 4 章毓晋.图像处理与分析-图像工程(上册),清华大学,2001 5 何斌等编著.visual c+数字图像处理.人民邮电出版社,2002 6 张宏林编著.visual c+数字图像模式识别技术及工程实践.人民邮电出版 社,2003. 7 黄维通.visual c+面向对象与可视化程序设计.清华大学出版社,2003 8 r c.gonzalez, r e.woods, s l. eddins 著,阮秋琦,阮宇智等译.数字图 像处理(matlab 版).北京:电子工业出版社,2005 9 李赤枫, 王 俊, 李 克, 等. 自生 mg2si 颗粒增强 al 基复合材料的组织细 化j. 中国有色金属学报, 2004, 14(2): 233-237. 10 殷 声. 燃烧合成m. 北京: 冶金工业出版社, 2004: 25-44. 11 王文新.大象征收过路费. 2006.5.21 18 致谢致谢 在这次课程设计的设计过程中,我得到了许多人的帮助。 首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮 助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多 技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新 的知识,而且也开阔了视野,提高了自己的设计能力。 其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的代 码难题,在一个个小问题上给了我很大的帮助。 最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学。 19 附录附录 function varargout = mywork(varargin) gui_singleton = 1; gui_state = struct(gui_name, mfilename, . gui_singleton, gui_singleton, . gui_openingfcn, mywork_openingfcn, . gui_outputfcn, mywork_outputfcn, . gui_layoutfcn, , . gui_callback, ); if nargin end if nargout varargout1:nargout = gui_mainfcn(gui_state, varargin:); else gui_mainfcn(gui_state, varargin:); end function mywork_openingfcn(hobject, eventdata, handles, varargin) setappdata(handles.figure_mywork,img_src,0); handles.output = hobject; guidata(hobject, handles); function varargout = mywork_outputfcn(hobject, eventdata, handles) varargout1 = handles.output; function m_file_callback(hobject, eventdata, handles) function m_file_open_callback(hobject, eventdata, handles) filename, pathname = uigetfile( . 20 *.bmp;*.jpg;*.png;*.jpeg, image files (*.bmp, *.jpg, *.png, *.jpeg); . *.*, all files (*.*), . pick an image); axes(handles.axes_src);%用axes命令设定当前操作的坐标轴是axes_src fpath=pathname filename;%将文件名和目录名组合成一个完整的路径 img_src=imread(fpath);%用imread读入图片,并用imshow在axes_src上显示 imshow(img_src); title(原图); setappdata(handles.figure_mywork,img_src,img_src); function m_file_save_callback(hobject, eventdata, handles) filename, pathname = uigetfile( . *.bmp;*.jpg;*.png;*.jpeg, image files (*.bmp, *.jpg, *.png, *.jpeg); . *.*, all files (*.*), . pick an image); axes(handles.axes_src);%用axes命令设定当前操作的坐标轴是axes_src fpath=pathname filename;%将文件名和目录名组合成一个完整的路径 img_src=imread(fpath);imshow(img_src); img_src=getappdata(handles.figure_mywork,img_src); function m_file_exit_callback(hobject, eventdata, handles) close(handles.figure_mywork); function m_image_callback(hobject, eventdata, handles) function m_sobel_callback(hobject, eventdata, handles) axes(handles.axes_src);%用axes命令设定当前操作的坐标轴是axes_src img_src=getappdata(handles.figure_mywork,img_src); a=img_src; axes(handles.axes_src); imshow(a);title(原图); 21 y_mask = -1 -2 -1;0 0 0;1 2 1; % 建立y方向的模板 x_mask = y_mask; % 建立x方向的模板 i = im2double(a); % 将图像数据转化为双精度 dx = imfilter(i, x_mask); % 计算x方向的梯度分量 dy = imfilter(i, y_mask); % 计算y方向的梯度分量 grad = sqrt(dx.*dx + dy.*dy); % 计算梯度 grad = mat2gray(grad); % 将梯度矩阵转换为灰度图像 level = graythresh(grad); % 计算灰度阈值 axes(handles.axes_dst); bw = im2bw(grad,level); % 用阈值分割梯度图像 imshow(bw); % 显示分割后的图像即边缘图像 title(sobel) function m_roberts_callback(hobject, eventdata, handles) img_src=getappdata(handles.figure_mywork,img_src); a=img_src; axes(handles.axes_src); imshow(a);title(原图); x_mask = 1 0;0 -1; % 建立x方向的模板 y_mask = rot90(x_mask); % 建立y方向的模板 i = im2double(a); % 将图像数据转化为双精度 dx = imfilter(i, x_mask); % 计算x方向的梯度分量 dy = imfilter(i, y_mask); % 计算y方向的梯度分量 grad = sqrt(dx.*dx + dy.*dy); % 计算梯度 grad = mat2gray(grad); % 将梯度矩阵转换为灰度图像 level = graythresh(grad); % 计算灰度阈值 axes(handles.axes_dst); bw = im2bw(grad,level); % 用阈值分割梯度图像 imshow(bw); % 显示分割后的图像即边缘图像 title(roberts) 22 function m_priwitt_callback(hobject, eventdata, handles)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论