Canny边缘检测
基本步骤
1. 对图像进行高斯滤波
2. 在1的基础上对图像分别求x方向和y方向的一阶偏导,并根据公式
求出图像中每个像素像素点的梯度大小和梯度方向。
3. 使用非极大值抑制来为细化边缘
如果简单的对梯度大小设置临界值以筛选边缘,得到的边缘会相对较粗。非极大值抑制是一种边缘细化算法,能帮助保留局部最大梯度而抑制所有其他梯度值,这意味着只保留了梯度变化中最锐利的位置。
a. 比较当前点的梯度大小和位于其梯度正负方向的两个相邻点的梯度大小。
b. 如果大于梯度正负方向两个相邻点的梯度大小,则该点为局部极值,保留;否则非极大值,置零;
如上图,在当前点P梯度方向上的8值领域内的相邻点P1和P2可能实际上并不存在,这时候我们需要通过插值,来进行比较。即通过E,NE来插值得到P1的梯度大小,通过W,SW来插值得到P2的梯度大小来和P进行比较。插值公式为:
4. 使用双阙值检测和连接边缘
Canny中减少假边缘数量的方法是采用双阙值法。选择两个阙值,根据高阙值筛选出一个边缘图像,这样的一个图像中含有很少的假边缘,但是由于阙值很高,产生的图像边缘可能不闭合,为解决这样一个问题引入另外一个低阙值 。在高阙值图像中通过当前点梯度方向求出当前点所在边缘的切线方向,通过切线方向将边缘连接成轮廓,当到达轮廓的端点时,该算法会在轮廓的8邻域点中寻找满足低阙值的点,再根据此点收集新的边缘,直到整个图像边缘闭合。对于小于低阙值的点视为非边缘点或噪声扔掉。
Canny中高斯核的选择
高斯分布的 反映了所提取特征的的尺度。对于粗尺度的特征,选择较大的高斯核;对于细尺度的特征,选择较小的高斯核。
Canny中梯度算子的选择
梯度算子有很多种选择,Roberts,Sobel等等。在这里简单介绍一下Sobel算子,Sobel算子依据公式:
卷积核为: