边缘检测算子总结

        转载:https://blog.csdn.net/tigerda/article/details/61192943

     常见边缘检测算子:Roberts 、Sobel 、Prewitt、Laplacian、Log/Marr、Canny、Kirsch、Nevitia

       一阶微分算子:Roberts 、Sobel 、Prewitt

        Robert算子是第一个边缘检测算子,提出者Lawrence Roberts in 1963。

        Sobel边缘算子,当年作者并没有公开发表过论文,仅仅是在一次博士生课题讨论会(1968)上提出("A 3x3 Isotropic Gradient Operator for Image Processing"),后在1973年出版的一本专著("Pattern Classification and Scene Analysis")的脚注里作为注释出现和公开的。提出者Irwin Sobel。

        Prewitt算子来自J.M.S. Prewitt "Object Enhancement and Extraction" in "Picture processing and Psychopictorics", Academic Press,1970。

        我们看这三种边缘检测算子模板及写成差分的形式

 Roberts算子

Sobel算子

Prewitt算子

图 4 一阶微分算子

       如何计算边缘幅值与方向?以Sobel算子为例。3*3 Sobel两个方向的算子在图像上滑动,模板与其覆盖的图像3*3区域9个像素进行卷积,求和后得到此方向的边缘检测幅值。

f(x,y)为图像,Gx和Gy分别是水平和竖直方向算子的卷积结果,G则是最终得到的边缘幅值,θ值则是边缘方向。当然G的计算有时简化为

  

或者

 

求幅值时是有多种选择的,一般根据具体应用选择用水平还是竖直或是两个方向同时检测。

        另外,需要说明的是,Sobel算子还有一种变种,是各向同性Sobel算子,其模板为

图 5 各向同性Sobel算子

Sobel各向同性算子的权值比普通Sobel算子的权值更准确。为什么?模板的权值是离中心位置越远则权值(看绝对值)影响越小,如上图,把模板看成是9个小正方形,小正方形边长为1,则虚线三角形的斜边长为,下直角边长为1,则如果(0,0)位置权值绝对值大小为1,则按照距离关系,位置(1,0)处的权值绝对值大小应该为才是准确的。

       二阶微分算子:Laplacian、Log/Marr

        拉普拉斯算子来自拉普拉斯变换,而Log算子又称Marr算子,由David Courtnay Marr和Ellen Hildreth(1980)共同提出,计算神经学创始人Marr在1980年正式发表论文时,因换白血病早逝,后面设立Marr奖以此纪念其贡献,现在每两年的ICCV(与ECCV,CVPR并称计算机视觉三大顶级会议)会评出一个Marr奖。这两种算子模板如下:

Laplacian算子(两种模板)

Log算子

图 6 二阶微分算子

拉普拉斯算子数学公式是

写成差分形式为

        Log边缘检测则是先进行高斯滤波再进行拉普拉斯算子检测,然后找过零点来确定边缘位置,很多时候我们只是知道Log 5*5模板如上图所示,但是具体是怎么得到的?下面进行推导。

二维高斯公式是

按拉普拉斯算子公式求x,y方向的二阶偏导后为

这里x,y不能看成模板位置,应看成是模板其他位置到中心位置的距离。那么写成

这里x0,y0就是模板中心位置,x,y是模板其他位置,对于5*5模板,则x0=2,y0 = 2,那对于模板中(0,0)位置的权值,即把x= 0,y= 0,x0= 2,y0 = 2带入上式,另= 1,得到约等于0.0175,这样得到

通过取整变符号,且模板总和为0,得到图6所示的模板。

        另外,这里模板大小是如何取的?通常高斯分布中,在(-3,3)的范围内就覆盖了绝大部分区域,所以模板大小一般取dim = 1 + 6(在SIFT特征中,其中的高斯模糊也是这样取),dim如果为小数,则取不小于dim的最小整数,当然实际使用时没有这么严格,如上面我们取=1时,模板大小取5*5。那同一个尺寸的模板中的权值调整就是的变化得到的,变化到一定程度,模板尺寸大小改变(这个是个人理解,欢迎拍砖羡慕)。

       非微分边缘检测算子:Canny

       Canny边缘检测大家应该很熟悉,这里列出步骤,并给出一个详细介绍的链接Canny算子

    1.      彩色图像转换为灰度图像
    2.      对图像进行高斯模糊
    3.      计算图像梯度,根据梯度计算图像边缘幅值与角度(这里其实用到了微分边缘检测算子来计算梯度幅值方向)
    4.      非最大信号压制处理(边缘细化)
    5.      双阈值边缘连接处理
    6.      二值化图像输出结果

   方向算子Kirsch(8个3*3模板),Nevitia (12个5*5模板)

        这两个算子是利用多个方向的子模板进行分别计算,最后取幅值最大的那个为最终边缘幅值,方向即最大幅值对应的那个方向

五、各边缘检测算子对比

猜你喜欢

转载自blog.csdn.net/u013270326/article/details/81412566