Canny 边缘检测是一种使用多级边缘检测算法检测边缘的方法
OPENCV提供了函数cv2.Canny( )实现Canny边缘检测,虽然opencv为我们提供了很方便的使用,但是我们还是要理解Canny边缘检测的原理。
Canny 边缘检测步骤
Canny边缘检测分为如下几个步骤:
- 步骤1:去噪。噪声会影响边缘检测的准确性,因此首先要将噪声过滤掉。
- 步骤2:计算梯度的幅度与方向。
- 步骤3:非极大值抑制,即适当的让边缘变瘦。
- 步骤4:确定边缘。使用双阈值算法确定最终的边缘信息。
下面对上述步骤分别进行简单的介绍
1. 应用高斯滤波去除图像噪声
由于图像边缘非常容易受到噪声的干扰,因此为了避免检测到错误的边缘信息,通常需要对图像进行滤波以去除噪声。滤波的目的是平滑一些纹理较弱的非边缘区域,以便得到更准确的边缘。在实际处理过程中,通常采用高斯滤波去除图像中的噪声。
下图演示了使用高斯滤波器 T 对原始图像O中像素值为226的像素点进行滤波,得到该点在滤波结果图像D内的值的过程。
在滤波过程中,我们通过滤波器对像素点周围的像素计算加权平均值,获取最终滤波结果。对于高斯滤波器T,越临近中心的点,权值越大。计算过程如下:
138 = 1/56(197*1+25*1+106*2+156*1+159*1+149*1+40*3+107*4+5*3+71*1+163*2+198*4+226*8+223*4+156*2+......+41*1+75*1)
当然,高斯滤波器(高斯核)并不是固定的,滤波器的大小也是可变的,高斯核的大小对于边缘检测的效果具有很重要的作用。滤波器的核越大,边缘信息对于噪声的敏感度就越低。不过,核越大,边缘检测的定位错误也会随之增加