Edge Drawing: A combined real-time edge and segment detector 翻译

论文名 : 边缘绘制:结合实时边缘和分割检测器

摘要:

提出了一种新的边缘检测算法,该算法能够实时生成高质量的边缘,每个边缘是一个线性像素链。与传统的边缘检测器不同,传统的边缘检测器通过阈值梯度幅值聚类来确定边缘元素,我们的方法首先沿着行和列找出稀疏的点,称为锚点,然后通过一个智能的启发式边缘跟踪程序连接这些锚点,因此被称为边缘绘制(ED)。ED生成的边缘地图总是由干净、完美连续、本地化良好、1像素宽的边缘组成。不需要进一步的边缘连接过程,就可以满足边缘质量指标。此外,ED还能够将结果以矢量形式输出为沿链的边缘段数组。在各种图像上的实验表明,ED产生高质量的边缘地图,运行速度比已知的最快的Canny边缘检测器(OpenCV的实现)快10%。

1. 简介:

边缘检测是一个非常基础和重要的问题,是许多计算机视觉和模式识别应用中受欢迎的第一步[2-17]。高质量的边缘地图被定义为由完全连续、局部化良好、无抖动和1像素宽的边缘片段组成[18-24],显著提高了计算机视觉和模式识别应用的其他性能;然而,低质量的边缘图,连通性差,边缘宽度变化,错误的分支和凹痕等,严重影响了应用程序的其他部分的成功。
在传统的边缘检测算法中,一种通用的边缘检测方法是对图像应用一系列滤波器。第一步通常是通过低通滤波器的图像,以努力减少噪声和平滑的图像。由于边缘是图像的高频成分,因此使用高通滤波器(一种导数或梯度算子,如Prewitt [1], Sobel and Feldman [2], Scharr[3]等)提取出边缘位置。梯度算子的输出称为梯度映射,通常对梯度映射进行阈值化,以抑制图像中的低频、非边缘区域。经过梯度阈值处理后的像素构成了所谓的边缘区域,它由图像的几个像素宽的厚条带组成(图3(a))。最后的任务是检查边缘区域的剩余像素,获得薄的、连续的、不抖动的和良好局部化的边缘。 这是边缘检测中最重要也是最困难的一步,通过骨架化、非极大抑制、边缘细化或形态学操作的应用来实现。 但这些技术评估边缘区域的每个像素是一个潜在的边缘元素(边缘凝胶)在孤立和单独的方式。 例如,Canny边缘检测器通过比较每个像素与其相邻的两个像素的梯度值来测试每个像素是否为边缘凝胶,如果它(在预先设置的梯度阈值中)在相同的梯度方向上高于相邻像素的梯度值,那么该像素就被标记为边缘凝胶。 这种短视的局部推理导致了低质量的边缘地图,由多个像素宽、不连续的边缘段组成的独立的、垃圾般的边缘形成。
为了提高传统边缘检测器产生的边缘图的质量,许多后处理技术被提出[25-35]。这些技术以二进制边缘图作为输入,并试图通过使用基于规则的方法和像素级模板来改善边缘图的质量,以清理边缘图并链接可能的不连续。他们还试图通过形态学操作来优化边缘片段的模态结构。
为了更好地理解文献中关于边缘连接和优化的研究为什么会构成拥挤集,参考图1,这是由OpenCV Canny[4,36]算法产生的著名Lena图像的边缘地图,其中一些质量较低的边缘补丁被突出显示。从图中我们可以看到,边缘地图有很多低质量的成分,由不规则的、不连续的、无人注意的、多像素宽的边缘组成,而图像中一些突出的细节,例如patch 'a’中的左侧竖线,是没有被检测到的。为了检测更多的细节,可以降低阈值,但最终的边缘映射将包含更多类似垃圾的边缘实例,而不是有意义的细节。 尽管边缘链接方法可以利用各种规则和模板提高边缘地图的视觉质量,但在生成高质量的边缘地图方面仍存在不足。 此外,边缘连接方法虽然可以提高边缘片段的结构质量,但不能生成更“正确”的边缘图。
在真实的图像中,剧烈的变化以连续的方式参与,图像中物体的边界是连续的,除非它们被其他物体挡住。然而,传统的边缘检测器很少利用这一事实,而是采用严格的局部推理来确定边缘,这导致了如图1所示的无人值守、不连续的多像素宽边缘分割形成。然而,我们人类采用了一种非常不同的基本策略来确定图像的边缘。具体来说,如果一个人被要求确定给定图像中所有物体的边界,就像[23]中的实验一样,他不会单独计算每个像素,而是会在一个物体的边缘上选取一个点,通过在边界上连接连续的像素来画出该物体的整个边界。 然后这个人会从另一个物体的边界上选取另一个点,并画出它的整个边界。这个过程将继续,直到这个人认为他/她已经完成了图像中所有的边缘。从而保证了边缘的连通性、局域性和平滑性。从概念上讲,人类的高级认知边界检测方法类似于儿童的点对点边界完成谜题,即给儿童一个物体的点对点边界,并要求他通过连接连续的点来完成所有的边界。以图2(a)为例,图2(a)显示了著名的Lena图像的边缘映射计算问题,说明为一个点对点的边界完成谜题。当连续的点连通时,我们得到了一个高质量的Lena图像边缘图。
Edge Drawing: A combined real-time edge and segment detector 翻译_第1张图片
在本文中,我们提出了一种边缘分割检测算法,该算法将点对点边界完成谜题中使用的高级认知推理应用于边缘分割检测。该算法模拟了点对点边界完成难题中的思想,通过计算一组点(称为锚点),这些点代表给定图像的急剧强度变化上的稳定地标(章节2.3),然后使用智能路由算法连接连续的锚点(章节2.4)。该算法在连续的锚点之间绘制一条边段,因此被命名为edge Drawing (ED) [37],类似于在点对点边界完成谜题中,一个人通过在它们之间绘制边缘段来连接连续的点(参见图2)。这是本研究贡献的最重要的部分,不应该与边缘连接范式混淆,在这种范式中,已经计算的边缘映射被作为输入,并根据边缘质量度量进行改进。由于ED从一开始就通过计算少量的点来检测边缘,因此可以获得高质量的边缘,而不需要后期处理方法。此外,ED还可以将检测到的边缘段以向量的形式输出
论文的其余部分的组织如下:第2节描述了如何一步一步地处理图像,以产生最终的边缘地图。第三节讨论了边缘检测的重要性以及为什么ED可以产生高质量的边缘。第四节从不同的角度分析了ED的性能。第五节对本文进行总结。

2. 边缘绘制算法(ED)

ED处理灰度图像,主要包括四个步骤:

(1)高斯滤波抑制噪声。
(2)计算梯度幅值和边缘方向图。
(3)提取锚点。
(4)采用智能路由方式连接锚点。

2.1. 高斯滤波

ED的第一步与大多数图像处理方法相似:我们用高斯核对图像进行卷积,以抑制噪声和平滑图像。 对于本文给出的所有结果,都使用r = 1的5 × 5高斯核。

2.2. 计算梯度大小和边缘方向图

ED的下一步是计算梯度大小和边缘方向图。利用平滑后的图像,我们分别计算水平梯度和垂直梯度Gx和Gy。任何著名的梯度算子,如Prewitt [1], Sobel和Feldman [2], Scharr[3]等,都可以在这一步中使用。一个像素处的梯度幅值G由公式 G = G x 2 + G y 2 G=\sqrt{G_x^2+G_y^2} G=Gx2+Gy2 得到。或者简单地将Gx和Gy相加计算梯度幅值,即G=|Gx +Gy|,计算速度更快,阈值可缩放。
在梯度大小图的同时,通过比较每个像素的水平梯度和垂直梯度来计算边缘方向图。如果水平梯度较大,即 ∣ G x ∣ > ∣ G y ∣ |Gx| > |Gy| Gx>Gy,则假设有一条垂直边缘通过像素。否则,假设水平边缘通过像素。我们的实验表明,利用图4( b )和 ( c ) 所示的路由机制,使用两个梯度方向足以有效地路由锚点连接过程。增加梯度角度的数量只会增加计算时间,而不会改善锚点连接过程。
为了帮助我们抑制具有平滑强度变化的图像位置,我们对梯度图进行阈值,并消除所谓的“弱”像素。图3(a)为Lena图像,以及对应的阈值梯度图。这个阈值梯度簇代表边缘区域,因为图像的所有边缘都必须位于这个簇的边界内。换句话说,最终的边缘图将是这个簇的一个子集,消除的黑色像素将不包含边凝胶。
ED的前两步(高斯滤波和梯度图计算)与大多数边缘检测算法相似。然而,在边缘区域的计算之后,ED遵循了一种非常非传统的方法:不是在边缘区域内测试单个像素是否为边缘,而是首先发现像素子集(称为锚点),然后通过一个智能启发式路由过程连接这些锚点。

2.3 锚点的提取

直观地说,锚点应该对应于边缘将要覆盖的点。 满足这个条件的点可以用不同的方法来计算。 例如,角是锚的很好的选择,因为它们位于图像上,在水平和垂直方向上强度急剧变化。这种情况大大增加了一条边位于该位置的概率。一个旨在检测刚性几何对象的应用程序可能是一个很好的例子,选择角锚。或者,锚提取程序可以根据应用程序专门设计,即,兴趣点检测器或/与关键点描述符可以被替换,以检测图像上的特定边缘,为性能的目的。因此,不必要的细节的边缘可以被过滤掉,不管它们有多尖锐。在本文中,我们更倾向于使用局部梯度极值作为定位点,原因如下:在前面的步骤中,我们已经获得了计算局部梯度极值所需的信息,从而简化了我们算法的主要思想的解释,具有计算上的好处。注意,锚只是一个位置,边缘绘制过程开始,这并不意味着每个锚将包括在最终的边缘地图。我们将在2.4节更详细地讨论这种情况。
Edge Drawing: A combined real-time edge and segment detector 翻译_第2张图片
如果您在3D中可视化梯度地图,锚点将位于梯度地图山脉的顶点。要把连续的锚连接起来,我们只需沿着山脉的科迪勒拉峰前进。图2(b)和©是Lena’s hat的部分梯度图,以及对应的3D视图。显然,梯度算子在边缘交叉处产生最大值。也就是说,边缘位于梯度山的顶部。锚(用红圈标出)是这座山的山峰。ED会首先识别这些峰值,然后用智能路由程序将它们连接起来。在图2©中,两个箭头表示锚的前进方向。
算法1显示了我们测试像素(x,y)是否是锚点的直观算法。由于锚必须是梯度图的局部峰值,我们简单地比较像素的梯度值与其邻居。对于水平边缘,比较上下相邻;对于垂直边缘,将比较左邻和右邻。如果像素的梯度值比它的两个邻居都大一定的阈值,那么像素被标记为锚。通过改变锚点阈值,可以调整锚点的数量。锚点阈值越低,锚点密度越大。锚点阈值越高,锚点就会越尖锐、越稀疏。此外,锚点测试可以在不同的扫描间隔进行,即每行/列、每二行/列等。增加锚点的数量会增加边缘地图的细节,反之亦然。根据应用程序的不同,还可以使用不同的扫描间隔进行水平和垂直锚点计算,从而可以排除不希望看到的特征。
锚点扫描间隔是独立可调的,但有一个重要的问题需要考虑。尽管边缘绘制算法具有固有的鲁棒性,但整体的边缘精度在一定程度上取决于锚点的选择和稀疏性。虽然锚点搜索的扫描间隔是一个自由参数,但必须保持在平滑核的半径以下(本文实验中恰好为“5”),以保证不丢弃显著的边缘特征。这样,子采样(由于扫描间隔选择)操作保证保持在奈奎斯特率以下,并避免得到不明确的结果。此外,还可以采用多尺度方法通过尺度空间方法改进边缘细节参数化。然而,目前的工作是引入新的边缘绘制范式,因此多尺度概念被保留在本工作的范围之外,以个别案例进行研究。图3(a)显示了锚点阈值为8,扫描间隔为4的Lena图像的一组锚点;也就是说,每扫描第4行或第4列来查找锚点。

2.4. 通过智能路由连接锚点

ED的最后一步也是最关键的一步是通过在锚之间画边来连接它们。由于这一步是利用算法前三步收集的信息来构造边缘图,因此这一步值得特别注意。为了连接连续的锚点,我们只需从一个锚点到下一个锚点,通过在梯度地图山的科迪勒拉峰上前进。该过程以算法第2步计算的梯度幅值和边缘方向图为指导。智能路由过程独立于锚点提取方法,工作原理如下:从一个锚点开始,我们观察通过锚点的边缘的方向。如果一条水平边穿过锚点,我们开始连接过程,从左到右依次进行(参见图4(b))。如果一条垂直的边穿过锚点,则开始连接过程,从上到下依次进行(参见图4©)。在移动过程中,只考虑三个相邻的节点,选取梯度值最大的节点。过程在两种情况下停止:
(1)移出边缘区域,即当前像素的阈值保持梯度值为0。
(2)我们遇到了一个之前检测到的边缘凝胶。
Edge Drawing: A combined real-time edge and segment detector 翻译_第3张图片
算法2描述了从锚点(x,y)开始的智能路由。我们假设有一条水平的边穿过这个锚点,然后我们让算法从锚点左边开始。正确进行,向上或向下会非常相似,没有详细阐述。从锚点(x,y)开始,只要满足上面列出的两个条件,我们就继续向左。在每次循环迭代时,我们只需要查看左边的三个近邻,即(x-1,y-1), (x-1,y)和(x-1,y+1),并选择梯度值最大的那一个。如果我们继续向右,我们会考虑右边的三个近邻,即(x+1,y-1) (x+1,y)和(x+1,y+1)。
图4.a在阈值梯度簇的放大区域上给出了智能路由过程的详细说明。 像素内的数字是梯度幅度; 黑色像素表示阈值像素。 锚点用红圈标记,连接过程中收集的像素用黄圈标记。
Edge Drawing: A combined real-time edge and segment detector 翻译_第4张图片
假设(8,4)处的像素是起始锚点。因为一条水平边穿过这个锚点,所以开始了水平行走(首先向左,然后向右)。小箭头表示路由过程中考虑的像素,蓝色箭头表示选定的像素。如图4(b)和©所示,每次迭代时相对于边缘方向检查三个近邻,选择梯度值最大的像素。在(3,5)处,边缘方向由水平方向变为垂直方向。此时,我们停止当前的水平向左行走,并开始两个垂直行走,一个向上,一个向下。垂直向上行走立即终止,因为它将选择已经选择的边缘段像素(4,4)。垂直向下的步行一直延续到(5,10)。注意,在同一条边段中可能会有许多次不同的遍历。也就是说,在提取单个边缘段的过程中,我们可以进行多次水平和垂直移动,如图4所示,我们进行了一次水平向左移动和一次垂直向下移动。还要注意,得到的边缘段总是连续的,且宽度为1像素。图3©显示了通过加入图3(b)所示的锚点得到的Lena最终边缘图。注意,图3(b)中的所有锚都不需要包含在最终的边缘图中。可以丢弃一些边缘片段,如果它们包含少于特定数量的锚或边缘。这种简单的控制可以通过毫不费力地排除短而小的结构来改善最终的边缘地图。

3.利用ED进行边缘段检测

除了获得高质量的图像边缘外,对边缘分割格式的边缘检测也有很大的需求。在边缘图中,边缘段可以定义为一组连通的边缘,在线段和圆弧提取应用中非常有用[46-60]。也可以用连续边缘之间的相对位置向量对边缘段进行链编码,即Freeman链码[45],通过分析链码的分布和矩,可以得到关于边缘段几何结构和方向的重要信息[49-57]。得到的特征向量可以用于检测[56,58]、识别[61]和配准[54,62]应用。进一步,利用Helmholtz原理对得到的边缘段进行验证,消除无效检测,从而得到基于本文算法的无参数边缘段检测器[63]。
如果用传统的工具获取图像的边缘段,首先通过传统的边缘检测器获得二值边缘图,然后进行连通分量分析,将每一个完全连通的像素集合输出为一个边缘段。在[38]中,我们比较了ED和Canny在8像素邻域连接分量分析(8N CCA)后的边缘检测性能。我们对大量的图像进行了实验,并给出了这两种算法的计算时间。从实验中我们清楚地表明,CCA得到的Canny边缘段具有不相交和锯齿状结构。由于Canny的边缘图有很多不连续点,许多本该连接在一起的片段无法连接起来。还请注意,Canny的边缘片段被检测为“连接像素的斑点”,而不是“像素链”。这意味着许多“blob”片段实际上应该被分解成由线性像素链组成的片段。此外,由于Canny边缘图的噪声性质,存在许多小尺寸的类噪声边缘段。所有这些缺陷都降低了利用提取的边缘段进行形状检测和识别应用的有效性。
Edge Drawing: A combined real-time edge and segment detector 翻译_第5张图片
ED提取的边缘段是一个像素宽的连续像素链,它能够区分相邻的边缘段,并将其作为单独的线性像素链输出,而不需要进一步的后处理。这种情况更加突出,特别是在测试图像的复杂细节周围,Canny随后CCA检测整个局部区域作为一个边缘斑点,但ED能够检测这个区域作为许多不同的线性像素链(参考[38])。
Edge Drawing: A combined real-time edge and segment detector 翻译_第6张图片
为了更好地理解为什么ED能够区分伴随边段并将其作为单独的线性像素链输出,可以考虑图5(a)所示的合成图像,其中包含一条很长的垂直线和一条很短的水平线,它们在中间与长线相交。在图像的顶部添加了10%的均匀噪声,使边缘检测更加困难。图5( b )为图像的梯度图(由Sobel算子得到),图5( c )为该梯度图的3D模型。梯度图上科迪勒拉峰顶部的红点为锚点,箭头表示锚点连接过程。从长垂直线上最顶端的锚开始,ED向下(绿色箭头),一直到垂直线上的尽头。这条线性的像素链然后作为第一个边缘段输出。然后,ED从最右边的短水平线上的锚点开始向左移动(蓝色箭头),直到它碰到中间的长垂直线。然后,这条线性像素链被输出为第二边缘段。图5(e)给出了ED输出的两个边缘段。如果我们在进行Canny边缘检测后再进行CCA的相同实验,我们会得到一个包含这两条线像素的单一“blob”边缘段,如图5(d)所示。
为了测量锚定阈值对最终边缘地图的影响,我们进行了另一个实验,结果如图6所示。为了得到图6所示的结果,我们将算法的所有参数设置为一定的默认值,只改变锚点阈值。具体来说,我们从左到右增加锚定阈值,以表明其对产生的边缘段的影响。从图中可以看出,随着锚定阈值的增加,次要细节消失,只剩下主要的边缘段。这是因为在高锚定阈值时,锚点只位于强度变化较快的脊上,即强边缘。因此,该算法过滤掉了琐碎细节的边缘片段,检测出更明显的边缘。
在本文中,作为[38]的补充研究,我们提出了边缘段检测实验的一个重要扩展,清楚地显示和比较Canny+8N CCA和ED在棘手的情况下的性能(章节4.3)。在这些实验中,我们展示了如何有效地调整参数的ED,以处理在噪声和平滑的情况下的图像。

4. 实验

人们普遍认为不同的边缘检测器更适合不同的应用;然而,Canny的边缘检测算法已经被证明在很多情况下都能产生最好的结果[23,24],是许多实时计算机视觉和模式识别应用中最受欢迎的边缘检测算法。因此,在本文中,我们将比较ED和Canny。在Canny边缘检测器的各种实现中,我们选择OpenCV实现[36],有两个原因:
首先,标准实现使读者不再怀疑可能的实现差异,因为任何人都可以免费下载OpenCV。
其次,更重要的是,Canny的OpenCV实现在速度和实时适用性方面是唯一能与ED相媲美的边缘检测器。
我们分三个步骤分析ED的表现。首先,我们比较了ED和Canny的边缘映射的质量,并比较了它们的运行时间性能。然后我们看看不同梯度算子对ED最终边缘图的影响。接下来,阐述了ED在一些棘手案例中的表现。

4.1. ED的边缘地图质量和运行时性能

在本节中,我们比较了ED和OpenCV Canny (cvCanny)的性能。我们首先给出了一些测试图像上的边缘映射结果,然后比较了ED和OpenCV Canny在这些图像上的运行性能。
7 2 7^2 72展示了OpenCV Canny (cvCanny)和ED对4幅具有挑战性的图像产生的边缘地图。为了得到这些结果,我们使用Canny的低阈值为30,高阈值为60。
Edge Drawing: A combined real-time edge and segment detector 翻译_第7张图片
对于ED,我们使用梯度阈值为36和锚定阈值为8的Sobel算子。 在这两种情况下,输入图像都使用r = 1的5x5高斯核进行平滑处理。
观察得到的边缘图,我们看到Canny的边缘图包含很多不相交的、无人注意的噪声边缘。另一方面,ED的边缘图是非常干净的,由连贯的,连续的,良好的局部化和一个像素宽的边缘组成。读者可在ED网站[39]在线进行额外测试。
ED的渐近复杂度为O(k?n),其中n为图像中像素的总数,k为滤波核的孔径。由于该算法使用了预定义的核来进行恒定孔径下的平滑和推导;ED的最终运行复杂度显示O(n)是一个线性算法。表1给出了ED和OpenCV Canny对图7所示四幅图像的处理时间的解剖。处理时间是在带有Intel 2.2 Ghz E4500 CPU和2gb RAM的PC上获得的。显然,ED是实时运行的,在大多数测试图像上的速度比OpenCV的Canny快10%。如果考虑到OpenCV算法是由性能优化专家改进的,那么我们朴素的ED实现的时间结果是相当可观的。此外,ED不仅生成更好的二值边缘图,而且它的输出是一组边缘段,每个边缘段由向量形式的像素链组成。从OpenCV Canny的二进制边缘映射生成边缘片段作为像素链,需要额外的链接(以改善边缘的模态结构)和连接的组件分析步骤(检测片段);这不仅需要额外的处理时间,而且由于原始边缘图的噪声和不相交结构,会产生劣质的边缘段。然而,ED在默认情况下以像素链的形式生成这些片段,不需要额外的处理。
值得注意的是,许多最近的研究都使用了流行的nVidia CUDA架构[40]来加速包括边缘检测在内的许多图像处理算法[41-43]。为了充分利用CUDA架构的优势,我们最近在CUDA[44]上实现了ED,并观察到在高端CUDA卡上640 x 480图像的ED所需时间小于0.5 ms。这清楚地表明,基于cuda的ED实现可以运行到2000赫兹。

4.2. 梯度算子对ED边缘段的影响

回顾第2节,ED计算一个梯度图,然后在锚计算和链接期间使用这个梯度图。我们指出,ED独立于所使用的梯度算子,并且可以与任何已知的梯度算子计算的梯度图一起工作。在本节中,我们的目标是研究梯度算子对ED最终边缘图的影响。下面我们使用三个著名的梯度算子Prewitt, Sobel和Scharr运行ED,并比较得到的边缘图。
图8显示了ED对四幅不同图像使用Prewitt, Sobel和Scharr梯度算子得到的边缘图。以下(梯度阈值,锚阈值)对被用于每个算子:Prewitt (24,5), Sobel(36,8)和Scharr(144,32)。对图8(以及我们测试的许多其他图)中的边缘图的分析表明,不同梯度算子产生的边缘图之间的差异非常小。由于该算法使用对梯度算子响应最大的像素来构建边缘映射,因此对于ED最终的边缘映射,算子的选择不会产生太大的影响。读者可以在ED的网站[39]上使用不同的梯度运算符进行额外的测试。

4.3. ED处理棘手案件

在本节中,我们将讨论如何设置ED的参数,以在一些棘手的情况下获得最佳性能。含有大量噪声或非常光滑的边界区域的图像可以被定义为边缘检测器的棘手情况。在这种情况下,典型的边缘检测器要么根本检测不到任何边缘,要么检测到质量很低的边缘,这对应用程序的其余部分的进一步处理没有多大用处。图9为Lena图像的patch。由于这个patch的强度变化非常平滑,所以左侧垂直线的检测非常困难。图9(b)和(d)分别为阈值为60和30时的阈值梯度幅值图像,图9©和(e)为OpenCV Canny生成的边缘图。采用60的梯度阈值(对应Canny低阈值),得到的边缘图质量较好,且存在少量不连续点。但是由于左侧垂线上的过渡非常平滑,它对梯度算子的响应不是很高,并被一个略高的阈值所消除。因此,在图9©中完全没有检测到这一部分。将梯度阈值降低到30,使梯度阈值过程中该区域未被消除(见图9(d)),检测到左侧垂线(见图9(e))。但是可以看到,降低梯度阈值也降低了图像其他部分的边缘图质量,使得最终的边缘图噪声很大。
在这种困难的情况下,当ED的参数设置适当时,它可以产生良好的结果。与Canny类似,检测到的边缘是阈值梯度聚类的一个子集,即边缘区域。但与Canny不同的是,Canny以独立和孤立的方式评估像素,ED使用高级认知推理,并通过连接锚来工作。因此,在边缘区域中给定一个稳定的锚点,ED可以利用方向图在边缘区域内进行,并将整个边界检测为一个1像素宽的边缘段。这意味着,只要在边缘区域内选择稳定的锚点,降低梯度幅度阈值就不会像在Canny中那样产生噪声边缘地图。但是锚点的选择必须谨慎,因为一个糟糕的锚点可能会产生一个完全没有意义的边缘段。
图9(h)为ED在同一垂直Lena patch上的结果。梯度阈值降低到足以包括两个垂直条带作为潜在边缘区域(见图9(f))。当锚点阈值为10时,边缘区域内有几个稳定的锚点(见图9(g))。回顾2.3节,锚定阈值决定了如何尖锐的局部最大的梯度地图将被挑选作为锚。锚点阈值越高,为了被选中作为锚点,最大值必须更尖锐或更陡峭。因为我们希望在这些平滑且有噪声的区域有更稳定的锚点,所以我们选择了相对较高的锚点阈值10。这就是为什么只检测到几个锚点。图9(i)以叠加的方式显示了阈值聚类、锚点和边缘段。显然,在左侧竖线上的一个锚(在竖线底部的那个)就足以画出整个左侧竖线。同样的,两个稳定的锚(中间的那个)就足够画出整个右边的竖线了。注意,最右上的锚没有包含在最终的边缘图中,因为它的长度很短,在2.4节中有解释。
为了测试带有噪声图像的ED片段的性能,我们创建了如图10(b)所示的合成图像,并添加了不同程度的高斯噪声。图10©为OpenCV Canny生成的边缘段。图10(d)为ED的锚点(红色点),图10(e)为ED的边缘图。为了得到这些结果,我们尝试了不同的阈值,并给出了两种算法的最佳边缘图。从图10的第一行可以看出,尽管添加了噪声,但两种算法都将合成圆的外围检测为一团连通的边缘。当我们在第二行增加噪声量时,Canny开始将圆圈的外围检测为5个独立的连通边块,即边缘段(注意每个边缘段用不同的颜色表示)。然而,ED仍然能够检测到作为一个边缘段的圆的外围。最后,在噪声比较大的最后一行,Canny检测出圆圈的外围为15个独立的边缘段,因为噪声使边缘更加断开。当我们降低Canny的阈值以使边缘更加连接时,产生的边缘图包含更多的切口和无意义的分叉。然而,ED继续产生良好的结果,并在两个独立的边缘段检测圆的外围。读者应该仔细检查图10(d)中的图像,以了解ED的成功来自哪里。正如所见,我们可以降低梯度阈值来获得一个相邻的圆形边缘,而不影响边缘的质量,因为一些精心选择的锚点(在给定的例子中为4个红点)能够画出整个圆的边界。
Edge Drawing: A combined real-time edge and segment detector 翻译_第8张图片

5. 结论和未来工作

我们提出了一种新颖的、非正统的、实时的边缘分割检测器,它基于一种高级认知推理范式,其工作原理类似于点对点边界完成谜题。该算法计算一组锚点,这些锚点有望成为给定图像边缘上的稳定地标,并通过启发式智能路由算法在这些锚点之间绘制边缘,因此被称为边缘绘制(ED)。由于ED是通过链接邻接边来工作的,因此生成的边缘图保证由干净、连续、局部化良好的1像素宽的边缘段组成,每个边缘段都是线性像素链。通过算法所基于的高级推理,ED模仿了人类的高级认知推理,不让任何一个或一组无人注意的边缘出现在最终的边缘地图上。在许多不同的图像上进行的实验(读者可以在线执行更多的[39])表明,ED的边缘地图质量非常高。该算法具有很强的通用性,可以使用不同的梯度算子和阈值来调整最终边缘图的细节水平。即使在粗糙的噪声图像或那些包含光滑的边界过渡,ED被证明产生良好的结果与适当的参数。凭借其高质量的边缘细分市场和惊人的速度,我们相信ED将非常适合于下一代的实时计算机视觉和模式识别应用。
根据这项研究,有可能列出以下主题作为未来的工作候选人;研究了不同锚点提取方法的ED算法的性能并分析了它们的稳定性,在锚点选择步骤上采用了多尺度方法,利用ED边缘段进行目标检测和识别,并在具有地面真值边缘结果的测试图像上采用鲁棒视觉评估方法测试了ED算法的有效性。

参考文献

[1]. …

你可能感兴趣的:(图像处理,计算机视觉,opencv,python,ED-Lib,EdgeDrawing)