canny 边缘检测算法和sobel边缘检测算法的区别


1、两种算法原理和区别

关于边缘检测算法,网上有很多种,其中提得最多的就是sobel边缘检测算法和canny边缘检测算法。那两者有什么区别呢?网上有这两种边界检测算法方面资料有很多,但是讲两者的区别没有,而且概念很容易混肴,比如canny边界检测算法中也会用到sobel算子,所以感觉有必要写个文来澄清一下,让喜欢图像处理朋友们能够懂这两个边界检测算法,少走弯路。

sobel边缘检测算法两个步骤:首先用到sobel算子,提取灰度差值信息,也就是图像梯度值,然后用单阀值进一步提取边界信息。

canny边缘检测算法包含四个步骤:高斯滤波,同样计算灰度差值信息,即梯度信息和方向,后面检测边界信息这一块,不是用简单的单阈值方法,而是用了非极大值抑制法排除了不是边界点的信息,同时进一步用了双阈值法提取出强边界和弱边界,为最后做边界连接提供有用的边界点信息。

从上述介绍的sobel边界检测算法和canny边界检测算法,可以看出来,这两种算法都是计算梯度信息和方向,最后根据这个梯度信息进行检测边界,总体流程上师一致的。不同点就是检测这一块,cannny算法给出了非极大值抑制和双阈值法可以排除不是边界点的干扰,更好的能够提取出边界。

了解了sobel检测算法和canny边界检测算法的不同和共同之后,我还想进一步解释一些基本概念,就是什么师sobel算子,什么是x方向梯度幅值,什么是y方向梯度值,什么是图像梯度值,什么是梯度方向,什么是非极大值抑制,什么是双阈值法。了解了这些基本概念,就清楚了sobel边界检测法和canny检测法。

2、梯度相关的基本概念

其中sobel算子有两个方向算子,soble水平和垂直算子。题外话,也可以有45度方向的sobel算子。

 

 

 

 

 

利用soble水平和垂直算子与输入图像卷积计算dx、dy,具体公式如下:

                                       

 
进一步可以得到图像梯度的幅值:

 

                                                                          

为了简化计算,幅值也可以作如下近似:

 

 

 

 

                                                                         

角度为:

                       

 

 3、非极大值抑制的实现注意点

沿着梯度方向对幅值进行非极大值抑制,而非边缘方向。所以要实现非极大值抑制算法,需要输入梯度的幅值信息和梯度的方向信息。下面是梯度方向和边缘方向的关系图:

 

                                                     图 1

由于梯度的方向信息是0度~360度的,所以在这个梯度方向上没有正好对应的梯度信息,因为像素值本身就是离散的,所以这里需要进行插值,或者近似取得想过值进行比较。

3.1 插值方法:

 

                                                       图 2

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

 

 但实际上,我们只能得到C点邻域的8个点的值,而dTmp1和dTmp2并不在其中,要得到这两个值就需要对该两个点两端的已知灰度进行线性插值,也即根据图2中的g1和g2对dTmp1进行插值,根据g3和g4对dTmp2进行插值,这要用到其梯度方向.

3.2、近似比较法

边缘可以划分为垂直、水平、45°、135°4个方向,同样,梯度反向也为四个方向(与边缘方向正交)。因此为了进行非极大值,将所有可能的方向量化为4个方向,如下图:

 

             

 

                                      

 

量化化情况可总结为:

 水平边缘--梯度方向为垂直设置为0 

 垂直边缘--梯度方向为水平设置为1 

 135°边缘--梯度方向为45°设置为2 

45°边缘--梯度方向为135°设置为3 

 

 

 

在每一点上,领域中心 x 与沿着其对应的梯度方向的两个像素相比,若中心像素为最大值,则保留,否则中心置0,这样可以抑制非极大值,保留局部梯度最大的点,以得到细化的边缘。

 

 

                                                         

                                                                                                                                                                                             


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM