Canny边缘检测算子原理和matlab和opencv实现代码

一、基本原理

  图像边缘是图像的重要信息,而Canny算子则是用于边缘检测的经典算法。在用Canny算子进行边缘检测之前必须有效地抑制噪声,该算法使用的是高斯平滑滤波。接下来计算图像中每一点的梯度向量,根据梯度向量可以得到梯度方向和梯度幅值。梯度方向在(-π,π]范围内,将梯度方向离散到4个方向,分别为上下方向、左右方向、主对角线方向、副对角线方向,根据离散后的梯度方向对梯度幅值进行非极大值抑制。例如,如果图像中点(x,y)的梯度方向沿上下方向,那么将点(x,y)的梯度幅值分别与点(x-1,y)和点(x+1,y)的梯度幅值进行比较;如果点(x,y)的梯度幅值大于另外两点,那么该点有可能是边缘点,将它的梯度幅值保留;如果点(x,y)的梯度幅值不大于另外两点,那么该点一定不是边缘点,将它的梯度幅值置零。接下来,用双阈值算法检测和连接边缘,高阈值用于检测边缘,低阈值用于连接边缘。在该算法中,取高阈值为梯度幅值最大值的0.3倍,取低阈值为梯度幅值最大值的0.1倍。如果某点的梯度幅值大于高阈值,那么该点一定是边缘点;如果某点的梯度幅值小于低阈值,那么该点一定不是边缘点;如果某点的梯度幅值介于低阈值和高阈值之间,那么该点有可能是边缘点,进一步,如果该点的8邻域的梯度幅值的最大值大于高阈值,那么将该点判定为边缘点。

二、实现步骤

(1)调用自定义函数myGauss生成高斯模板,高斯模板的大小和标准差均可以改变;
(2)将原图像f(x,y)与高斯模板做卷积,得到用高斯滤波器平滑后的图像g(x,y);

  • 7
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xxxx9300

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值