http://ceng.anadolu.edu.tr/cv/edgedrawing/
References
- C. Topal, C. Akinlar, Edge Drawing: A Combined Real-Time Edge and Segment Detector,” Journal of Visual Communication and Image Representation, 23(6), 862-872, 2012.
- C. Topal, C. Akinlar, and Y. Genc, Edge Drawing: A Heuristic Approach to Robust Real-Time Edge Detection, Proceedings of the ICPR, pp. 2424-2427, August 2010.
1. Introduction
A good edge detector must produce high quality edge maps, and it must run very fast. The speed of the detector is especially important for real-time computer vision and image processing applications. Among the existing edge detectors, Canny is generally considered to produce the best results, and is assumed to be the de-facto edge detector by the computer vision and image processing community. OpenCV implementation of Canny (cvCanny function) is the fastest known implementation of this famous edge detector, and is used by many real-time computer vision and image processing applications.
(a)噪声引起的切口实例和不连续性;(b)无人值守的边缘形态;(c)Lena’s帽子边界上的两个像素宽的边缘段;(d)未平滑的边缘段不连续的。
图1显示了著名的Lena图像的边缘图,该图像由opencv Canny获得,其中一些低质量的边缘片段已被放大显示。显然,边缘图本身是低质量的,由边缘线段组成,其中包括参差不齐的、不连续、无人值守的、多像素宽度的边缘。这是因为传统的边缘检测器,包括Canny算法,以孤立的和单独的方式评估像素,通常忽略像素间的关系,从而导致这种不连续性,单个和无人值守的边缘线段的构成。
对现有边缘检测实时性能的应用评价已经清楚地显示为一种新的边缘检测,需满足以下要求:(1)跑得很快,即实时性,(2)生产高质量的边缘图由相干的,连续的,本地化,1个像素宽的边缘。下面,我们提出边缘绘制(ED)[ 1 ]作为一种新的非正统的边缘或边界检测算法,满足这两个要求。ED不仅与传统的二值边缘图相区别,而且以矢量形式输出边缘图作为一组边缘段,每个边缘段由一个连续的像素链组成。
2. Edge Drawing algorithm (ED)
ED works on grayscale images and is comprised of four main steps:
(1) Suppression of noise by Gaussian filtering.
(2) Computation of the gradient magnitude and edge direction maps.
(3) Extraction of the anchors.
(4) Connecting the anchors by smart routing.
2.1. Gaussian filtering
the very first step of ED is similar to most image processing methods: we convolve the image with a Gaussian kernel to suppress noise and smooth out the image.
For all results given in this paper, a 5 × 5 Gaussian kernel with = 1 is used.
2.2. Computation of the gradient magnitude and edge direction maps
Figure 2 depicts the computation of the gradient magnitude and edge direction maps. Using the smoothed image, we compute the horizontal and vertical gradients, Gx and Gy, respectively.
Any of the well-known gradient operators, e.g., Prewitt, Sobel, Scharr, etc., can be used at this step. The gradient magnitude G at a pixel is then obtained by simply adding Gx and Gy, i.e., G = |Gx| + |Gy|.
Simultaneously with the gradient magnitude map, the edge direction map is also computed by simply comparing the horizontal and vertical gradients at each pixel.
If the horizontal gradient is bigger, i.e., |Gx| >= |Gy|, a vertical edge is assumed to pass through the pixel. Otherwise, a horizontal edge is assumed to pass through the pixel.
So, the gradient angle at a pixel is assumed to be either 0 or 90 degrees. Our experiments have shown that using two gradient angles were enough to smartly route the anchor linking process.
Increasing the number of gradient angles simply increases the computational time without aiding the linking process.
我们的实验表明,使用两个梯度角足以巧妙地锚定连接过程。增加梯度角的数目只是增加了计算时间而不帮助连接过程。
Figure 3: (a) Input image Lena, (b)Thresholded image with respect to gradient magnitudes. The Sobel operator and a threshold of 36 were used to obtain this image.
为了帮助我们忽略非边缘像素并加快计算速度,我们对梯度图进行阈值化,消除所谓的“弱”像素。
这非常类似于Canny通过低阈值消除弱像素[ 3 ]:回想一下,在计算梯度图之后,Canny消除了梯度值小于用户定义的低阈值的像素,这些像素不包含边缘元素(边缘像素)。
我们使用相同的想法,并消除那些像素的梯度幅度小于一个特定的用户定义的阈值。图3(a)显示了Lena图像,图3(b)显示相应的阈值梯度图。
为了获得这个梯度图,我们使用Sobel算子和36的梯度阈值。黑色像素是Sobel算子产生小于36的梯度值的所有像素,所有其他像素都被标记为白色。
我们称之为“边缘区域”图像。所有图像的边缘像素必须位于边缘区域的边界,消除的黑色像素不包含边缘像素。
2.3. Extraction of the anchors
高斯滤波和梯度图计算,ED前两个步骤与大多数边缘检测算法相似。边缘区域的图像而计算后,ED遵循一个非常非正统的方法:不是测试边缘区域内的单个像素是否成为边缘素,
ED first spots a subset of pixels(称为锚),然后将这些锚连接起来由一个启发式智能路算法( a heuristic smart routing algorithm)
。直观地说,锚对应梯度图的峰(maximas)。如果你在3D中看到梯度图,锚就会成为山脉的顶点。
(a)Lena’s边缘图计算问题,它是一个点到点边界完成的拼图。当连续点连接时,我们得到一个高质量的边缘映射,由干净的、一个像素宽的、连续的边缘部分组成;
(b)Lena’s帽子的梯度地图碎片;
(c)碎片(b)在三维图。两个样品锚用红色圆圈标记,箭头表示锚点连接方向。
检测锚点的算法:
算法1显示了检查一个像素(x,y)作为锚的算法。由于锚必须是梯度图的一个顶点,所以我们只需将像素的梯度值与它相邻的进行比较。
对于水平边缘,比较上下邻居;对于垂直边缘,比较左和右邻居。如果像素的梯度值大于其相邻值通过一定的阈值(ANCHOR_THRESH),此像素标记为锚。
通过改变锚阈值,可以调整锚的数量。此外,锚定测试可以在不同的扫描间隔,即每行/列,每两行/列等。增加锚的数量将增加边缘地图的细节,反之亦然。
我们还注意到,锚提取是一个类属过程,其他的锚提取方法可以用来代替表1中给出的方法。
图5(a)显示了锚阈值为8的Lena图像的一组锚,以及扫描间隔为4;也就是说,每第四行或列已被扫描以测试锚。扫描每一行和列将产生更多的锚。增加扫描间隔将减少锚的数量。
一般的经验法则如下:如果请求图像的所有细节,应该使用1的扫描间隔。如果只请求长的边缘(即对象边界的骨架),则可以使用较大的扫描间隔。因此,通过改变这个参数,可以很容易地调整最终边缘图中的细节量。
2.4. Connecting the anchors by smart routing
ED的最后一步也是最关键的一步是通过连接它们之间的锚来绘制边缘。由于在这一步中,通过使用算法前三个步骤中收集的信息构造了边缘图,因此这一步骤值得特别注意。
连接连续的锚,我们只是从一个高峰(锚)定到下一个走过梯度图的山脉。这个过程由算法的步骤2中计算的梯度幅度和边缘方向图来指导。
The smart routing process works as follows: 从锚点开始,我们查看通过锚的边缘的方向。如果水平边缘通过锚点,我们开始连接过程,通过向左和右边移动(参见图6(a))。
如果垂直边缘通过锚点,我们将开始上下移动链接过程(参见图6(b))。在移动过程中,只有3个紧邻的邻居被考虑,最大梯度值的一个被选中。
移动在2个条件下停止:
(1)我们离开的边缘地区,即当前像素的阈值梯度值是0。
(2)我们遇到一个先前检测到的边缘像素。
算法2中的算法描述了从锚点(x,y)开始的智能路由(the smart routing procedure)。我们假设一个水平的边缘通过这个锚,我们给出的算法走左边的锚。向右、向上或向下都是非常相似的,没有详细阐述。
从锚(x,y)开始,只要不满足上面列出的2个停止条件,我们继续向左走。在每次循环迭代中,我们只看3个的左边,即(x-1, y-1), (x-1, y) and (x-1, y+1),选择一个具有最大梯度值。
如果我们向右走,我们会考虑右面3个相邻的,即(x + 1,y-1),(x+1,y)和(x + 1,y + 1)。
(a) (b)
Figure 7: (a) An illustration of the smart routing procedure, (b) Detected edge segments for Lena.
在图7(a)中对阈值梯度地图区域放大详细阐述了智能路由的过程。数值代表在像素数的梯度值;黑色像素表示阈值像素。锚点用红色圆圈标记,链接过程中收集的像素用黄色圆圈标记。
假设像素(8,4)是起始锚点。由于水平边缘是通过这个锚,水平步行(首先向左,然后向右)开始。小箭头显示在路由过程中正在考虑的像素,而蓝色箭头表示选定的像素。
如图所示,在每个迭代中对边缘方向检查3个紧邻邻居,并且始终选择具有最大梯度值的像素。
图5(b)显示了Lena图像的ED边缘图。显然,这是一个非常高质量的边缘地图的所有细节检测,由相干的,相邻的,1像素宽的边缘构成。ED不仅生成这个二进制边缘图,它还生成一组由像素链的向量形式组成的边缘段。
因此,每个这样的链都是一个轮廓,可用于进一步处理以执行对象检测、跟踪、注册等。图7(b)显示了Lena检测的边缘段,这个边缘图有432个部分,每个颜色代表不同的边缘段。
3.Experiments
在这一部分中,我们比较了ED和opencv实现的著名的Canny边缘检测器的性能。我们使用Canny进行比较,因为它被认为在多种图像产生最好的结果。
OpenCV实现的Canny(cvCanny函数)作为许多实时计算机视觉和图像处理应用的实际边缘检测器。
我们首先介绍一些最具挑战性的图像的边缘图结果。然后比较这些图像的ED和opencv的运行时间。
(a) (b) (c)
Figure 8: (a) Original image (512x512), (b) OpenCV Canny edge map for low threshold = 60 and high threshold = 100, (c) ED edge map with Sobel operator, gradient threshold = 36 and anchor threshold = 8.
看得到的边缘结果图,我们看到,Canny边缘图中含有大量的不相交的,无人管理的噪音边缘像素(edgels),ED的边缘图很干净,由相干的,连续的,本地化的和1像素宽的边缘像素构成。
此外,ED的结果作为一组边缘段返回,每个边缘段由一个连续的像素链组成,如图7(b)所示。
Figure 9: (Top-to-bottom, Left-to-right) ED’s edge map for scan intervals(扫描间隔) of 8, 16, 32 and 64 respectively. Sobel operator and a gradient threshold of 36 were used to obtain all edge maps.
图9显示了锚点对最终边缘图的影响。正如我们前面提到的,链接步骤中的更多锚会导致更详细的边缘图,反之亦然。在图9中,锚计算的扫描间隔从8更改为64。具体来说,为了获得左上角映射,我们在锚计算步骤中扫描每第八行或列。继续向右和向下,我们分别扫描每第十六,第三十二和第六十四行或列。当锚的数量减少时,最终边界图中的细节也减少了。注意,图像中对象的一般骨架总是被提取出来,只有微小的细节才会丢失。这是因为长边界上的单个锚足以提取整个边界。因此,即使我们在对象的长边界上有很少的锚,ED也能够在锚连接过程中提取这些长的边界。
Table 1: Dissection of the running times of ED and OpenCV Canny on four images given in figure 8. The running times were obtained in a PC with a 3Ghz P4 processor and 1 GB RAM.
表1显示了在图8所示的四幅图像上的ED和OpenCV Canny的运行时间的分析。 显然,ED运行得很实时,几乎和opencv一样快。但回想起来,ED不仅生成更好的二值边缘映射,而且还生成边缘图作为边缘段,每一段都由矢量形式的像素链组成。从opencv的二进制边缘图中生成像素段作为像素链,不仅需要额外的处理,而且由于Canny边缘映射的噪声结构,也会产生较差的结果。然而ED,默认情况下,产生的这些轮廓链是不需要额外处理的。