![图像的边缘检测_第1页](http://file4.renrendoc.com/view/de6eb4c06cb0df17884419e9208ef07a/de6eb4c06cb0df17884419e9208ef07a1.gif)
![图像的边缘检测_第2页](http://file4.renrendoc.com/view/de6eb4c06cb0df17884419e9208ef07a/de6eb4c06cb0df17884419e9208ef07a2.gif)
![图像的边缘检测_第3页](http://file4.renrendoc.com/view/de6eb4c06cb0df17884419e9208ef07a/de6eb4c06cb0df17884419e9208ef07a3.gif)
![图像的边缘检测_第4页](http://file4.renrendoc.com/view/de6eb4c06cb0df17884419e9208ef07a/de6eb4c06cb0df17884419e9208ef07a4.gif)
![图像的边缘检测_第5页](http://file4.renrendoc.com/view/de6eb4c06cb0df17884419e9208ef07a/de6eb4c06cb0df17884419e9208ef07a5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
图像的边缘检测一、摘要:基于微分法的图像边缘检测是目前边缘检测的基本方法。本次实验将对以Roberts算子、Prewitt算子以及Sobel算子为模版的边缘检测方法进行讨论和实现。并对目前常用的各种边缘检测算法进行比较,对创新算法(差影法/振荡法)进行研究。二、前言:图像边缘检测就是通过对图像灰度级的分析,找出灰度级变化梯度大的灰度的过程。图像的边缘存在于图像内部背景与目标之间,目标与目标之间,基元与基元之间。实现边缘检测的目的是找出图像中亮度变化较为明显的点。图像边缘检测被广泛应用于测绘学、摄影测量与遥感学等诸多学科领域,是图像特征分析、目标提取的重要方法之一。在军事上,通过图像边缘检测,可以提取出红外目标的空间位置;在医学上,通过图像边缘检测可以标定细胞的运动状态;在材料学上,通过图像边缘检测可以分析微粒的尺寸大小;在电子学上,通过图像边缘检测可以检查微小芯片的引脚连接方式……总之图像边缘检测的应用是极其广泛的。图一三种不同情况的边缘变化类型。其中:(a).阶梯边缘(Step-edge);(b).屋顶型边缘(Roof-edge);(c).线性边缘(Line-edge)(c)(b)(a)一张包含有特定灰度信息的图像,它的边缘位置灰度变化特征存在多种情况。常见的边缘点有三种。第一种是阶梯形边缘(Step-edge),即从一个灰度到比它高好多的另一个灰度。第二种是屋顶型边缘(Roof-edge),它的灰度是慢慢增加到一定程度然后慢慢减小。还有一种是线性边缘(Line-edge),它的灰度从一级别跳到另一个灰度级别之后然后回来。这三种边缘可以用下图(图一)来分别表示:图一三种不同情况的边缘变化类型。其中:(a).阶梯边缘(Step-edge);(b).屋顶型边缘(Roof-edge);(c).线性边缘(Line-edge)(c)(b)(a)目前,较为常见的图像边缘检测算法就是根据图像灰度级变化的梯度(grad)原理衍生发展而来的。在数学上,梯度代表了函数或者序列沿特定方向的变化情况。梯度大,则变化大;梯度小,则变化小;梯度为零,即数据没有发生变化。根据梯度的这种性质,产生了大量的图像边缘检测算法。如果将每一个算法看成一个算子。我们常用的算子就包含有Kirsch算子、Laplace算子、LOG算子、Sobel算子、Prewitt算子和Roberts算子。我们下面将对以上提及的后三种算子进行讨论。三、算法原理:3.1.Roberts算子:roberts算子是图像边缘检测的最基本、最简单算子。根据数学上梯度的基本原理,我们知道梯度(grad)是一个向量,它指出了图像灰度级变化最快的方向和数量。如式(1)所示:grad(f)=(∂f∂x,∂f∂y)其中,f为图像数据。X和y分别代表水平和竖直两个方向。由于数字图像实际上是由像素(pixel)组成。也就是说我们用于处理的图像包含了一个离散而非连续的数据矩阵,这个矩阵中包含图像所有的灰度信息。这样,对图像f求导的过程就变成了对离散二阶图像灰度序列f(x,y)求导的过程,如式(2)所示:grad(f(x,y))=(fx+Δx=(fx+pixel =(fx+1,y-f(x,其中,pixel表示单个像素,其值为1。根据导数的性质,pixel取到1是在它趋近0时取到的最小的可能值。这使得(2)式成立。如果设grad两个梯度方向的偏导数分别为:Grad_X、Grad_Y。则根据(2)式可得:Grad_X=f(x+1,y)-f(x,y)……(3)Grad_Y=f(x,y+1)-f(x,y)……(4)若设D(x,y)为求取梯度以后的图像矩阵,则由(3)、(4)可得梯度的模即D(x,y)的各点对应结果为:D(x,y)=(Grad_X)2+(Grad_Y)如果将(3)、(4)式中f的系数化为矩阵。则Grad_X和Grad_Y的系数矩阵可分别表示为Gx,Gy,如式(6)、(7):Gx=-1100…Gy=-1010…则将Gx、Gy分别叫做图像边缘检测的一个算子。此类算子的计算规则是卷积规则,即分别用对应位置的像素灰度乘以算子对应位置的系数,然后把乘积求和得出方向的梯度,如果设此运算的运算符为“※”,则其运算规则如图二所示。横向梯度:Grad_X=f(i,j)※Gx=-1×f(i,j)+1×f(i+1,j)+0×f(i,j+1)+0×f(i+1,j+1)纵向梯度:Grad_Y=f(i,j)※Gy=-1×f(i,j)+0×f(i+1,j)+1×f(i,j+1)+0×f(i+1,j+1)图二图像边缘检测算子卷积运算规则Robets算子就是基于上述原理和算法产生的一类新算子,它的梯度运算方式和普通的梯度预算稍有区别,下面给出沿X,Y方向的两个Roberts算子:Rx=100运用这两个算子产生的梯度运算分别为:GradRob_X=f(x,y)-f(x+1,y+1)……(8)GradRob_Y=f(x+1,y)-f(x,y+1)……(9)则将(8)、(9)二式代入(5)式,使用Rx、Ry对整张图像所有像素点进行卷积运算,即可得到基于Roberts算子的梯度信息矩阵。将使用roberts算子得到的梯度结果转换成图像即为roberts算子边缘检测的最终结果。3.2.Prewitt算子:Prewitt算子是1970年左右Prewitt提出的一个算子。此算子使用了两个三阶矩阵,一个是水平方向,一个是垂直方向。如下所示:Py=-1-1-1基于Prewitt算子的梯度求法是3.1节中图二所示求法的一次推广,其基本原则还是一样的,如图三。Prewitt算子是基于图像单个像素八领域的算法,比Roberts算子的处理结果更平滑。图三Prewitt算子卷积运算原则则根据以上原则,可将GradPre_X、GradPre_Y代入(5)式,即可求出目标结果。3.3.Sobel算子:Sobel算子与Prewitt算子原理相同。它们唯一的不同就是算子内容不同,即X和Y方向的卷积模版不同。两个Sobel算子分别表示如下:Sy=-1-2-1利用3.2中的卷积原则,可以求出:GradSob_X=f(i,j)※Sx;GradSob_Y=f(i,j)※Sy;则再次利用式(5)可以得到Sobel算子边缘检测的结果。四、实验过程及结果展示:本实验的图像边缘检测算法是基于MFC平台,使用VisualStudio2010编译器,通过C#.Net语言来实现的。面向对象编程(OO)由于其“层层解剖”的特性,很适用于数字图象处理。而C#语言为程序员提供了能够快速介入图像处理相关方法的类(Class)。本次实验,我们使用MFC创建了一个窗体(Form)对象。然后在窗体(Form)上添加了菜单栏(MenuStrip)、复选框(CheckBox)、图像框(pictureBox)等控件(Tools),并最后通过处理这些控件(Tools)的事件(Event)来完成图像载入、图像边缘检测、边缘检测结果显示这一系列工作。4.1软件界面和主要程序介绍:4.1.1.软件界面:软件界面包含以下几个控件,其名称和作用如表一所示:表一图像边缘检测算法研究软件控件规划表名称作用属性备注Menustrip1包括多个子控件,用来承载_Click事件,提供图像的载入、保存、边缘检测处理等接口。停靠在窗口上边沿pictureBox1用来显示执行“打开图像”动作后,被载入的图像。自动缩放pictureBox2用来显示图像边缘检测的结果。自动缩放Label1标签,用来提示pictureBox1的作用。Label2标签,用来提示pictureBox2的作用。CheckBox1用来改变处理结果的显示方式,其Checked属性发生变化时,将处理结果反色,以适应不同情形下的需求。Checked=falseOpenFileDialog1提供了一个用于打开外部文件的弹窗。SaveFileDialog1提供了一个用于保存处理结果的弹窗。软件的图形界面如图四所示:(Menustrip1只显示了本次实验的三种算法实现接口)图四图像边缘检测算法研究软件界面4.1.2.软件程序架构和处理流程:软件主要实现了面向对象编程(OO)的模块化功能。即将一系列算法写入一个新类(Class)——EdgeDetector中,这些算法分别用一个或者多个API函数来实现,这些函数提供访问EdgeDetector的接口,并提供文档内部和外部返回值。体现了.Net高聚合的要求。在数据处理的过程中,程序会在用户发出请求的状态下调用EdgeDetector中的函数,并在得到正常结果以后,释放EdgeDetector类,有利于减轻程序负担。此流程的示意图如图五所示:图五图像边缘检测算法研究软件程序架构图4.1.3.主要程序段展示:.ImageConvert类:此类负责将导入软件的图像强制转化为灰度级矩阵,或者将灰度级矩阵转存成图像,其内部的几个函数如下所示:以上函数中的参量T是一个自定义的类型。可以是int、Byte、long、double等类型中的一个。转换以后的图像灰度信息将被保存在一个T类型的二维数组中。.EdgeDetector类:此类封装了所有边缘检测的方法。负责对图像灰度矩阵按照图像边缘检测算法进行程序上的处理,以获得需求的结果。其内部函数如下所示:此类中的“edgeEnhance”函数是一个3×3模版卷积函数,其返回一个保存有图像梯度信息的二阶矩阵。其内容如下:其中,ing数组表示图像灰度级数组,tmp表示各种3×3算子矩阵,iw和ih分别表示源图像的宽和高。EdgeDetector类中的“edgeEnhanceRob”函数是一个2×2模版卷积函数。此函数专为Roberts边缘检测法预备。其内容如下:EdgeDetector类中的“edgeDetect”函数是此类面向外部引用的接口函数,它主要负责求取梯度矩阵的模,并将结果返回给一张位图。其定义形式如下所示:其内部包含两大块,一块用来声明变量和定义算子。另一块用来处理各种情况下的矩阵运算。用来声明变量的区块如下所示:用来处理矩阵运算并最终返回处理结果的第二大块如下所示(在这里只截取了Prewitt算子和Sobel算子的处理过程,其他与此雷同):从以上程序中可以看到,edgeDetect函数内部调用了edgeEnhance函数,返回了X、Y方向的两种灰度级梯度矩阵。而程序中对处理结果的二值化处理是为了突出处理结果的边缘特性。相当于是对处理结果进行了一次简单的阈值分割。其中thresh参数作为阈值是可以通过用户来调整的。最后,再次调用ImageConvertor类中的ToBitmap函数,将处理结果返回给一个等尺寸的位图。.Form1类:此类是软件实现过程的“引擎”类。它提供了自动生成的窗体绘制、控件绘制、控件事件处理代码。将数据整合并最终显示给用户。此类的内容如下所示:这里仅对prewitt算子的最终实现过程进行反映,其他的实现方法与此类似:上述代码中,edgeDetect函数传入的阈值(thresh)为100,用户可以调整这个值以获得理想结果。4.2.处理结果展示:三个算子的处理结果展示如下表所示:表二图像边缘检测结果展示表源图像算子类型处理结果取逆后的处理结果Roberts算子Prewitt算子Sobel算子五、目前常用的几种边缘检测算法的比较:除了以上实验中提到过的Roberts、Prewitt和Sobel算子,常用的用于边缘检测的算子还有Laplace算子、LOG算子、Kirsch算子等。这些算子在图像边缘检测中各有应用,在实际的图像分析过程中,需要针对不同的情况,选择合适的算子进行运算。下面对Roberts、Prewitt、Sobel、Laplace、Kirsch等5个算子从算子结构、处理结果和适合的领域进行一个简单的讨论。Roberts算子。算子一般结构:10Prewitt算子。算子一般结构:-1-1-1000Sobel算子。算子的一般结构:-1-2-1000Laplace算子。算子的一般结构:11Kirsch算子。Kirsch算子包括多达8种算子结构。其处理结果更加注重图像边缘区域的细节特点,能够较为全面,明显的展示出边缘特性。在相同的阈值分割条件下,其结果优于Sobel算子。相同阈值条件下,以上5种算子的边缘检测效果如下(表三)所示:表三5种常用边缘检测算子结果的比较源图像Roberts算子Prewitt算子Sobel算子Laplace算子Kirsch算子六、自己总结的两种新算法:我们除了从梯度原理的角度研究数字图像边缘检测以外,还可以脱离梯度的概念,从其他方向考虑边缘的提取过程。经讨论发现,在对图像进行二值化处理的时候,由于所选阈值不同,二值化以后,图像灰度级较低的像素损失的量也不同。当阈值选得比较高时,灰度级较低的像素保留下来的数量多,当阈值选得比较低时,灰度级较低的像素保留下来的数量少,那么如果用前者的处理结果和后者的处理结果进行某种逻辑运算,就可能得到图像的边缘。这是第一个思考方向。图像在被阈值分割以后,像素矩阵里只包含0和255这两种灰度级。则如果将阈值分割之后的源图像分别沿上下左右四个方向分别做相同幅度的位移,并将每次位移较源图像偏移的像素(偏移量)标记出来。那么这些偏移量的交集就可以作为图像的边缘。6.1.第一种思路的实现及处理结果:第一种思路的算法程序段如下所示:其中“toBinary”函数将对图像进行阈值分割,参量100和150分别是选取的阈值。此方法的处理结果如下所示:源图像正向结果反向结果由上图可以看出,这种方法处理的边缘不能有效的滤除杂波,很多边缘显示不明显,实用性不高。6.2.第二种思路的实现及处理结果:第二种思路的算法程序段如下所示:以上算法定义了四个矩阵——leftArray,rightArray,upArray,downArray分别用于储存图像左移、右移、上移、下移以后的结果。然后再分别用这几个结果和源图像矩阵进行对比,找出平移以后的结果相对于源图像发生“膨胀”的区域,最后把所有找到的区域拼接即可。若设源图像中被检测的目标区域为S,移动以后的目标区域为D,则使用此方法进行边缘检测的图示如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初三数学总复习资料-分专题试题及答案
- 小学四年级乘法分配律练习题集
- 2024年中国原料成分市场前景及投资研究报告:动力与创新
- 北师大版八年级下册数学全册教案设计
- 八上1.2 明辨是非教案
- 苏州市昆山市张浦镇社区工作者招聘考试试题及答案2024
- 校园监控系统设计方案1
- 绍兴市诸暨市暨南街道社区工作者招聘考试试题及答案2024
- 良好的师生关系是教育成功的关键
- 镜面砼外观质量保证措施
- 熔模铸造工艺流程
- 完整版检验科室内质量控制标准操作程序
- 学校中层干部发言3篇
- 机器学习期末试题(共3页)
- 01-1 运动竞赛学学科简介.课件电子教案教学教程
- 小学入门数独100题(简单)
- 加气混凝土砌块墙体粉刷石膏抹灰施工工艺方法
- 巴西股票市场研究
- 诊所中药饮片清单
- 最新配料机使用说明书
- 环境艺术设计专业《公共空间设计》—课标
评论
0/150
提交评论