边缘检测之Canny算法_Qt实现(C++)

本文介绍了Canny边缘检测算法,旨在找到最优边缘检测,包括好检测、好定位和最小响应。内容涵盖Canny算法的5个步骤:灰度处理、高斯滤波、梯度计算、非极大值抑制、双阈值检测,并详细解释了每个步骤的原理和代码实现。同时,讨论了高斯滤波器大小和阈值设置对结果的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

边缘检测之Canny算法_Qt实现(C++)

Canny边缘检测算法的简单介绍

  Canny的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:

  • 好的检测 - 算法能够尽可能多地标识出图像中的实际边缘。
  • 好的定位 - 标识出的边缘要与实际图像中的实际边缘尽可能接近。
  • 最小响应 - 图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。

  为了满足这些要求Canny使用了变分法,这是一种寻找满足特定功能的函数的方法。最优检测使用四个指数函数项的和表示,但是它非常近似于高斯函数的一阶导数。

Canny算法的步骤
  • 1、灰度处理
  • 2、降噪,使用高斯滤波器,以平滑图像,滤除噪声。
  • 3、计算图像中每个像素的亮度梯度和方向。
  • 4、应用非极大值抑制(Non-Maximum Suppression),以消除边缘检测带来的杂散响应。
  • 5、应用双阙值检测(Double-Threshold)来确定真实的和潜在的边缘。
  • 6、通过抑制孤立的弱边缘最终完成边缘检测。
Canny算法详细步骤
  • 1、灰度处理
      边缘检测算法处理的是灰度图像,如果是rgb图像,需要先转化为灰度图像。
  • 2、高斯平滑滤波
      任何边缘检测算法都不可能在未经处理的原始数据上很好的处理,所以第一步是对原始数据与高斯滤波器做卷积,得到的图像与原始图像相比有些轻微的模糊。使得单独的一个像素噪声在经过高斯平滑的图像上变得几乎没有影响。
      若图像中一个3*3的窗口为A,要滤波的像素点为e,则经过高斯滤波后,像素点e的亮度值为:
    e=HA=h11h21h31h12h22h32h13h23h33aadgbehcfi=sumah11dh21gh31bh12eh22hh32ch13fh23ih33 e = H ∗ A = [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] ∗ [ a a b c d e f g h i ] = s u m [ a ∗ h 11 b ∗ h 12 c ∗ h 13 d ∗ h 21 e ∗ h 22 f ∗ h 23 g ∗
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值