资源描述
目 录 摘要.1 引言.2 一、绪论.3 1.1 课程设计选题的背景及意义.3 1.2 图像边缘检测的发展现状.3二、MATLAB 简介.3 2.1 基本功能.3 2.2 应用领域.4三、图像边缘检测算法的介绍.4 3.1 边缘算子法.5 3.2 曲线拟合法.5 3.3 模板匹配法.5 3.4 小波变换法.5 3.5 数学形态学法.5 3.6 模糊理论法.6 3.7 神经网络法.6四、测试与调试.6 4.1 edge 函数.6 4.2 边缘检测算子法.7 4.2.1 Canny 算子.7 4.2.2 Prewitt 算子.9 4.2.3 Sobel算子.10 4.2.4 Roberts梯度算子.12 4.2.5 Log算子.14五、总结与心得体会.16六、参考文献.17 摘 要 边缘是图像最基本的特征,包含图像中用于识别的有用信息,边缘检测是数字图像处理中基础而又重要的内容。该课程设计具体考察了 5 种经典常用的边缘检测算子,并运用 Matlab 进行图像处理结果比较。梯度算子简单有效,LOG 算法和 Canny 边缘检测器能产生较细的边缘。 边缘检测的目的是标识数字图像中灰度变化明显的点,而导函数正好能反映图像灰度变化的显著程度,因而许多方法利用导数来检测边缘。在分析其算法思想和流程的基础上,利用 MATLAB 对这 5 种算法进行了仿真实验,分析了各自的性能和算法特点,比较边缘检测效果并给出了各自的适用范围。关键词:边缘检测;图像处理;MATLAB 仿真 引 言边缘检测在图像处理系统中占有重要的作用,其效果直接影响着后续图像处理效果的好坏。许多数字图像处理直接或间接地依靠边缘检测算法的性能,并且在模式识别、机器人视觉、图像分割、特征提取、图像压缩等方面都把边缘检测作为最基本的工具。但实际图像中的边缘往往是各种类型的边缘以及它们模糊化后结果的组合,并且在实际图像中存在着不同程度的噪声,各种类型的图像边缘检测算法不断涌现。早在 1965 年就有人提出边缘检测算子,边缘检测的传统方法包括 Kirsch,Prewitt,Sobel,Roberts,Robins,Mar-Hildreth 边缘检测方法以及 Laplacian-Gaussian(LOG)算子方法和 Canny 最优算子方法等。本设计主要讨论其中 5 种边缘检测算法。在图像处理的过程需要大量的计算工作,我们利用 MATLAB 各种丰富的工具箱以及其强大的计算功能可以更加方便有效的完成图像边缘的检测,并对这些方法进行比较,并给出心得、体会。一、绪论1.1 课程设计选题的背景及意义 边缘是图像的最基本特征,它包含了用于识别的有用信息,为人们描述或识别目标以及解释图像提供了一个重要的特征参数。物体的边缘是以图像局部特性的不连续性为形式出现的。从本质上说,边缘常常意味着一个区域的终结和另一个区域的开始,它普遍存在于目标与背景、目标与目标、区域与区域、基元与基元之间,是图像分割所依赖的重要特征,也是纹理特征的重要信息源和形状特征的基础。有了图像边缘,我们就可以确定物体的几何尺寸并进一步对其测量,确定物体在空间中的几何位置,确定物体的形状特征并对物体进行识别。图像的边缘信息在图像分析和计算机视觉中都是十分重要的,是图像识别中提取图像特征的一个重要属性。尽管边缘在数字图像处理中的作用非常重要,但是到目前为止还没有关于边缘的精确且被广泛承认的数学定义。这里将边缘定义为图像局部特性的不连续性,如灰度的突变、颜色的突变、纹理结构的突变等。对于灰度图像,边缘是指灰度的突变,是图像中灰度变化较剧烈的地方,也即我们通常所说的信号发生奇异变化的地方。通常沿边缘走向的像素变化平缓,而垂直于边缘走向的像素变化剧烈。图像的边缘有方向和幅度两个特性。按照幅度的变化,边缘可粗略分为两种:一种是阶跃型边缘,它两边象素的灰度值有显著不同;另一种是屋顶状边缘,它位于灰度值从增加到减少的变化的转折点。边缘检测就是要检测出图像中这种灰度的不连续性,同时确定它们在图像中的精确位置,是在局部区域上针对“点”的一种运算,表现为一种典型的信号处理问题。在图像处理、模式识别和计算机视觉中,图像的边缘检测具有极其重要的意义。在大量的视觉模块计算中,边缘检测通常是视觉计算的第一步,高层次计算机视觉处理的成功与否极大地依赖于边缘检测算子的优越性能。1.2 图像边缘检测的发展现状图像的边缘检测有着很长的研究历史,学术思想非常活跃,新理论、新方法不断涌现,一直是国内外图像处理领域研究的热点,目前为止己经提出了许多方法和理论。至今提出的关于边缘检测的方法和理论尚存在不足之处,在某些具体情况下仍然无法很好的检测出目标物体的边缘,难以找到一种普遍适应性的边缘检测方法。因此,根据具体的应用要求设计新的边缘检测方法,或对现有的方法进行改进以得到满意的边缘检测结果,这些依然是研究的主流方向。二、MATLAB 简介 MATLAB 是矩阵实验室(Matrix Laboratory)的简称,是MathWorks 公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB 和 Simulink 两大部分。2.1 基本功能 MATLAB 和 Mathematica、 Maple 并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计 、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。MATLAB 的基本数据单位是矩阵,它的指令表达式与数学 、工程中常用的形式十分相似,故用 MATLAB 来解算问题要比C,FORTRAN 等语言完成相同的事情简捷得多,并且 mathwork也吸收了像 Maple 等软件的优点,使 MATLAB 成为一个强大的数学软件。在新的版本中也加入了对 C,FORTRAN,C+ ,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB 函数库中方便自己以后调用,此外许多的 MATLAB 爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。2.2 应用领域MATLAB 产品族可以用来进行以下各种工作: 数值分析 数值和符号计算 工程与科学绘图 控制系统的设计与仿真 数字图像处理技术 数字信号处理技术 通讯系统设计与仿真 财务与金融工程 MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了MATLAB 环境,以解决这些应用领域内特定类型的问题。三、图像边缘检测算法的介绍早期的有边缘算子法、曲线拟合法、模板匹配法。近年来又有许多新的边缘检测的算法:小波变换、小波包的边缘检测等,基于数学形态学、模糊理论和神经网络的边缘检测算法等。3.1 边缘算子法 边缘算子法已在引言中作出说明,这里不再赘述。3.2 曲线拟合法实验数据本身的误差经过插值法计算后带来误差,有时误差很大。在这种情况下若要使误差影响小,需要构造逼近函数,使得从总的趋势上更能反映被逼近函数的特性,即找一简单函数(次数较低的Pn(x))适用于整个x1,xn上,但不要求严格地通过所有的( xi,yi),只是尽可能的靠近( xi,yi )点,能反映数据的基本趋势。这儿的Pn(x)与已给函数从总体来说其偏差按某种方法度量能达到最小,即Pn(x) - yi为极小,所以就将求逼近函数的方法称为曲线拟合法。因此曲线拟合法适用于数据本身就有误差的情况。3.3 模板匹配法利用模板匹配可以在一幅图象中找到已知的物体。比如抓拍到了一张射门的照片,要在该照片中找到足球的位置。这时就可以采用模板匹配的方法。所谓模板匹配,其实想法很简单:拿已知的模板(在本例中为足球的图象),和原图象中同样大小的一块区域去对。最开始时,模板的左上角点和图象的左上角点是重合的,拿模板和原图象中同样大小的一块区域去对比,然后平移到下一个象素,仍然进行同3.4 小波变换法小波变换是一种新的变换分析方法,它继承和发展了短时傅立叶变换局部化的思想,同时又克服了窗口大小不随频率变化等缺点,能够提供一个随频率改变的时间一频率窗口,是进行信号时频分析和处理的理想工具。它的主要特点是通过变换能够充分突出问题某些方面的特征,因此,小波变换在许多领域都得到了成功的应用,特别是小波变换的离散数字算法已被广泛用于许多问题的变换研究中。从此,小波变换越来越引进人们的重视,其应用领域来越来越广泛。 3.5 数学形态学法数学形态学的基本思想是用具有一定形态的结构元素去量度和提取图像中的对应形状以达到对图像分析和识别的目的。 数学形态学的数学基础和所用语言是集合论,因此它具有完备的数学基础,这为形态学用于图像分析和处理、形态滤波器的特性分析和系统设计奠定了坚实的基础。数学形态学的应用可以简化图像数据,保持它们基本的形状特性,并除去不相干的结构。数学形态学的算法具有天然的并行实现的结构, 实现了形态学分析和处理算法的并行,大大提高了图像分析和处理的速度。数学形态学是由一组形态学的代数运算子组成的,它的基本运算有4个: 膨胀(或扩张)、腐蚀(或侵蚀)、开启和闭合, 它们在二值图像和灰度图像中各有特点。数学形态学的基本思想及方法适用于与图像处理有关的各个方面,如基于击中/击不中变换的目标识别,基于流域概念的图像分割, 基于腐蚀和开运算的骨架抽取及图像编码压缩,基于测地距离的图像重建,基于形态学滤波器的颗粒分析等。迄今为止, 还没有一种方法能像数学形态学那样既有坚实的理论基础,简洁、 朴素、 统一的基本思想,又有如此广泛的实用价值。有人称数学形态学在理论上是严谨的,在基本观念上却是简单和优美的。3.6 模糊理论法数字图像处理的最高目的是实现对数字图像中物体的分类或识别,即模糊识别,从而构成自动处理某些信息的机器系统,以代替人完成分类和辨别的任务。一般分为四个部分:信息获取部分、预处理部分、特征提取、决策分类。而预处理部分则使用图像复原、增强和变换技术对图像进行处理,提高图像的视觉效果,优化各种统计指标,为特征提取提供高质量的图像。3.7 神经网络法 从20世纪90年代开始,通过ReinhardEckhorn等对猫的视觉皮层神经元脉冲串同步振荡现象的研究,得到了哺乳动物神经元模型,并由此发展形成了脉冲耦合神经网络PCNN模型。脉冲耦合神经网络进一步靠近真实哺乳动物视觉神经网络中神经细胞的工作原理,非常适合于图像分割、图像平滑及降噪等应用,是20世纪神经网络理论发展的里程碑,引起了众多学者的兴趣。四、测试与调试4.1 edge 函数 在 MATLAB 图像处理工具箱中提供了专门的边缘检测 edge 函数,由 edge 函数可以实现各算子对边缘的检测,其调用格式如下:BW=edge(I,method)BW=edge(I,method,thresh)Bw=edge(I,method,thresh,direction)BW,thresh=edge(I,method,)其中,I 是输入图像。edge 函数对灰度图像 I 进行边缘检测,返回与 I 同样大的二值图像 BW;其中 1 表示边缘,表示非边缘。I 可以是 uint8 型、uint16 型或 double 型;BW 是 uint8 型。method 是表示选用的方法(算子)类型,可以选择的 method 有Sobel、Prewitt、Roberts、Log、Canny 等。可选的参数有 thresh(阈值)、sigma(方差)和 direction(方向)。4.2 边缘检测算子法 4.2.1 Canny 算子 Canny 边缘检测利用高斯函数的一阶微分,在噪声抑制和边缘检测之间寻求较好的平衡,其表达式近似于高斯函数的一阶导数。 Canny 算子是一阶算子。其方法的实质是用 1 个准高斯函数作平滑运算 fs=f(x,y)G(x,y),然后以带方向的一阶微分算子定位导数最大值。平滑后 fs(x,y)的梯度可以使用 22 一阶有限差分近似式: Pi,j(fsi,j+1-fsi,j+fsi+1,j+1-fsi+1,j)/2 Qi,j(fsi,j-fsi+1,j+fsi,j+1-fsi+1,j+1)/2 在这个 22 正方形内求有限差分的均值,便于在图像中的同一点计算计算 x 和 y 的偏导数梯度。幅值和方向角可用直角坐标到极坐标的坐标转化来计算: Mi,j反映了图像的边缘强度; i,j反映了边缘的方向。使得 Mi,j取得局部最大值的方向角 i,j,就反映了边缘的方向。Canny 算子也可用高斯函数的梯度来近似,在理论上很接近 4 个指数函数的线性组合形成的最佳边缘算子。在实际工作应用中编程较为复杂且运算较慢。Canny 边缘检测算子对受加性噪声影响的边缘检测是最优的。 程序代码:(高频成分丰富的图像) i= imread(gantrycrane.png);%读取图像 a=rgb2gray(i);%彩图变灰图 b = edge(a,canny,0.03,0.06);% edge(I,canny,thresh,sigma),sigma 默认为1 c = edge(a,canny,0.05,0.1); % =3 d = edge(a,canny,0.05,0.1,2); subplot(2,2,1),imshow(a); subplot(2,2,2),imshow(b);title(canny 双阈值=0.03,0.06 =1) subplot(2,2,3),imshow(c);title(canny 双阈值=0.05,0.1 =1) subplot(2,2,4),imshow(d);title(canny 双阈值=0.05,0.1 =2) (中低频成分丰富的图像) 结论:通过上述图像比较,不难看出阈值越小,方差越小,图像边缘越轮廓清晰。Canny算子法对高频成分丰富的图像处理效果好,对中低频成分的图像效果差。4.2.2 Prewitt 算子 Prewitt 从加大边缘检测算子的模板大小出发,由 22 扩大到 33 来计算差分算子,采用 Prewitt 算子不仅能检测边缘点,而且能抑制噪声的影响。这些算子样板由理想的边缘图像构成。依次用边缘样板去检测图像,与被检测区域最为相似的样板给出最大值。用这个最大值作为算子的输出值 P(i,j),这样可将边缘像素检测出来。定义 Prewitt 边缘检测算子模板如下:Hy= Hx=用edge 函数处理的Matlab 程序代码:(高频成分丰富的图像) i = imread(gantrycrane.png);%读取图像 a=rgb2gray(i);%彩图变灰图 b = edge(a,prewitt,0.02); c = edge(a,prewitt,0.07); d,e = edge(a,prewitt); %该处可得阈值的默认值e subplot(2,2,1),imshow(a),axis on; title(原图) subplot(2,2,2),imshow(b) ,axis on; title(prewitt 阈值=0.02) subplot(2,2,3),imshow(c) ,axis on;title(prewitt 阈值=0.07) subplot(2,2,4),imshow(d) ,axis on; title(默认)(中低频成分丰富的图像)结论:通过上述图像比较,不难看出阈值越小,图像边缘越轮廓清晰。Prewitt算子法对高频成分丰富的图像处理效果好,对中低频成分的图像效果差。4.2.3 Sobel算子 Sobel 在 Prewitt 算子的基础上,对 4-邻域采用带权的方法计算差分,该算子不仅能检测边缘点,且能进一步抑制噪声的影响,但检测的边缘较宽。 Sobel 算法是基于一阶导数的边缘检测,通过逼近导数来找边缘,其边缘点存在于图像梯度最大值处。Sobel 算子中用到了两个卷积模板(一个水平算子,一个垂直算子)。Hy= Hx=它是一种奇数大小(33)模板下的全方向微分算子,对检测点的上下左右进一步加权。Sobel 算子的思想是邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。我们用 Sobel 来检测边缘的时候,先分别用上述的模板对图像进行卷积,得到的是两个矩阵,在不考虑边界的情形下也是和原图像同样大小的 bx,by,它们分别表示图像 a 中相同位置处的两个偏导数。然后把 bx,by 对应位置两个数平方后相加得到一个新的矩阵 b,b 表示图像 a 中各个像素的灰度的梯度值。最后通过阈值处理和细化处理得到边缘图像。在阈值不为空的情况下,边缘存在于梯度幅值大于阈值平方的点上。用edge 函数处理的Matlab 程序代码:(高频成分丰富的图像)i = imread(gantrycrane.png);%读取图像 a=rgb2gray(i);%彩图变灰图b = edge(a,sobel,0.02); c = edge(a,sobel,0.07); d,e = edge(a,sobel); %该处可得阈值的默认值e subplot(2,2,1),imshow(a),axis on; title(原图) subplot(2,2,2),imshow(b) ,axis on; title(sobel 阈值=0.02) subplot(2,2,3),imshow(c) ,axis on;title(sobel 阈值=0.07) subplot(2,2,4),imshow(d) ,axis on; title(默认阈值) (中低频成分丰富的图像)结论:通过上述图像比较,不难看出阈值越小,图像边缘越轮廓清晰。Sobel算子法对高频成分丰富的图像处理效果好,对中低频成分的图像效果差。4.2.4 Roberts梯度算子 对阶跃状边缘,在边缘点处一阶导数有极值,因此可计算每个像素处的梯度来检测边缘点。对于图像 g(x,y),在(x,y)处的梯度定义为 grad(x,y)。梯度是一矢量,大小代表边缘的强度,方向与边缘走向垂直。梯度算子仅用最近邻像素的灰度计算,对噪声敏感,无法抑制噪声的影响。 Roberts 边缘检测算子根据任意一对垂直方向上的差分可用来计算剃度的原理;采用对角线方向相临两像素之差,即:x f=f(i,j)-f(i+1,j+1)(1)y f=f(i,j)-f(i+1,j+1)(2)Roberts 算子中用到了两个卷积模板(一个水平算子,一个垂直算子)。Hy= Hx=用edge函数处理的Matlab程序代码:(高频成分丰富的图像)i = imread(gantrycrane.png); %读取图像 a=rgb2gray(i);%彩图变灰图b = edge(a,roberts,0.02); %以阈值为0.02进行roberts边缘检测 c = edge(a,roberts,0.07); %阈值为0.07 d,e = edge(a,roberts); %该处可得阈值的默认值e subplot(2,2,1),imshow(a),axis on; title(原图) subplot(2,2,2),imshow(b) ,axis on; title(roberts 阈值=0.02) subplot(2,2,3),imshow(c) ,axis on;title(roberts 阈值=0.07) subplot(2,2,4),imshow(d) ,axis on; title(默认) (低频成分丰富的图像)结论:通过上述图像比较,不难看出阈值越小,方差越小,图像边缘越轮廓清晰。Roberts算子法对高频成分丰富的图像处理效果好,对中低频成分的图像效果差。4.2.5 Log算子Log 算法是基于二阶导数的边缘检测,这种方法是将高斯平滑滤波器和拉普拉斯锐化滤波器结合了起来,先平滑掉噪声,再进行边缘检测。它是对图像进行滤波和微分的过程,是利用旋转对称的 Log模板与图像做卷积,确定滤波器输出的零交叉位置。源程序如下: (高频成分丰富的图像)i= imread(gantrycrane.png);%读取图像 a=rgb2gray(i);%彩图变灰图b = edge(a,log,0.002,1.7); % 根据所指定的敏感度阈值thresh和标准偏差sigma(),用LOG算子进行边缘检测,默认时=2 c = edge(a,log,0.007,1.7); % =3 d = edge(a,log,0.002,3); subplot(2,2,1),imshow(a); subplot(2,2,2),imshow(b);title(LOG 阈值=0.002 =1.7) subplot(2,2,3),imshow(c);title(LOG 阈值=0.007 =1.7) subplot(2,2,4),imshow(d);title(LOG 阈值=0.002 =3)(中低频成分丰富的图像)结论:通过上述图像比较,不难看出阈值越小,方差越小,图像边缘越轮廓清晰。Log算子法对高频成分丰富的图像处理效果好,对中低频成分的图像效果差。五、总结与心得体会 利用MATLAB我们可以很方便的对图像边缘检测算法,进行仿真研究,比较各自优缺点,得到最优,效果最好的算法来进行图像处理。 Roberts算子定位比较精确,但由于不包括平滑,所以对于噪声比较敏感,Prewitt算子是平均滤波的一阶算子,检测的图像边缘可能大于两个像素,对灰度渐变低噪声的图像有较好的检测效果但对于混合多噪声的图像,处理效果就不理想了。Canny方法则以一阶导数为基础来判断边缘点。它是一阶传统微分中检测阶跃型边缘效果最好的算子之一。 梯度算子计算简单,但精度不高,只能检测出图像大致的轮廓,而对于比较较细的边缘可能会忽略。Prewitt算子和Sobel算子比Robel效果要好一些。Log 滤波器和 Canny 算子的检测效果优于梯度算子,能够检测出图像较细的边缘部分。Canny算子提取边缘比较完整,其边缘连续性较好,效果有预期其他算子。其次是Prewitt算子,其边缘性比较完整,再次就是Sobel算子。 通过这次课程设计,使自己对数字图像领域和MATLAB设计流程有了比较深刻的体会,同时也了解了一般软件的设计过程。在设计过程中碰到了很多的问题,通过这些问题,使自己分析问题,解决问题的能力得到了较大的提高。六、参考文献1 曹茂永,章毓.数字图像处理.北京:北京大学出版社,2007.2 张德丰.MATLAB数字图像处理.北京:机械工业出版社,2009.3 张强,王正林.精通MATLAB图像处理.北京:电子工业出版社,2009.4 电气工程学院 .安徽工程大学数字图像处理实验指导书.20105 陆学拥.基于Matlab 的图像边缘检测算法的实现及应用 .百度文库
展开阅读全文