【目标识别——方法篇】:Canny边缘检测原理

 

算法概述

Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法。目前有多种算法可以进行边缘检测,虽然Canny算法年代久远,但可以说它是边缘检测的一种标准算法,而且仍在研究中广泛使用。

最优边缘准则

Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:

(1)最优检测:算法能够尽可能多地标识出图像中的实际边缘,漏检真实边缘的概率和误检非边缘的概率都尽可能小;

(2)最优定位准则:检测到的边缘点的位置距离实际边缘点的位置最近,或者是由于噪声影响引起检测出的边缘偏离物体的真实边缘的程度最小;

(3)检测点与边缘点一一对应:算子检测的边缘点与实际边缘点应该是一一对应

为了满足这些要求 Canny 使用了变分法(calculus of variations),这是一种寻找优化特定功能的函数的方法。最优检测使用四个指数函数项表示,但是它非常近似于高斯函数的一阶导数

算法的实现步骤

Canny边缘检测算法可以分为以下5个步骤:

(1)应用高斯滤波来平滑图像,目的是去除噪声

(2)找寻图像的强度梯度(intensity gradients)

(3)应用非最大抑制(non-maximum suppression)技术来消除边误检(本来不是但检测出来是)

(4)应用双阈值的方法来决定可能的(潜在的)边界

(5)利用滞后技术来跟踪边界

1. 图像平滑(去噪声)

任何边缘检测算法都不可能在未经处理的原始数据上很好地工作,所以第一步是对原始数据与高斯 mask 作卷积,得到的图像与原始图像相比有些轻微的模糊(blurred)。这样,单独的一个像素噪声在经过高斯平滑的图像上变得几乎没有影响。以下为一个5X5高斯滤波器(高斯核,标准差σ=1.4),其中A为原始图像,B为平滑后的图像。

 

2. 寻找图像中的强度梯度

Canny算法的基本思想是找寻一幅图相中灰度强度变化最强的位置。所谓变化最强,即指梯度方向。平滑后的图像中每个像素点的梯度可以由Sobel算子(一种卷积运算)来获得(opencv中有封装好的函数,可以求图像中每个像素点的n阶导数)。首先,利用如下的核来分别求得沿水平(x)和垂直(y)方向的梯度G_X和G_Y。

K_{GX} = [-1 0 1 ; -2 0 2 ; -1 0 1], K_{GY} = {1 2 1 ; 0 0 0 ; -1 -2 -1}

之后便可利用公式来求得每一个像素点的梯度度量值(gradient magnitude,可能翻译得不准确)。

,有时为了计算简便,也会使用G_X和G_Y的无穷大范数来代替二范数。把平滑后的图像中的每一个点用G代替,可以获得如下图像。从下图可以看出,在变化剧烈的地方(边界处),将获得较大的梯度度量值G,对应的颜色为白色。然而,这些边界通常非常粗,难以标定边界的真正位置。为了做到这一点(参考非极大抑制Non-maximum suppression一节),还必须存储梯度方向,其公式如下图所示。也就是说在这一步我们会存数两块数据,一是梯度的强度信息,另一个是梯度的方向信息。

3. 非极大抑制Non-maximum suppression

这一步的目的是将模糊(blurred)的边界变得清晰(sharp)。通俗的讲,就是保留了每个像素点上梯度强度的极大值,而删掉其他的值。对于每个像素点,进行如下操作:

a) 将其梯度方向近似为以下值中的一个(0,45,90,135,180,225,270,315)(即上下左右和45度方向)

b) 比较该像素点,和其梯度方向正负方向的像素点的梯度强度

c) 如果该像素点梯度强度最大则保留,否则抑制(删除,即置为0

为了更好的解释这个概念,看下图。

图中的数字代表了像素点的梯度强度,箭头方向代表了梯度方向。以第二排第三个像素点为例,由于梯度方向向上,则将这一点的强度(7)与其上下两个像素点的强度(5和4)比较,由于这一点强度最大,则保留。处理后效果如下图所示。

上图中,可以想象,边界处的梯度方向总是指向垂直于边界的方向,即最后会保留一条边界处最亮的一条细线。

4.双阈值(DoubleThresholding

经过非极大抑制后图像中仍然有很多噪声点。Canny算法中应用了一种叫双阈值的技术。即设定一个阈值上界和阈值下界(opencv中通常由人为指定的),图像中的像素点如果大于阈值上界则认为必然是边界(称为强边界,strong edge),小于阈值下界则认为必然不是边界,两者之间的则认为是候选项(称为弱边界,weak edge),需进行进一步处理。经过双阈值处理的图像如下图所示

上图中右侧强边界用白色表示,弱边界用灰色表示。

5.利用滞后的边界跟踪

这里就不细作解释了。大体思想是,和强边界相连的弱边界认为是边界,其他的弱边界则被抑制。


 

 

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值