边缘检测算法-Canny算子

目录

         主要目标

主要步骤:

1. 使用高斯平滑

2. 使用Sobel算子。

3. 使用非极大值抑制算法。

4. 用滞后阈值连接边缘点。


主要目标

Canny算子的三个主要目标:
1. 减少噪声响应

        通过最优平滑处理(高斯)来实现

2. 正确性

        通过非极大值抑制(相当于峰值检测)处理来实现。非极大值抑制反悔的只是边缘数据顶脊处的那些点,而抑制其他所有点。这样可以细化边缘,输出正确位置上边缘点连成的细线。

3. 单个边缘点对于亮度变化的定位

        因为并非只有一条边缘被检测到,所以要选出一个正确的边缘。


主要步骤:

1. 使用高斯平滑

高斯平滑:                                        g(x,y,z)=\frac{1}{2 \pi\sigma^{2}} e^{\frac{-(x^{2}+y^{2})}{2 \sigma^{2}}}

用于计算模板值,注意方差和窗口大小之间的折衷.

常见的选择:

窗口大小为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. 用滞后阈值连接边缘点。

设定两个阈值,大于上限阈值的设为白色,小于上线阈值的设为黑色。对于上限阈值周围的点,如果他在上限和下限之间并且和白色的点是连通的,就把它设为白色,不连通的就设为黑色。

猜你喜欢

转载自blog.csdn.net/qq_39696563/article/details/125729198