前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Canny算子

Canny算子

作者头像
裴来凡
发布2022-05-28 16:17:07
4020
发布2022-05-28 16:17:07
举报
文章被收录于专栏:图像处理与模式识别研究所
代码语言:javascript
复制
import cv2
o=cv2.imread("C:/Users/xpp/Desktop/Lena.png",cv2.IMREAD_GRAYSCALE)#原始图像
r=cv2.Canny(o,32,128)#Canny算子
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

算法:Canny算子是一种使用多级边缘检测算法检测边缘的方法。

  • 首先读取图像
  • 进行高斯滤波去噪
  • 计算梯度的幅度与方向
  • 对梯度幅值进行非极大值抑制
  • 确定检测边缘

Canny算子通过边缘差分算子(如Rober,Prewitt,Sobel)计算差分的水平方向的Gx和垂直方向的Gy,梯度的幅度G和方向θ(梯度的方向与边缘的方向垂直):

其中θ范围从弧度-π到π。

设梯度分为8个方向,分别为E、NE、N、NW、W、SW、S、SE,其中0代表00~45°,1代表450~90°,2代表-900~-45°,3代表-450~0°。像素点P的梯度方向为θ,则像素点P1和P2的梯度线性插值为:

edges = cv.Canny(image, threshold1, threshold2[, apertureSize[, L2gradient]])

  • image表示输入图像
  • threshold1表示第一个阈值
  • threshold2表示第二个阈值
  • apertureSize表示Sobel算子孔径的大小
  • L2gradient表示计算图像梯度幅度(gradient magnitude)的标识。其默认值为False。如果为True,则使用更精确的L2范数进行计算(即两个方向的导数的平方和再开方),否则使用L1范数(直接将两个方向导数的绝对值相加)

注意:非极大值抑制寻找的像素点是局部最大值。图像的噪声会影响边缘检测的准确性,虚边缘可能是真实图像产生的,也可能是由于噪声所产生的。滤波器的核越大,边缘信息对于噪声的敏感度越低。核越大,边缘检测的定位错误也会随之增加。通常5×5的核满足大多数的情况。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档