一.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. 用一阶偏导的有限差分来计算梯度的幅值和方向 关于图像灰度值得梯度可使用一阶有限差分来进行近似,这样就可以得图像在 x和 y 方向上偏导数的两个矩阵。常用的梯度算子有如下几种: 1)Roberts 算子 上式为其 x 和 y 方向偏导数计算模板,可用数学公式表达其每个点的梯度幅值为: 2)Sobel 算子 上式三个矩阵分别为该算子的 x 向卷积模板、y 向卷积模板以与待处理点的邻域点标记矩阵,据此可用数学公式表达其每个点的梯度幅值为: 3)Prewitt 算子 和 Sobel 算子原理一样,在此仅给出其卷积模板。 4)Canny 算法所采纳的方法 在这里实现的 Canny 算法中所采纳的卷积算子比较简单,表达如下: 其 x 向、y 向的一阶偏导数矩阵,梯度幅值以与梯度方向的数学表达式为:求出这几个矩阵后,就可以进行下一步的检测过程。4. 对梯度幅值进行非极大...