canny算子边缘检测

来源:互联网 发布:百度霸屏js跳转代码 编辑:程序博客网 时间:2024/04/29 01:36

canny算子边缘检测主要分为四步:

1、高斯滤波

使用高斯平滑函数,目的是平滑为了消除噪声。


2、计算梯度幅值和方向

利用原始灰度图求出水平方向和垂直方向的梯度图,再得到综合梯度图。

利用俩个方向的模板进行卷积,利用sobel算子即可。


利用上述公式,得到三个梯度图,水平方向,垂直方向,综合方向梯度图。


3、非极大值抑制

目的是保留梯度方向上最大值,该步主要是利用上一步的得到的三个梯度图,这些“假边缘”的灰度值不如真边缘的灰度值大,利用灰度值的变化,去除一些假边缘。

其实上一步的综合梯度图已经可以看出图像的边缘的轮廓了,只是边缘较粗且我们还没有对此梯度图上的边缘强度进行二值化,这里的边缘含有大量假边缘,它们的灰度值可能不如真边缘大,但是一个渐进的变化过程,非极大抑制的目的就是结合梯度方向和梯度强度去除这些假边缘。

图像梯度幅值矩阵中的元素值越大,说明图像中该点的梯度值越大,但这不不能说明该点就是边缘(这仅仅是属于图像增强的过程)。在Canny算法中,非极大值抑制是进行边缘检测的重要步骤,通俗意义上是指寻找像素点局部最大值,将非极大值点所对应的灰度值置为0,这样可以剔除掉一大部分非边缘的点


根据上图可知,要进行非极大值抑制,就首先要确定像素点C的灰度值在其8值邻域内是否为最大。上图中蓝色的线条方向为C点的梯度方向,这样就可以确定其局部的最大值肯定分布在这条线上,也即出了C点外,梯度方向的交点dTmp1和dTmp2这两个点的值也可能会是局部最大值。因此,判断C点灰度与这两个点灰度大小即可判断C点是否为其邻域内的局部最大灰度点。如果经过判断,C点灰度值小于这两个点中的任一个,那就说明C点不是局部极大值,那么则可以排除C点为边缘。这就是非极大值抑制的工作原理。

        作者认为,在理解的过程中需要注意以下两点:

        1)中非最大抑制是回答这样一个问题:“当前的梯度值在梯度方向上是一个局部最大值吗?” 所以,要把当前位置的梯度值与梯度方向上两侧的梯度值进行比较,在梯度和反梯度方向上各找n个像素点,若梯度幅值不是这些点中的最大点,则将该梯度置为0,否则保持梯度不变(在每一点上,邻域的中心象素M与沿着梯度线的两个象素相比。如果M的梯度值不比沿梯度线的两个相邻象素梯度值大,则令M=0

        2)梯度方向垂直于边缘方向。

        但实际上,我们只能得到C点邻域的8个点的值,而dTmp1和dTmp2并不在其中,要得到这两个值就需要对该两个点两端的已知灰度进行线性插值,也即根据图1中的g1和g2对dTmp1进行插值,根据g3和g4对dTmp2进行插值,这要用到其梯度方向,这是上文Canny算法中要求解梯度方向矩阵Thita的原因。

        完成非极大值抑制后,会得到一个二值图像,非边缘的点灰度值均为0,可能为边缘的局部灰度极大值点可设置其灰度为128。根据下文的具体测试图像可以看出,这样一个检测结果还是包含了很多由噪声及其他原因造成的假边缘。因此还需要进一步的处理。



4、边缘连接(双线性阈值)

实现强边缘到弱边缘的连接,所有可能连接的点都出不了非极大抑制后的范围,即这一步主要是在非极大抑制的结果中去除假边缘保留真边缘,同时又让保留的边缘尽量连贯真实。

Canny算法中减少假边缘数量的方法是采用双阈值法。选择两个阈值(关于阈值的选取方法在扩展中进行讨论),根据高阈值得到一个边缘图像,这样一个图像含有很少的假边缘,但是由于阈值较高,产生的图像边缘可能不闭合,未解决这样一个问题采用了另外一个低阈值。

首先是一个较大的阈值:Nmax.使用该阈值二值化后的图像含有较少的假的边缘点,但是端点较多!

使用较小的阈值:Nmin,使用该阈值二值化后的图像含有较多的假的边缘点;

通过上一步获取的边缘点,判断其8邻域内有无第二步获得的边缘点,然后进行连接!

        在高阈值图像中把边缘链接成轮廓,当到达轮廓的端点时,该算法会在断点的8邻域点中寻找满足低阈值的点,再根据此点收集新的边缘,直到整个图像边缘闭合。

第4步的边缘连接,其实是强边缘到弱边缘的连接,我们经过第3步,得到一个二值化的“非极大抑制后的边缘图”,它和第二步得到的“综合梯度图”不同,一是 去掉了大量伪边缘,二是它已经二值化了边缘灰度是统一的。这时,为什么我们还需要第4步?我在上面开始时的总结处说是为了进一步去除假边缘,这是有道理 的,只不过这里的“假边缘”和第三步要去的“假边缘”性质不同,第3步处的假边缘可以理解成是真正依附在真边缘周围的假边缘(这样的边缘在第3步后就剩下 很细的真边缘),甚至是依附在假边缘周围的假边缘(这样的边缘全是假边缘,经过第3步还会剩下一部分假边缘),两者中的后者正是第4步要处理的,第4步最 重要的参数是两个自适应的阈值,所以说第4步对假边缘的鉴定是根据其灰度是否太弱来确定的(小于强阈值),而不是像第3步那样,鉴定的依据是其灰度值与周 围灰度值的比较。在经由强阈值确定了真边缘后,再利用弱阈值对真边缘进行连接处理,以保证边缘的顺滑真实。


0 0
原创粉丝点击