一、Canny算子
Canny边缘检测算法是John F. Canny于1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的最优算法
-
消除噪声:使用高斯平滑滤波器卷积降噪
-
计算梯度幅值和方向

梯度方向近似得到四个可能角度之一(一般0,45,90,135) -
非极大值抑制:这一步排除非边缘像素,仅仅保留了一些细线条(候选边缘)
-
滞后阈值:最后一步,Canny使用了滞后阈值,滞后阈值需要两个阈值(高阈值和低阈值)
- 如果某一像素位置的幅值超过高阈值,该像素被保留为边缘像素。
- 如果某一像素的幅值小于低阈值,该像素被排除
- 如果某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保留
二、Canny
void cv::Canny ( InputArray image,
OutputArray edges,
double threshold1,
double threshold2,
int apertureSize = 3,
bool L2gradient = false
)
- Image: 输入图像
- edges: 输出的边缘图像,8-bit单通道图像,与输入图像有相同的尺寸。
- threshold1: 第一个滞后性阈值
- threshold2: 第二个滞后性阈值
- apertureSize: 表示应用的Sobel算子孔径大小,有默认值3
- L2gradient: 一个计算图像梯度幅值的标识,有默认值false
对于threshold1和threshold2两个阈值来讲,两者较小的值用于边缘连接而较大的值用来寻找边缘的初始段。
三、示例
#include<opencv2/opencv.hpp>

本文介绍了Canny边缘检测算法,这是John Canny在1986年提出的最优边缘检测方法。首先通过高斯滤波器进行降噪,然后计算梯度幅度和方向。非极大值抑制步骤保留细线条作为候选边缘,最后使用滞后阈值确定最终边缘。Canny算法利用两个阈值来判断像素是否属于边缘,低阈值排除部分像素,高阈值保留边缘,而介于两者之间的像素仅在与高阈值像素相连时保留。文章还提供了一个示例来展示Canny边缘检测的应用。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



