OpenCV学习(二) Canny算子

Canny介绍

Canny边缘检测算法是由John Canny在1986年提出的[26],是一种多级边缘检测的算法。该算法是从不同的视觉对象中提取有用的信息并减少数据量的一种技术。

Canny实现步骤

Canny边缘检测主要分为以下五个步骤:

  1. 使用高斯滤波对图像进行平滑处理
    使用高斯平滑滤波主要是为了减少噪声的干扰,引起边缘的误检测。使用高斯滤波器对图像进行卷积可以使得图像变得平滑。

  2. 计算图像的像素梯度强度和方向
    Canny计算边缘的算法中,计算像素的梯度强度和方向主要是为了给后续处理提供处理数据,经典的Canny算法常用四个梯度算子计算水平、垂直和对角线方向的梯度,在常用的情况中使用的是只含有水平方向和垂直方向的差分算子,例如在OpenCV学习(一) 相关和卷积中描述过的sobel算子。

  3. 非极大值抑制消除边缘杂散影响
    非极大值抑制是一种边缘细化方式,利用非极大值抑制使得边缘“锐化”。这是由于由梯度边缘计算所得到的边缘本身不止一个像素,而是周围多个像素都会是边缘
    在这里插入图片描述
    上述是x和y方向的sobel算子结果,得到了更为厚重的边缘,重叠像素部分更多。

  4. 使用双阈值法检测边缘
    完成非极大值抑制后的图像边缘中仍然存在着一些噪声和颜色变化引起的边缘,为了滤除这些由于杂散影响产生的边缘信息,可以采用阈值检测的方法,通过设定双阈值判定,设定的高阈值作为判定边缘像素是否为强边缘像素,判断依据是该点的梯度值是否超过阈值,同理,低阈值用于区分弱边缘像素和被抑制的像素点。通过双阈值法,选取高低阈值,保留强边缘像素,并将弱边缘像素点送至下一步骤进行最后的边缘像素点检测。

  5. 抑制孤立弱边缘完成检测
    该步骤主要检测由步骤四获取的弱边缘像素点。弱边缘像素点判定为边缘有两种可能,一种是由于它们是从真实边缘提取出来的,另一种是由于噪声或颜色变化引起的。通过查看弱边缘像素点的8个邻域像素,对弱边缘像素进行抑制,当弱边缘像素点的邻域含有强边缘像素时,可以保留边缘为真实边缘。

OpenCVCanny函数
CV_EXPORTS_W void Canny( InputArray image, OutputArray edges,
                         double threshold1, double threshold2,
                         int apertureSize = 3, bool L2gradient = false );

这里的threshold1 和threshold2对应相应的高低阈值,apertureSize为sobel算子的大小

Canny边缘提取与其他边缘提取对比
Sobel

位或的sobelX和sobelY,以及直接使用opencv sobel算子得到的边缘结果(这里位或省去了取x和y的平方开根操作)
在这里插入图片描述

Laplacian

在这里插入图片描述

canny结果

Canny(in, out, 3, 9, 3)结果
在这里插入图片描述

Canny(in, out, 51, 101, 3)结果
在这里插入图片描述

参考链接:
Wiki上的Canny描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值