Log和Canny边缘检测(附Matlab程序)

 

一、 实验目的

(1) 通过实验分析不同尺度下LOG和Canny边缘提取算子的性能。

(2) 研究这两种边缘提取方法在不同参数下的边缘提取能力。

(3) 使用不同的滤波尺度和添加噪声能量(噪声水平),通过与无噪声图像对比,选择最能说明自己结论的滤波尺度和噪声水平,并做出分析说明。

二、 实验原理

边缘的含义:在数字图像中,边缘是指图像局部变化最显著的部分,边缘主要存在于目标与目标,目标与背景之间,是图像局部特性的不连续性,如灰度的突变、纹理结构的突变、颜色的突变等。尽管图像的边缘点产生的原因各不相同,但他们都是图形上灰度不连续或灰度急剧变化的点,图像边缘分为阶跃状、斜坡状和屋顶状。

一般图像边缘检测方法主要有如下四个步骤:

(1)图像滤波:传统边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能。需要指出的是,大多数滤波器在降低噪声的同时也造成了边缘强度的损失,因此,在增强边缘和降低噪声之间需要一个折衷的选择。

(2)图像增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将邻域(或局部)强度值有显著变化的点突显出来。边缘增强一般是通过计算梯度的幅值来完成的。

(3)图像检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点。最简单的边缘检测判断依据是梯度幅值。

(4)图像定位:如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来。

LOG检测算子

(1)LOG边缘检测算子

在20世纪70年代,Marr理论根据神经生理学实验得出了以下结论:物体的边界是将亮度图像与其解释连接起来的最重要线索。边缘检测技术在当时是基于很小邻域的卷积,只对特殊图像效果好。这些边缘检测子的主要缺点是它们依赖物体的大小且对噪声敏感。

基于二阶导数过零点的边缘检测技术探究了阶跃边缘对应于图像函数陡峭的变化这一事实。图像函数的一阶导数在对应于图像边缘的位置上应该取得极值,因此二阶导数在同一位置应该为0;而寻找过零点位置比起极值来得更容易和更准确。关键的问题是如何稳定地计算二阶导数,一种可能性是首先平滑图像(减小噪声),再计算二阶导数。在选择平滑滤波器时,需要满足两个标准:

(1) 滤波器应该是平滑的且在邻域中大致上是有限带宽的,以便减少会导致函数变化的可能频率数。

(2)空间定位的约束要求滤波器的响应应来自于图像中邻近的点。这两个标准矛盾的,但是可以通过使用高斯分布同时得到优化。在实践中,需要准确地考虑优化的含义。

2D高斯平滑算子(也称为高斯滤波器或简单地称为高斯)由下式给出:

其中是图像坐标,σ是关联的概率分布的标准差。标准差是高斯滤波器的唯一参数,它与滤波器操作邻域的大小成正比。离算子中心越远的像素影响越小,离中心超过3的像素影响可以忽略不计。我们的目标是得到平滑后2D函数的二阶导数。我们知道Laplacian算子给出了二阶导数且是各向同性的。那么高斯平滑后的图像的Laplacian可以表示为:

由于所涉及算子的线性性,微分和卷积运算顺序可以交换:

由于高斯滤波器的导数与所考虑的图像无关,故它可以事先解析地计算出来。这样复合运算的复杂度降低了。选择算子的基础有两个基本概念。第一,算子的高斯部分会模糊图像,从而在尺寸上将结构的灰度(包括噪声)降低到远小于σ的程度,而且高斯函数能在空间和频率两个域平滑图像,因而在原图像中引入不存在的人为干扰(如振铃)的可能性很小。第二,拉普拉斯有各向同性(旋转不变)的重要优点,符合人的视觉系统特性,而且对任何模板方向的灰度变化有相等的响应,从而避免了使用多个模板去计算图像中任何点处的最强响应。

LOG算法步骤如下:

1、 取样得到的高斯低通滤波器对输入图像滤波。

2、 计算第一步得到图像的拉普拉斯。

3、 找到步骤2所得图像的零交叉。

Canny边缘检测算子介绍

1986年,JOHN CANNY 提出一个很好的边缘检测算法,被称为Canny边缘检测器,它是迄今为止讨论过的最优秀的边缘检测器。

Canny方法基于三个基本的目标:

1、低错误率。所有的边缘都应该被找到,并且没有假边缘,所有检测的边缘尽可能真实。

2、边缘点应被很好的定位。由检测器检测到的边缘点与真实边缘的中心之间的巨鹿应该最小。

3、单一的边缘点效应。对于真实的边缘点,检测器应该仅仅返回一个点。也就是真实边缘的局部最大数应该是最小的。意味着仅存在单一边缘点的位置,检测器不应指出多个边缘像素。

Canny边缘检测算法由一下基本步骤组成:

1、用一个高斯滤波器平滑输入图像。

2、计算梯度幅值图像和角度图像。

3、对梯度幅值图像应用非最大抑制。

4、用双阈值处理和连接分析来检测并连接边缘。

算法详解

1、高斯滤波

对任何一幅图像进行边缘检测,都不能直接在原始数据上进行操作,必须有平滑滤波的过程。Canny算子的第一步就是对原始图像进行高斯平滑滤波,高斯模板如下:

用该模板对原始图像进行高斯卷积,可以得到平滑后的图像:

高斯模糊后的图像与原始图像相比,有轻微的模糊,高斯卷积的目的主要是为了抑制图像噪声对边缘检测的干扰,它能够在频域和时域两个域平滑图像。

2、梯度幅值图像和角度图像

幅值图像和角度图像是与平滑后的图像尺寸相同的阵列。因为它是使用梯度得到的,在局部最大值范围通常包含更宽的范围。下一步是细化那些边缘,也就是下一步需要采用的操作,使用非最大抑制。

3、非最大抑制

非最大抑制的目的是细化梯度幅值图像产生的宽边缘问题,该方法的本质是指定边缘法线的许多离散方向(梯度向量)。例如,在一个3×3区域内,对于通过该区域中心点的边缘,我们可以定义四个方向:水平、垂直、+45°和-45°。图1显示了水平边缘的两个可能方向。

图1  在一个3×3区域中,水平边缘的两个可能方向。

因为我们需要把所有的边缘方向量化为四个方向,故需要定义一个方向范围,在该范围内,我们考虑一个水平方向的边缘。我们由法线的方向来确定边缘的方向。如图2所示,如果边缘法线方向的范围为-25°和+25°,或者是-157.5°和+157.5°,我们称该边缘为水平边缘。图3则显示了对应于所考虑的四个方向的角度范围。

图2 图3

图2表示一个水平边缘的边缘法线的方向角的值的范围(灰色)        

图3表示在3×3区域中,4种类型的边缘方向的边缘法线角度范围

令d1,d2,d3和d4表示四个基本边缘方向:水平、-45°、垂直、+45°。对于中以没一点为中心的3×3区域,我们可以给出如下非最大抑制方案:

(1) 寻找最接近的方向.

(2) 如果的值至少小于沿的两个邻居之一,则令(抑制);

否则,令是非最大抑制后的图像。

3、阈值处理

为了减少伪边缘点,对进行阈值处理。Canny算子采用双阈值的处理方法,一个低阈值,一个高阈值,Canny算子比率2:1或3:1。将阈值操作认为两幅附加的图像

开始时,被设置为零。阈值处理后,的非零像素通常比少,但是中所有的非零像素都包含在中。通过令

三、 实验结果及分析

在实验中,选取三幅图像作为边缘检测的输入图像,分别是棋盘格(Tessella.bmp)、Lena (Lena.bmp)和自己选择的一幅自然场景图像(转换成8bit灰度,256×256大小的Bmp格式图像)。实验过程中,为了比较噪声的影响,分别对图像加入了不同参数下的高斯噪声。具体参数如下:

对于LOG算子,采用了均值为0,标准差σ=0.005的高斯白噪声。高斯模板采用的是滤波尺度为5×5,标准差σ=1,设置的阈值有thr=0.06、0.10、0.15三种情况。同时为了比较加入噪声对边缘检测的影响,同时参考了无噪声不同参数下的边缘检测效果。

对于Canny算子,设置的参数主要有高斯模糊尺度的不同,添加的噪声的程度以及双阈值参数的设置。具体为在无添加噪声情况下,有滤波尺度5×5

σ=1,thr_min=12,thr_max=24;滤波尺度5×5 ,σ=0.5 ,thr_min=12, thr_max=24;滤波尺度5×5 ,σ=1,thr_min=24 ,thr_max=48;滤波尺度5×5 ,σ=1 ,thr_min=6 thr_max=12;添加高斯噪声图片均值为0,方差为0.005 滤波尺度5×5 ,σ=1 thr_min=6 ,thr_max=12;添加高斯噪声图片均值为0,方差为0.0005滤波尺度5×5 ,σ=1 ,thr_min=6 ,thr_max=12。

(一)LOG边缘检测结果

1、Lena(256×256,bmp格式的灰度图)为测试图片进行边缘检测

(1)噪声水平为=0.0005

图1-1-1 LOG 边缘检测及局部放大 =1 thr=0.06

图1-1-2 LOG 边缘检测及局部放大 =1 thr=0.10

图1-1-3 LOG 边缘检测及局部放大 =1 thr=0.15

图1-1- 4 LOG 边缘检测及局部放大 =0.5 thr=0.15

(2)噪声水平为=0.005

图1-1-5 LOG 边缘检测及局部放大 =1 thr=0.06

2、以棋盘格Tessella为测试图片进行边缘检测

(1)噪声水平为=0.0005

图1-2-1 LOG 原图及加噪图像

图1-2-2 LOG 高斯平滑及边缘检测图像 =1 thr=0.06

(二)Canny边缘检测结果

该部分对Canny边缘检测的四个步骤的各阶段图像都进行了显示,以便检验每一步操作的功能。在本实验中,阈值采用了thr_max/thr_min=2的默认比例。

1、以Lena(256×256,bmp格式的灰度图)为测试图片进行边缘检测

(1)噪声水平为=0,无噪声边缘检测

图2-1-1滤波尺度 =1 thr_min=12 thr_max=24

v

图2-1-2滤波尺度 =0.5 thr_min=12 thr_max=24

图2-1-3滤波尺度 =1 thr_min=24 thr_max=48

图2-1-4滤波尺度 =1 thr_min=6 thr_max=12

(2)噪声水平为=0.005

图2-1-5滤波尺度 =1 thr_min=6 thr_max=12

(3)噪声水平为=0.005

图2-1-6滤波尺度 =1 thr_min=6 thr_max=12

2、以棋盘格Tessella为测试图片进行边缘检测

图2-2-1添加高斯噪声图片均值为0,方差为0.0005

滤波尺度 =1 thr_min=6 thr_max=12

实验结果分析

(1)以Lena图像分析LOG和Canny

通过观察图1-1-1、图1-1-2及图1-1-3,可以发现LOG边缘检测随着阈值thr的增大,虽然噪点越来越少,但同时检测到的图像边缘信息丢失严重,图像局部精细部分检测几乎趋向于零。

通过观察图1-1-1和图1-1-5,两幅图主要是加的噪声水平不一样,前者是0.0005,后者则是0.005,可以看到图1-1-5边缘检测的效果非常差,几乎只能隐约看到轮廓信息,大量的噪点充斥着整幅图像。从而我们可以知道LOG算子对噪声比较敏感,图1-3-2同样证实了该结论。

比较高斯滤波模板标准差为1的图1-1-1和标准差为0.5图1-1-4,可以发现在尺度较小的情况下,对图像中的纹理丰富的头发,帽子上的装饰刻画的比较细致,但同时丢失了背景中左侧的垂直边缘和右侧中部的对比度很弱的横向边缘;在大尺度上,这些背景边缘得到了体现,但同时对于那些丰富的纹理区,检测结果出现了丢失和偏移。

从Canny算子的检测结果来看,它对于图像中的纹理丰富的地方和背景处的边缘,以及对比度弱的边缘都能得到很好的检出率;从图2-1-1和图2-1-2可以发现在大尺度上同样也丢失了很多细节,只表现出一些轮廓特征。

比较图2-1-1、图2-1-3及图2-1-4,同样可以发现,随着阈值的增大,Canny边缘检测同样丢失信息越来越多,只表现出一些轮廓。比较图2-1-4和图2-1-5,在噪声水平扩大10倍的情况下,可以观察到左侧垂直边缘信息丢失严重,同时边缘像素变宽,出现了横向的细小条纹。右侧黑色背景部分出现了一定的伪边缘现象。但相对于LOG算子,Canny边缘检测总体效果较好,对噪声的抑制较强。

(2)以Tessella图像分析LOG和Canny

Tessella图像是边缘信息丰富的棋盘格,灰度信息分布规律,只能取有限的几个值。观察比较图1-2-2和图2-2-1,可以发现,对于LOG算子,垂直信息丢失严重,垂直边缘普遍断开,水平边缘信息也比较宽,对噪声比较敏感,检测效果较差。对于Canny算子,可以发现边缘检测效果非常好,对于噪声点的抑制也表现的非常优异,只出现了一些零散的孤立噪声点。Canny算子虽然对各种边缘都有较好的检出率,但是检测出的边缘点与原始图像的位置有一定范围的误差。

四、 实验结论

从以上的检测结果中可以看出,相同尺度下的LOG算子总是能比Canny算子检测出更多的细节,而相对于此,Canny算子却总是能对真正比较显著地边缘给出检测。LOG边缘检测子是采用二阶导数过零点的检测方法,故对噪声更敏感一些,因此从抑制噪声方面来讲,Canny边缘检测子不容易受到噪声的干扰,而相同尺度下LOG算子却容易受到噪声的干扰,抑制噪声的能力要弱一些。另外,由于Canny边缘检测子采用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中,故而Canny算子更能检测出真正的弱边缘,但是Canny边缘检测子检测出的边缘的位置会有一定范围的误差,LOG边缘检测子相对比较容易受到噪声干扰,会检测出更多的细节,也容易检测出一些由于噪声引起的假边缘,但是LOG边缘检测子对边缘位置的检测还是很准确的。在大尺度上的算法都比较好的检测出树干的边缘,而对周围的纹理区域的刻画都失去了组织结构上的特征。

LOG算子容易受尺度的影响,不同尺度下的边缘点要用不同尺度的LOG算子检测,Canny 算子受尺度的影响不太明显,不同尺度下,边缘点的位置都有偏差,但几乎相同; LOG算子对噪声的抑制能力随着尺度的增加而增加,相同尺度下的Canny算子比LOG算子的抗噪声能力强,而LOG算子比Canny算子的边缘点准确;在尺度选择合适的情况下,LOG算子对图像边缘点检测的位置非常准确,能够保留边缘点比较细致的组织结构,而Canny算子对图像边缘检出率比较高,包括纹理区域,以及对比度很弱的边缘点,但是对这些边缘点的组织结构刻画得不是特别细致,边缘点的位置有小范围的偏差。

 

MATLAB程序http://download.csdn.net/detail/lk274857347/9577223

 

参考文献

1. D.Marr and E. Hildreth, Theory of Edge Detection, Proc. R. Soc. Lond. B207:187-217.

2. John Canny, A Computational Approach to Edge Detection, IEEE Trans. PAMI, 8(6):679-698.

3. James J. Clark, Authenticating Edges Produced by Zero-crossing Algorithms, IEEE T. PAMI, 11(1), 1989, pp.43-57.

4. Rafael, C, Gonzalez, Richard, E, Woods. 数字图像处理(第三版)[M]. 北京:电子工业出版社, 2011.

5. http://blog.csdn.net/humanking7/article/details/46606791

时间: 2024-10-20 00:09:41

Log和Canny边缘检测(附Matlab程序)的相关文章

Hough变换检测圆(附:MATLAB程序) - mhjerry的专栏(子水) - 博客频道 - CSDN.NET

来源:http://blog.csdn.net/mhjerry/article/details/7061819#1536434-hi-1-45330-42d97150898b1af15ddaae52f91f09c2 Hough变换很好玩,以前在学校写过一些检测圆圈.椭圆.双曲线等图像,同时也可以检测多个圆形.

Canny边缘检测原理及C#程序实现

http://blog.csdn.net/yjz_uestc/article/details/6664937 Canny边缘检测是被公认的检测效果最好的边缘检测方法,是由John F. Canny于1986年提出,算法目标是找出一个最优的边缘检测的方法,所谓最优即:1.好的检测:算法能够尽可能的标识出图像的边缘:2.好的定位:标识出的边缘要尽可能的与实际边缘相接近:3.最小响应:图像中的边缘只能标识一次,并且不能把噪声标识成边缘.同时我们也要满足3个准则:信噪比准则.定位精度准则.单边缘响应准则

[图像]Canny检测的Matlab实现(含代码)

原创文章,欢迎转载.转载请注明:转载自 祥的博客 原文链接:http://blog.csdn.net/humanking7/article/details/46606791 图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个阶跃,既从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值. Canny边缘检测基本特征如下: (1) 必须满足两个条件:①能有效地抑制噪声:②必须尽量精确确定边缘的位置. (2) 根据对信噪比与定位乘积进行测度,得到最优化逼近算

Canny边缘检测算法

作为对比,先看一下Sobel的原理: Sobel的原理: 索贝尔算子(Sobeloperator)是图像处理中的算子之一,主要用作边缘检测.在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值.在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量. 该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值.如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像 Canny边缘检测算子的matlab实现 在以上例

canny算法的MATLAB和C++实现(转载)

图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个阶跃,既从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值.图象的边缘部分集中了图象的大部分信息,图象边缘的确定与提取对于整个图象场景的识别与理解是非常重要的,同时也是图象分割所依赖的重要特征,边缘检测主要是图象的灰度变化的度量.检测和定位,自从1959提出边缘检测以来,经过五十多年的发展,已有许多中不同的边缘检测方法.根据作者的理解和实践,本文对边缘检测的原理进行了描述,在此基础上着重对Canny检

Canny边缘检测算法原理及其VC实现详解(一)

转自:http://blog.csdn.net/likezhaobin/article/details/6892176 图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个阶跃,既从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值.图象的边缘部分集中了图象的大部分信息,图象边缘的确定与提取对于整个图象场景的识别与理解是非常重要的,同时也是图象分割所依赖的重要特征,边缘检测主要是图象的灰度变化的度量.检测和定位,自从1959提出边缘检测以来,经过五十多年

算法解剖系列(1)-Canny边缘检测原理

Canny边缘检测算子 基本原理 须满足条件:抑制噪声:精确定位边缘. 从数学上表达了三个准则[信噪比准则(低错误率).定位精度准则.单边缘响应准则],并寻找表达式的最佳解. 属于先平滑后求导的方法. 算法实现步骤 1.使用高斯滤波平滑图像 令f(x,y)表示数据(输入源数据),G(x,y)表示二维高斯函数(卷积操作数),fs(x,y)为卷积平滑后的图像. G(x,y)=12πσ2e?(x2+y2)2σ2 fs(x,y)=f(x,y)?G(x,y) Guess过程 用坐标点(x,y)表示一个3×

[转载+原创]Emgu CV on C# (六) —— Emgu CV on Canny边缘检测

Canny边缘检测也是一种边缘检测方法,本文介绍了Canny边缘检测的函数及其使用方法,并利用emgucv方法将轮廓检测解算的结果与原文进行比较. 图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘.Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法. Canny 边缘检测的数学原理和算法实现这里就不再了,有兴趣的读者可以查阅专业书籍. 一.概述(若果不想看,可以略过.转自:<C

OpenCV2马拉松第17圈——边缘检测(Canny边缘检测)

计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g 收入囊中 利用OpenCV Canny函数进行边缘检测 掌握Canny算法基本理论 分享Java的实现 葵花宝典 在此之前,我们先阐述一下canny检测的算法.总共分为4部分. (1)处理噪声 一般用高斯滤波.OpenCV使用如下核 (2)计算梯度幅值 先用如下Sobel算子计算出水平和竖直梯度 我在OpenCV2马拉松第14圈--边缘检测(Sobel,prewitt,robert