[毕设系列--参考文献内容整理] 亚像素边缘检测器:Canny/Devernay算法的实现

目录

摘要

一、引言

二、Canny方法

三、Devernay的亚像素校正

四、Devernay算法的精度分析

五、改进的亚像素方案

六、边点链(Edge Point Chaining)

七、算法

扫描二维码关注公众号,回复: 17201293 查看本文章

八、计算复杂度

九、优点和局限性

十、总结


摘要

该文章描述了一种产生亚像素精度链状边缘点的图像边缘检测器。

该方法结合了经典的Canny和Devernay算法的主要思想。分析表明,对原始公式稍加修改可以提高边缘点的亚像素精度。


一、引言

Canny建立了给定边缘检测器的三个质量度量(良好的检测,边缘像素的良好定位和滤波器的唯一响应),并找到了一个最佳滤波器(在这三个标准的意义上)来检测建模为阶进信号加噪声的边界。Canny提出用高斯函数的一阶导数对图像进行卷积来近似理想滤波器,然后沿梯度方向用非最大梯度模量抑制像素。

后来对Canny边缘检测器进行了一些改进。其中,我们感兴趣的是Devernay提出的一种获得亚像素精度的简单后处理方法,即边缘点的位置被估计为梯度范数插值的最大值。修正方法很简单,只需计算梯度范数在梯度方向上三个相邻值之间的二次插值。该方法具有计算量低、精度高的优点。

文中还描述了一种将亚像素边缘点连接成多边形曲线的算法。

本文组织结构如下。第2节介绍了Canny方法的主要思想。Devernay的亚像素校正然后描述在第3节和其精度分析在第4节。在分析之后,第5节提出了对原公式的修改。第6节介绍了边点链接方法。第7节详细描述了整个算法,第8节分析了其计算复杂度。第9节通过对图像的实验说明了该方法的优点和局限性。最后,第10节对全文进行了总结。


二、Canny方法

Canny开创性工作的重要部分集中在寻找用于检测一维信号边缘的最佳滤波器,所寻找的滤波器应提供尽可能接近真边中心的局部极大值,并且不会产生错误检测或多个响应。在给出了满足这些要求的数学公式后,Canny解决了最佳滤波器的优化问题。Canny表明,最佳滤波器可以很好地近似高斯函数的一阶导数,并提出使用后者,以受益于其计算效率。

Canny提出对二维信号(图像)使用相同的滤波器,方法是沿着垂直于边界的方向n,对一维信号进行分析,边缘点被定义为n方向上的局部极大值。

这种只保留局部极大值的方法称为非极大值抑制。需要注意的是,由于高斯核的可分性,即使G是一个二维各向同性核,当限制在沿n方向的一维直线上时,我们得到的公式与一维情况完全相同:沿n方向的导数等价于沿n方向与高斯函数的一阶导数的卷积。

通过图像梯度可以估计出n与边界正交的方向

该方法通过从噪声产生的伪响应中分离真实边界来完成,边缘强度为

对应于沿n方向导数的范数。Canny提出了使用两个阈值H和L来区分真边,并带有迟滞现象。强度高于高阈值H的局部极大值将立即被验证并添加到输出中;如果连接到验证点的局部极大值的强度高于低阈值L,则也将被验证。

 接下来将主要说明如何在离散网格中沿n方向选择极大值点。第6节将说明什么是滞回阈值步骤中使用的连通性概念。

Canny提出了以下方案来执行二维网格中的非最大抑制。设||g|| gxgy分别表示图像梯度的范数、x分量和y分量。

Fig 1所示,假设我们现在想要确定像素B是否是图像梯度方向上||g||的局部最大值,就需要把||g(B)||||g(A)||||g(C)||进行比较,当||g(B)||>|g(A)||||g(B)||>||g(C)||时,B是一个局部极大值。一个简单的有限差分格式可以用于在网格的位置上近似||g||,例如标记为B, D, E, F和G的点,但是点A和点C的值不能用这种方法计算,于是Canny提出用两个最接近的已知值进行简单的线性插值,来近似||g(A)||和||g(C)||

 总之,Canny的方法依赖于三个参数:S,高斯核的标准差G,以及两个阈值H和L。

当一个像素B通过Canny的非最大抑制过程和带有滞后的阈值后,它就成为一个Canny边缘像素。


三、Devernay的亚像素校正

Canny的方法使得边缘点被提取到像素网格精度,但在某些应用中,人们可能要求边缘点的位置具有更精确的精度。于是Devernay对原始Canny算法提出了补充,用来产生亚像素精度的边缘点:Devernay将边缘点的位置细化为梯度范数插值的最大值;而修正过程也很简单,只需计算梯度范数在梯度方向上三个相邻位置之间的二次插值。

Fig 2显示了沿垂直于边缘方向的图像梯度的轮廓范数的示例。按照Canny的方法,将会保持像素B作为边缘像素。然而,在A和C之间可能存在一个中间位置η,其图像梯度的范数大于这些点,η点显然更适合作为边界。于是Devernay提出了一种方法来估计这种η点的位置,然后沿n方向计算偏移向量,以给出边缘像素B附近的边缘点的亚像素位置。

为了限制计算损耗,Devernay建议沿着Canny算子中使用的三个点使用梯度范数的简单二次插值:(A, ||g(A)||),(B, ||g(B)||) ,(C, ||g(C)||),通过下列公式求解最大值会导致相对于向量BC的偏移。

Devernay校正项通过一个简单且方便的计算,通过由Canny算子获得的值,获得了一个更为优秀的亚像素精度。


四、Devernay算法的精度分析

Devernay像素校正有四个误差来源:

  1. 抛物线梯度剖面假设导致的误差
  2. 有限格式梯度计算的误差
  3. Canny方案对离网点梯度幅度插值产生的误差
  4. 数值误差

对高斯边界进行误差分析,其轮廓由α· Gσ ★ Y给出,其中 Gσ 是标准差 σ 的高斯核,Y为阶跃函数,α是灰度值中边缘的步长。下图左边显示了相对于网格具有亚像素偏移γ的高斯边缘轮廓,下图右侧是Devernay的方案,使用抛物线近似计算边缘的位置。在- 1, a),(0, b)和(1,c)点之间进行二次插值得到η点处抛物线的最大值。

高斯边的导数是α·Gσ,所以在Devernay方法中使用的值为a = α · Gσ(−1 − γ), b = α · Gσ(−γ), c = α · Gσ(1 − γ),这样上式就可以进行变换,得到了以下亚像素偏移的估计。

 由于边缘步长α≠0,且带入后在分子分母中都存在,故可约去,即误差和边缘步长无关。于是用抛物线梯度近似高斯梯度的误差由ρ(σ, γ) = |η(σ, γ)−γ|给出。

使用精确的高斯函数给出了这个σ和γ的理论误差的函数。当边缘在像素网格中居中(γ = 0)时,误差为零。当边缘恰好在网格中点居中(γ = 0.5)时,误差也为零,这对应于b = c(或a = b),抛物线插值给出了正确的偏移。因为近似应该适用于非常模糊的边缘,所以误差在0到0.5之间的偏移值更大,并随着σ的增长而减小,而锐利边缘则可以用σ值在0.5到1之间的高斯边缘来建模。

再次观察上式,我们可以发现,由于使用中心差分的方式来计算导数也会产生误差,因此,Gσ(−1−γ)、Gσ(−γ)和Gσ(1−γ)的值必须替换为高斯边缘值的有限差分的绝对值。Devernay方法的经验评估可以通过合成包含高斯边缘的图像来执行,使用浮点变量的像素值,评估的结果是准确的浮点精度。

通过对垂直和水平的一组实验以及带有斜角的一组实验数据进行对比,可以得出,对于斜角,误差的主要来源是Canny插值,它可以导致误差大约5倍大的σ=1的高斯边缘。Devernay亚像素近似的误差决定了所得边缘点的精度,Devernay的方法也存在一个问题,就是会产生振动伪影,振荡伪影的大小取决于轮廓角和相对于像素网格的位移,在最坏的情况下,振荡的振幅(从下包线到上包线)是定位误差的两倍。


五、改进的亚像素方案

在造成Devernay方案误差的四个因素中,有一个因素可以通过对方法进行简单的修改来消除。总是沿着垂直线或水平线执行插值,不再需要在偏离网格的位置使用梯度值,也不再需要Canny插值。Devernay方案要求被细化的中心点是所使用的三个值中的局部最大值,因此,我们必须修改算法来选择边缘点和插值方向,以满足这些条件。

当一个像素(x, y)是梯度模量的水平局部最大值,并且图像梯度在该点上水平大于垂直时,它将成为水平边缘点。

同理,当一个像素(x, y)是梯度模量的垂直局部最大值,并且图像梯度在该点上垂直大于水平时,它将成为垂直边缘点。

当两个条件都满足时,我们选择将它分类为水平边缘点(也可以分为垂直边缘点,只需要保持一致的分类标准即可)。

修正方案的经验误差可以用与以前相同的方法进行计算。修正方案的结果也可以显著发现原来存在的振动伪影几乎消失不见,方案效果很好。


六、边点链(Edge Point Chaining)

每个边点的计算都是独立于其他边点的,属于同一边的边点需要连接起来,形成与图像轮廓相对应的曲线。由于Devernay方案为点提供了亚像素精度,因此可以使用一个程序进行链接:将一个边缘点连接到距离它最近的,且距离不超过一定公差的其他边缘点。

由于每个边点都与一个像素相关联,所以对链的边点搜索减少到5 × 5的邻域范围,即相当于将经典的8-连通区域扩展了一步。大多数的边缘点被链接到另一个属于8-连通邻域的点上,当存在噪声且曲线变得零碎时,扩展的连通性有助于提取正确的曲线。

执行的第一个验证是:要链接的边缘点具有相似的梯度方向。要使a与b成链,要求g(a)与g(b)之间的夹角小于90度,这一点可以通过g(a)·g(b) > 0来进行判断,其中·为点乘。

图像的轮廓将浅色和深色区域分开,边点链必须是连续地离开较暗的区域到曲线的另一侧,实现这个目的的一个简单方法是,验证从边点A开始,到被链接的边点B的向量大致正交于A中图像梯度两个可能的方向之一。使用符号A⇀B来表示从A到B的正向链接。在这样的设置中,每个边点最多可以有一个正向链接和一个反向链接,即Y形链接是不允许的。在将边点A链接到边点B之前,需要验证A是否有先前分配的前向链接,B是否有先前分配的后向链接。在任何一种情况下,所建议的链接的距离都将与前一个作比较,如果建议的链接较短,则切断之前的链接而建立新的链接,全部完成之后,对边缘点链接之间的修改就完成了。

这个过程有一个缺点:输出的结果和探索的顺序是相关联的。

如下图所示,距离大小为|AB|>|BC|>|CD|,可以分为两种情况进行讨论。

如果以A为起点进行链接,则有A⇀B首先建立,再有B⇀C,但对B而言,后向链接只能有一个,由于|AB|>|BC|,于是根据上面的描述,A⇀B将会断开,保留B⇀C,同理,对C而言时只会保留C⇀D,故最终只剩下C⇀D链接。

如果以C点为起点进行链接,同样是上述判断方式,最终得到的结果则是C⇀D和A⇀B两条链接。

目前这个缺点还没有办法找到一个更为方便简单的算法来解决这个问题,虽然对于大多数的边界点不会出现这个问题,但这种情况偶尔也会发生,仍需要一个解决方案。


七、算法

算法1将Canny/Devernay边缘检测器的一般描述分为四个步骤:计算图像梯度、计算边缘点、链接边缘点、应用带有滞后的Canny阈值。该方法以每个位置的灰度值矩阵表示的图像作为输入,需要三个参数,用于模糊输入图像的高斯滤波器的标准差S、图像梯度模量L和H上的两个阈值。该方法的结果是一个链状边缘点列表,具有亚像素精度。

算法2计算了图像的梯度,有两个步骤:使用标准偏差S的高斯滤波器进行卷积模糊图像,并通过中心差分计算图像梯度的x和y分量。

算法3是该方法的核心,包括改进的边缘点判定准则和亚像素校正项。

当给定像素处的图像梯度模量大于左侧和右侧的梯度模量时,如果图像梯度的gx分量大于或等于gy分量,则该像素被称为水平边缘点

类似地,如果图像梯度的gy分量大于或等于gx分量,则梯度模量大于上下像素处梯度的像素的像素被称为垂直边缘点

特殊的,对于两个相邻像素具有相同的图像梯度模量且都是极大值时,例如,当边缘正好在两个像素之间时,就会发生这种情况。在这种情况下,作为一种任意约定,对于垂直边,边缘标记为左侧像素;对于水平边,边缘标记为底部像素(这里的底部像素表示像素的y值较小)。这是通过不对称地使用<和≥比较来确定像素是图像梯度的水平最大值还是垂直最大值。

最后,仅在水平和垂直方向上使用Devernay的方案来计算边缘点亚像素位置,边缘点被添加到输出列表当中来。

算法4是边缘点的链接过程,输出列表中的每一个边界点都会被评估,在每种情况下,边缘点的邻域集都将被计算。边缘点最初与垂直或水平梯度模量的局部最大值像素相关联,邻域集定义为5 × 5邻域内与像素相关联的边缘点,即最大坐标差不大于2的像素点。集合符号中的数字2表示的就是这个邻域的距离。

形成集合NE(e, 2)的两个子集。第一个是NF,包含满足两个条件的边点n:g(e)·g(n) > 0,向量en·g(e)⊥>0,这些边缘点是前向链接的候选点。在第二个子集NB中,边缘点满足条件g(e)·g(n) > 0和向量en·g(e)⊥<0,这些点是后向链接的候选点。选取距离到边缘点e距离较短的子集中的元素分别作为前向链和后向链的候选元素。算法的最后八个步骤只是验证之前的链接,如果新的链接更好,则取消之前的链接,并创建新的链接。     

为了完成上述方法的描述,算法5详细描述了带有迟滞的阈值。每个边缘点会被定义一个标志,指示像素是否已经验证。这些标志最初都被设置为无效条件。然后,迭代边缘点列表,将每个图像梯度模量大于或等于高阈值H的无效点设为有效点。对于迭代边缘点列表,将每个图像梯度模量大于或等于高阈值H的无效点设为有效点。然后,从该验证点开始,沿边缘点链迭代曲线,先向前,再向后,而被链的点无效且梯度模量大于低阈值L。在该过程的每一步中,新发现的满足L条件的点也被设置为有效的。当所有曲线都迭代完成后,从列表中的每个边点开始,仍然无效的点将被解链接并从输出列表E中删除。

上述具体算法1、2、3、4、5需寻找原文查看。


八、计算复杂度

  1. 算法1中列出了该方法的四个主要步骤。1. 计算图像的梯度(算法2);2.对图像进行高斯滤波模糊;3.在每个像素处用有限差分计算梯度。(2,3这两步操作都需要与像素数量成比例的操作数量)4.对于边缘点的计算也是如此(算法3),其中对图像的每个像素评估梯度条件,并对其中一些像素中执行Devernay校正。
  2. 链接步骤(算法4)是计算每个边点的固定邻域,边缘点的集合需要严格小于像素的集合。因此,这一步的复杂性仍然受到像素数量的限制。
  3. 阈值分割的最后一步(算法5)也就是迭代边缘点的集合。沿着曲线追踪高阈值梯度的边缘点,在主循环中,一个像素最多被访问三次:1.作为边缘点列表的一部分;2.沿其后向链接的曲线;3.沿其前向链接的曲线。所以,计算量与边缘点的数量还是成正比,并受图像上像素的数量限制。
  4. 总而言之,整个方法的计算复杂度与像素数成正比。  

在目前的计算机上(2017年),将完整算法应用于512 × 512的图像只需要不到一秒的时间。


九、优点和局限性

本节通过一些实验说明了该方法的运行方式,并展示了三个参数各自的影响。在所有示例中,图像的像素值都在0到255之间,作为一种惯例,标准偏差值S = 0表示不执行高斯滤波。

高斯滤波的标准偏差S的值,代表着对噪声的鲁棒性和图像上轮廓的保真度之间的妥协。S越大,对噪声的鲁棒性越强,但保真度也会随之下降。

过滤还可能导致输出变形。当使用滤波时,可能会出现两个轮廓相互作用,导致移位检测的现象。

使用高阈值允许算法发现主要轮廓的部分,但是过高的阈值会阻止在对比度较弱的部分轮廓上进行检测,通过允许检测对比度较低的点,只要它们连接到强轮廓,结果就会得到改善。Canny迟滞效应的引入使该方法对特定阈值参数具有更强的鲁棒性

亚像素方法,该方法的输出是定义为链边点的曲线列表,需要注意的是,这与链边像素是不同的。边缘点的亚像素精度将所得到的多边形曲线转换为轮廓的矢量化,得到的曲线比图像的分辨率高得多。


十、总结

本文介绍了一种亚像素精度图像边缘检测器的实现方法。该方法基于经典的Canny和Devernay算法,分析了该算法的精度,提出了改进算法以提高亚像素精度,通过各种实例,包括自然图像和合成图像,说明了该方法的方式,实验也证明了这三个参数的有效性。

猜你喜欢

转载自blog.csdn.net/The___sky_/article/details/129118364
今日推荐