目录
主要目标:
主要目标
Canny算子的三个主要目标:
1. 减少噪声响应
通过最优平滑处理(高斯)来实现
2. 正确性
通过非极大值抑制(相当于峰值检测)处理来实现。非极大值抑制反悔的只是边缘数据顶脊处的那些点,而抑制其他所有点。这样可以细化边缘,输出正确位置上边缘点连成的细线。
3. 单个边缘点对于亮度变化的定位
因为并非只有一条边缘被检测到,所以要选出一个正确的边缘。
主要步骤:
1. 使用高斯平滑
高斯平滑:
用于计算模板值,注意方差和窗口大小之间的折衷.
常见的选择:
窗口大小为5x5的模板是这样的:
2. 使用Sobel算子。
Sobel是最常用的基本运算符, Prewitt中心系数加倍.
3. 使用非极大值抑制算法。
当我们用sobel算子计算出边缘之后,假设我们的边缘方向是图中黑色实线,虚线是发现方向。P(x,y)是我们要探究的边缘点,则我们通过比较M1,M2的于M(x,y)的值,也就是梯度值,就可以知道我们的P点是否需要保留,如果M(x,y)是他们三个中的极大值,就保留P点(设为255值)。
其中求一个点的梯度值和方向如下所示:
Mx是横向的梯度, My是纵向的梯度,M是点的值的长度,红色的是方向(就好像你算水平值的差异,它探究的是垂直方向上的变化)。
然后我们M1,M2的梯度值的计算方法就是下面的公式:
算出M1,M2之后,我们就能知道P是不是极大值,是否把P当做边缘点了。
4. 用滞后阈值连接边缘点。
设定两个阈值,大于上限阈值的设为白色,小于上线阈值的设为黑色。对于上限阈值周围的点,如果他在上限和下限之间并且和白色的点是连通的,就把它设为白色,不连通的就设为黑色。