canny算子_Canny边缘检测原理

Canny边缘检测算法分为以下四步:

1 图像平滑

因为边缘检测对图像噪声很敏感,所以第一步我们使用

的高斯滤波器平滑图像。

2 求取图像梯度

对平滑后的图像使用Sobel算子来计算水平方向梯度

和竖直方向梯度
,然后我们可以计算图像中每个像素的梯度大小为
,梯度方向为
,梯度方向通常垂直于边缘方向。

3 非极大值抑制

在得到每个像素的梯度大小和方向后,我们遍历每个像素,判断该像素的梯度大小在该像素梯度方向上是否是其邻域中的局部最大值。如下图所示:

27e73d8b6e2b7266859e98a931946852.png

点A在边缘上,A的梯度方向垂直于边缘,B和C在A的梯度方向上,因此A和B、C比较来确定A的梯度是否为局部最大值。如果A的梯度为局部最大值,则A进入下一步,否则判断A不是边缘,A被抑制(置为0)。

4 滞后阈值法(双阈值)

这一步我们设置两个阈值

。遍历所有像素,梯度大小大于
的像素点被归为“确定边缘”像素,被保留;梯度大小小于
的像素点被认为一定不属于边缘,被丢弃。对于那些梯度大小介于
之间的像素点,如果它们连接到“确定边缘”像素,则它们被视为边缘的一部分。否则,它们也会被丢弃。如下图所示:

5777eed9529c81ed7e4492f25fb6ea8c.png

A在

之上,因此被认为是“确定边缘”。虽然C低于
,但它连接到边A,所以C也被认为是边缘,我们得到了完整的曲线。B虽然在最小值以上,且与C边在同一区域内,但它没有连接到任何“确定边缘”,因此被丢弃。因此,为了得到正确的结果,我们必须相应地选择合适的

通过以上四步我们就得到了图像的边缘。

OpenCV中Canny()方法的参数与上述描述一致。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值