canny边缘检测_【3】OpenCV图像处理模块(15)canny边缘检测器

87cac2b8dda10d6f3f6657e8c653fce3.png

这是OpenCV图像处理模块提供的最后一个边缘检测的例子,canny边缘检测,利用函数Canny()实现。前面分别介绍了Sobel和Laplace边缘检测。

CVer:【3】OpenCV图像处理模块(13)Sobel边缘检测

CVer:【3】OpenCV图像处理模块(14)拉普拉斯边缘检测


理论

Canny边缘检测器是由John Canny[1]于1986年提出的。被称为最佳的边缘检测器,满足下面三个条件:

  • 低错误率:只检测存在边缘的地方
  • 良好的定位:检测到的边缘像素与真正边缘像素距离最小
  • 最小响应:一个边缘只会得到一个响应。

检测步骤

1.使用高斯滤波器滤波。一个大小为5的高斯滤波器核如下:

2.计算图像梯度。这里与Sobel方法类似:

  • a.利用两个卷积核,分别计算x和y方向的梯度:

  • b.计算总梯度大小和方向:

方向角度圆整到到下面四个角度之一(0,45,90,135)。

3.非极大值抑制。该步移除非边缘像素。只有细线(候选边缘)保留。

4.Hysteresis:最后一步。用两个阈值再次筛选边缘(高upper和低lower):

  • a.如果像素梯度高于upper,该像素为边缘
  • b.如果像素梯度低于lower,该像素不是边缘
  • c.如果像素梯度在两者之间,只有当它连接到一个满足于a的像素时,是边缘

Canny推荐upper:lower在2:1和3:1之间。

5.关于更多的细节,可以参考有关图像处理的书籍。

代码

// @tutorials imgproc module 15

结果

高阈值是低阈值的三倍,注意这里检测的边缘是用原图中的像素值填充过的。

86f38398151346061c65c44932865a0d.png

73c9c21e1ac06e8fe0650398ba88a0f3.png

参考

  1. ^John Canny.A computational approach to edge detection.Pattern Analysis and Machine Intelligence, IEEE Transactions on, (6):679–698, 1986.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值