一.Canny 边缘检测算法原理
JohnCanny 于 1986 年提出 Canny 算子,属于是先平滑后求导数的方法。其处理过
程大体上分为下面四部分。
1. 对原始图像进行灰度化
Canny 算法通常处理的图像为灰度图,因此如果获取的是彩色图像,那首先就得进行
灰度化。对一幅彩色图进行灰度化,就是根据图像各个通道的采样值进行加权平均。以
RGB 格式的彩图为例,通常灰度化采用的方法主要有:
方法 1:Gray=(R+G+B)/3;
方法 2:Gray=0.299R+0.587G+0.114B;(这种参数考虑到了人眼的生理特点)
至于其他格式的彩色图像,可以根据相应的转换关系转为 RGB 然后再进行灰度化;
在编程时要注意图像格式中 RGB 的顺序通常为 BGR。
2. 对图像进行高斯滤波
图像高斯滤波的实现可以用两个一维高斯核分别两次加权实现,也可以通过一个二维
高斯核一次卷积实现。
1)高斯核实现
上式为离散化的一维高斯函数,确定参数就可以得到一维核向量。
上式为离散化的二维高斯函数,确定参数就可以得到二维核向量。
在求得高斯核后,要对整个核进行归一化处理。
2)图像高斯滤波
对图像进行高斯滤波,其实就是根据待滤波的像素点及其邻域点的灰度值按照一定的
参数规则进行加权平均。这样可以有效滤去理想图像中叠加的高频噪声。
通常滤波和边缘检测是矛盾的概念,抑制了噪声会使得图像边缘模糊,这会增加边缘
定位的不确定性;而如果要提高边缘检测的灵敏度,同时对噪声也提高了灵敏度。实际工
程经验表明,高斯函数确定的核可以在抗噪声干扰和边缘检测精确定位之间提供较好的折
衷方案。
3. 用一阶偏导的有限差分来计算梯度的幅值和方向