Canny 边缘检测分为如下几个步骤。
步骤 1:去噪。噪声会影响边缘检测的准确性,因此首先要将噪声过滤掉。 步骤 2:计算梯度的幅度与方向。
步骤 3:非极大值抑制,即适当地让边缘“变瘦”。
步骤 4:确定边缘。使用双阈值算法确定最终的边缘信息。 下面对上述步骤分别进行简单的介绍。
1. Canny 边缘检测基础
1.1 应用高斯滤波去除图像噪声
由于图像边缘非常容易受到噪声的干扰,因此为了避免检测到错误的边缘信息,通常需要 对图像进行滤波以去除噪声。滤波的目的是平滑一些纹理较弱的非边缘区域,以便得到更准确 的边缘。在实际处理过程中,通常采用高斯滤波去除图像中的噪声。
1.2 计算梯度
例如,左上角顶点的值“2↑”实际上表示的是一个二 元数对“(2, 90)”,表示梯度的幅度为 2,角度为 90°
1.3 非极大值抑制
在获得了梯度的幅度和方向后,遍历图像中的像素点,去除所有非边缘的点。在具体实现 时,逐一遍历像素点,判断当前像素点是否是周围像素点中具有相同梯度方向的最大值,并根 据判断结果决定是否抑制该点。通过以上描述可知,该步骤是边缘细化的过程。针对每一个像 素点:
- 如果该点是正/负梯度方向上的局部最大值,则保留该点。
- 如果不是,则抑制该点(归零)。
1.4 应用双阈值确定边缘
2. Canny 函数及使用
OpenCV 提供了函数 cv2.Canny(