Canny边缘检测

Canny边缘检测

在介绍Canny边缘检测算法前,先解释一下最优边缘检测,它包括三个方面

1,好检测:尽可能多的标记处实际边缘(多)

2,好定位:标记出来的边缘应该尽可能多的接近实际边缘(准)

3,小响应:图像中的边缘只能标识一次,并且可能存在的图像噪声不应该标识为边缘

这三个方面,恰恰正是Canny算子的目标!Canny提出了判定边缘检测算子的3个准则:信噪比准则、定位精度准则和单边缘响应准则。

这三个方面的另一种说法

(1.低失误率,既要少将真的边缘丢弃,也要少将非边缘判为边缘;

2.高位置精度,检测出的边缘应在真正的边界上;

3.单像素边缘,即对每个边缘有唯一的响应,得到的边界为单像素宽。)

(1)什么是Canny边缘检测?

正是因为Canny算子的目标高,所以他实现起来更为困难,但是相比于索贝尔算子,罗伯茨算子,Canny算子效果更好。他实际上是通过寻找图像梯度的局部最大值实现的。这种算子是一个具有滤波、增强以及检测的多阶段的优化算子。

(2)优缺点

canny 最好。

容易把噪点误判为边界。

基于梯度幅值的双阈值方法往往难以在抑制噪声的同时保护低强度边缘,在一定程度上影响了其边缘检测的效果。

高低阈值需要自己设定,自适应能力较差

(3)实现过程

a.利用高斯滤波平滑图像以去除噪声


设h(x,y)为平滑后的图像,f(x,y)为原图像,那么经过高斯滤波处理过的图像就是

h(x,y)=G(x,y)*f(x,y),其中*代表卷积

b.寻找图像的强度梯度

主要方法是用一阶偏导的有限差分来计算梯度的幅值和方向

一阶微分卷积模板为


Gx=f(x,y)*Gx

Gy=f(x,y)*Gy



c.非极大值抑制

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

那么他是如何进行寻找的呢?

实际上就是(引用:https://blog.csdn.net/kaka20080622/article/details/9225045)

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


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

d.利用双阈值算法检测和连接边缘

      双阈值的意思就是要设置两个阈值,并且要求两者关系为th1=0.4th2。在处理图像的过程中把梯度值小于th1的像素的灰度值设置为0,得到图像1.然后把梯度值小于th2的像素的灰度值设为0,得到图像2.由于图像2的阈值较高,去除大部分噪音,但同时也损失了有用的边缘信息。而图像1 的阈值较低,保留了较多信息,我们可以以图像2为基础,以图像1作为补充来连接图像的边缘。

连接的方法是对图像2进行扫描,当遇到一个非零灰度的像素p(x,y)的时候,跟踪以p(x,y)为开始点的轮廓线,指导轮廓线的终点q(x,y).考察图像1中与图像2中q(x,y)点对应的点s(x,y)的8邻近区域。如果在s(x,y)点的8邻域中有非零像素存在,则将其包括到图像2中,作为r(x,y)。再从r(x,y)开始,重复第一步,直到无法继续。当完成对包含p(x,y)的轮廓线的连结之后,将这条轮廓线标记为已经访问。回到第一步,寻找下一条轮廓线。重复第一步、第二步、第三步,直到图像2中找不到新轮廓线为止。

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




   

  • 7
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值