一、Canny边缘检测算子的由来
Canny 边缘检测算子是一种多级检测算法。1986 年由 John F. Canny 提出,同时提出 了边缘检测的三大准则:
1、低错误率的边缘检测:检测算法应该精确地找到图像中的尽可能多的边缘,尽可能的减少漏检和误检。
2、最优定位:检测的边缘点应该精确地定位于边缘的中心。
3、图像中的任意边缘应该只被标记一次,同时图像噪声不应产生伪边缘。
Canny 算法出现以后一直是作为一种标准的边缘检测算法,此后也出现了各种基于Canny 算法的改进算法。时至今日,Canny 算法及其各种变种依旧是一种优秀的边缘检测算法
二、Canny 边缘检测步骤
1、使用高斯滤波,消除噪声,举例为 3*3 的高斯内核
2、计算梯度幅值和方向
用 sobel 算子在 x 和 y 方向求图像梯度
使用下面公式计算梯度的幅值和方向
梯度方向一般取值为:0°,45°,90°,135
3、非极大值抑制
这一步排除非边缘像素,仅仅保留了一些细线条(候选边缘)
4、滞后阈值:
Canny 使用了滞后阈值(高阈值和低阈值):
(1)若某一像素位置的幅值超过高阈值,该像素被保留为边缘像素。
(2)若某一像素位置的幅值小于低阈值,该像素被排除。
(3)若某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保留。
三、图像梯度计算 Gradient
图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大。一般情况下,图像梯度计算的是图像的边缘信息。严格来讲,图像梯度计算需要求导数,但图像梯度一般通过计算像素差值来得到梯度的近似值。常用的算子有Sobel,Scharr 和 Lapacian。计算图像梯度,水平梯度和垂直梯度采用 sobel 算子在 x 轴、y 轴方向计 算梯度,全部梯度使用下面的公式计算。