Candy算法--理解

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

  1. 好的检测 - 算法能够尽可能多地标识出图像中的实际边缘。
  2. 好的定位 - 标识出的边缘要与实际图像中的实际边缘尽可能接近(边缘过粗,难以精确定位)。
  3. 最小响应 - 图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘(检测所有边缘)。

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

Canny算法步骤

  • 降噪

任何边缘检测算法都不可能在未经处理的原始数据上很好地处理,所以第一步是对原始数据与高斯平滑模板作卷积,得到的图像与原始图像相比有些轻微的模糊(blurred)。这样,单独的一个像素噪声在经过高斯平滑的图像上变得几乎没有影响。

  • 寻找图像中的亮度梯度

图像中的边缘可能会指向不同的方向,所以Canny算法使用4个mask检测水平、垂直以及对角线方向的边缘。原始图像与每个mask所作的卷积都存储起来。对于每个点我们都标识在这个点上的最大值以及生成的边缘的方向。这样我们就从原始图像生成了图像中每个点亮度梯度图以及亮度梯度的方向。

  • 在图像中跟踪边缘

较高的亮度梯度比较有可能是边缘,但是没有一个确切的值来限定多大的亮度梯度是边缘多大又不是,所以Canny使用了滞后阈值。

滞后阈值需要两个阈值——高阈值低阈值。假设图像中的重要边缘都是连续的曲线,这样我们就可以跟踪给定曲线中模糊的部分,并且避免将没有组成曲线的噪声像素当成边缘。所以我们从一个较大的阈值开始,这将标识出我们比较确信的真实边缘,使用前面导出的方向信息,我们从这些真正的边缘开始在图像中跟踪整个的边缘。在跟踪的时候,我们使用一个较小的阈值,这样就可以跟踪曲线的模糊部分直到我们回到起点。

一旦这个过程完成,我们就得到了一个二值图像,每点表示是否是一个边缘点。

参数

  • 高斯滤波器的大小:第一步所用的平滑滤波器将会直接影响Canny算法的结果。较小的滤波器产生的模糊效果也较少,这样就可以检测较小、变化明显的细线。较大的滤波器产生的模糊效果也较多,将较大的一块图像区域涂成一个特定点的颜色值。这样带来的结果就是对于检测较大、平滑的边缘更加有用,例如彩虹的边缘。
  • 阈值:使用两个阈值比使用一个阈值更加灵活,但是它还是有阈值存在的共性问题。设置的阈值过高,可能会漏掉重要信息;阈值过低,将会把枝节信息看得很重要。很难给出一个适用于所有图像的通用阈值。目前还没有一个经过验证的实现方法。

如果想要试验Canny算法中的参数,http://matlabserver.cs.rug.nl 的在线Canny程序会很有帮助。

Canny边缘检测算法是一种经典的图像处理算法,被广泛应用于计算机视觉领域。该算法的流程可以分为以下几个步骤: 1. 高斯滤波器:首先,对输入图像应用高斯滤波器进行去噪处理。这一步的目的是减少图像中的噪声对边缘检测结果的影响。通过调整滤波器的参数,可以控制平滑程度。 2. 计算梯度:在经过高斯滤波器处理后的图像上计算梯度信息。梯度表示图像中每个像素点的亮度变化情况。通过计算梯度的幅值和方向,我们可以得到图像中的边缘信息。 3. 非最大抑制:接下来,在梯度图像上进行非最大抑制处理。这一步的目的是将梯度图像中非边缘像素置为0,只保留边缘的细线条。非最大抑制的原理是在每个像素点的梯度方向上,比较该像素点与相邻像素点的梯度幅值,只保留梯度幅值最大的像素点作为边缘点。 4. 阈值处理:经过非最大抑制后,我们得到了一个二值图像,其中边缘点被设置为白色,非边缘点为黑色。然而,这个结果可能还存在一些假阳性(即被错误地标记为边缘的非边缘点)。为了去除这些假阳性,Canny边缘检测算法采用了双阈值处理。较大的阈值用于检测图像中明显的边缘,而较小的阈值用于将这些断续的边缘连接起来。通过调整这两个阈值,我们可以控制边缘检测的灵敏度和准确性。 5. 边缘连接:最后一步是进行边缘的连接。在前面的步骤中,我们得到了一些断断续续的边缘线段。为了得到连续的边缘,Canny边缘检测算法会分析所有的边缘及其之间的连接关系,将它们连接起来形成完整的边缘线段。 综上所述,Canny边缘检测算法通过高斯滤波器去噪、计算梯度、非最大抑制、阈值处理和边缘连接这几个步骤来实现对图像中边缘的检测。通过调节算法中的参数,我们可以控制边缘检测的准确性和灵敏度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值