【一】介绍
- Canny Detector 是一种针对快速实时边缘检测而优化的多阶段算法
- 该算法的基本目标是检测亮度(大梯度)的急剧变化,例如从白色到黑色的转换
- 在给定一组阈值的情况下将它们定义为边缘
【二】四个阶段
- 【1】降噪
- 与所有边缘检测算法一样,噪声是一个至关重要的问题,通常会导致错误检测
- 应用 5x5 高斯滤波器 对图像进行卷积(平滑)以降低检测器对噪声的敏感度
- 通过使用 正态分布 数字的 高斯核(在这种情况下,5x5)在整个图像上卷积完成,将每个像素值设置为等于其相邻像素的 加权平均值
- 图示(5x5 高斯核,* 表示卷积运算)
- 【2】求梯度
- 沿着 x 轴和 y 轴使用 Sobel,Roberts 或 Prewitt 算子(Sobel 在 OpenCV 中使用)来检测边缘是水平的,垂直的还是对角线的
- 图示,用于计算水平和垂直方向的一阶导数的 Sobel 核
- 【3】非极大值抑制
- 非极大值抑制应用于时的边界变 “细” 并锐化边缘
- 对于每个像素,如果它是先前计算的梯度方向上的局部最大值,则保留该值
- 如图所示
- A位于边缘,由于 梯度垂直于边缘方向,因此将 B 和 C 的像素值与 A 的像素值进行比较,以确定 A 是否是局部最大值
- 如果 A 是局部最大值,则保留, 否则, A 的像素值被设置为 0 并且 A 被抑制
- 【4】滞后阈值
- 在非极大值抑制滞后,确认强像素位于边缘的最终图中
- 但是,应进一步分析弱像素以确定其是否构成边缘或噪声
- 用两个预定义的 minVal 和 maxVal 阈值,我们设置任何强度梯度高于 maxVal 的像素都是边缘,任何强度梯度低于 minVal 的像素都不是边缘并被丢弃
- 在 minVal 和 maxVal 之间具有强度梯度的像素,仅当它们连接到具有 高于 maxVal 的强度梯度的像素才被认为是边缘
- 解释:边缘 A 高于 maxVal,因此被视为边缘;边缘 B 位于 maxVal 和 minVal 之间,但未连接到 maxVal 上方的任何边缘,因此被丢弃;边缘 C 位于 maxVal 和 minVal 之间,并连接到边缘 A, 即 maxVal 上方的边缘,因此被视为边缘