[db:标题]

摘要:成熟的商业软件在进行边缘检测后都能动态的将检测到的边缘分成彩色的线条样式展现给客户,这不仅让客户看起来更为高级,也对一些后续的处理提供了更为有力的手段,本文通过学习相关资料对Canny检测进行了亚像素扩展,并提供了将离散点提取为线条的方法。
边缘检测方面传统的算法中最为经典的就是Canny算法,但是标准的Canny是不具有亚像素精度的,而且得到的结果是一堆离散的边缘点,提取亚像素的方式有很多种,这个在网络上还有一些资料,而如何将离散点链接成一根一根的线条,我一直没有什么思路,最近偶然又有朋友给我推荐了一片文章:A Sub-Pixel Edge Detector an Implementation of the Canny /Devernay Algorithm及其配套的代码,终于完了我这个梦,相关论文及代码可以从http://www.ipol.im/pub/art/2017/216/下载和查看。   后面仔细看了看这个配套的代码,应该说其实在四五年前我就下载过,只是当时感觉好复杂,就没有信心一直看下去,没想到原来那个就是答案,所以有的时候坚持还真的很重要。   这篇文章提出了自己的一个亚像素边缘检测思路,同时也提供了把这些边缘点链接为线条的方法,其边缘检测的算法呢我认为一般般,应该说还是没有Canny好吧。这里稍微做点介绍。   一、Canny /Devernay边缘检测   1、计算图像的梯度值(X方向梯度、Y方向梯度以及梯度幅值),这个可以用一阶中心差分,或者二阶中心差分。     这个过程伪代码如下所示(这里使用的是一阶差分):        一般情况下在进行差分前需要进行下小尺度的高斯模糊,以便减少噪音的干扰。   注意,在计算X及Y方向梯度时,需要注意统一一下计算的方向,及要遵循从左到右以及从上到下这样一致性。   2、根据梯度值的特性来初步确定边缘的候选点,并计算其亚像素位置。   具体来说,当我们完成了第一步的梯度计算后,对于每一个点,当其梯度幅值比左右两侧的点都大时,我们认为其是水平边缘点,当其梯度幅值比上下不部位都大时,我们认为其是垂直边缘点,当然也可能出现一个点,其梯度幅值比上下左右都大,这个时候我们还是认为其是水平边缘点。如果不满足这两个条件中的任何一个,则不是边缘点。   通过上面的原则选择了边缘点后,因为这个位置肯定是水平或者垂直方向的最大值,所以呢我们通过领域三个点的二次方插值,可以得到一个局部的最大值,如下面这个曲线所示:                η的坐标即是获取的新的亚像素的边缘点坐标,而且从理论分析可知其和B点的偏差不会大于0.5位置。    η的坐标可用下面的公式计算:   相关的伪代码如下图所示:        注意这里有一个问题,即所获取的亚像素精度只有一个方向的,也就是说如果X方向是亚像素的,那么Y方向就是非亚像素,如果Y方向是亚像素的,那么X方向就是非亚像素。这个是不完美的。   如果不考虑后续的链接成线条的过程,那么下一步就可以直接使用类似于Canny中的双阀值滞后边界跟踪算法了。 但是论文里是先介绍了链接成线的过程。因此我们后面再同步说下这个事情。   二、离散点链接成线条   1、边缘点链接   要把离散点链接为线条,首先要把所有点按照一定的规则链接起来,这个链接的规则比较重要。   在没有任何附件条件下,一堆离散点要连接起来,一般来说就是要和最邻近的点相连,这个可以用欧式距离来评判。但是这种原始方案对于边缘检测后的特征来说过于简单了,因为边缘本身还有一定的特性,通常情况下我们不但要考虑两个点的距离,还要考虑两个点的梯度方向等因素,因此,我们制定了以下原则:   (1)、首先两个点要必须都是有效的边缘点。   (2)、第二两个点的梯度方向必须一致,所谓的一致其实是指两个点的梯度方向必须在位于连接两个点的直线的同一侧。              如上左图所示,A和B是两个边缘点,由于A和B两个的梯度方向分别位于直线AB的左侧和右侧,即他们不同边,所以这两个点不能相链接,得分为0,因为他们不同边说明图像在这两个位置的变化趋势不同,他们就属于不同性质的点,所以不连接起来。   而右图,A和B梯度指向同一边,因此我们认为他们性质相同,可以链接。   这是在论文配套的代码里的说法,而论文里则是说A和B处梯度的方向夹角要小于90度,这个似乎也不怎么影响。   对于由两点A(x1,y1)和B(x2,y2)定义的直线,要判断点C(x,y)的位置,则步骤如下:     计算叉积: S = (x2 - x1)*(y - y1) - (y2 - y1)(x - x1)     然后根据符号判断位置:         若S > 0,则点在直线的左侧(相对于从A到B的方向)         若S < 0,则点在直线的右侧.         若S = 0,则点在直线上。
阅读全文