1、边缘的特征
先看一张实物图和边缘图

边缘是图片中灰度变化最快的地方。下图清楚地显示了最简单的一种情况。既然找变化最快的地方,可以通过导数来求解边缘

2、图片的导数
一张数字图片F[x,y], 其x方向导数可定义为:


3、图片的梯度
3.1 图片的梯度相关定义

几种常见的图片的梯度

边缘的灰度用图片梯度的幅值表示,

图片梯度的方向:

3.2 图片梯度实例
下图显示了原图,x方向导数的图片,y方向导数的图片,和幅值的图片。

4、图片虚化后的梯度
图片实际上包含有很多噪音,噪音干扰求图片的梯度,如下图所示:

f(x)为红线处的灰度值,对其进行求导,充满干扰。

为了减少噪音的干扰,可使用高斯高斯滤波器过滤掉图片噪音,然后再求图片的梯度。

图片的求导可以用卷积运算实现,图片的卷积运算又满足交换律和结合律,所以

下图展示了其计算过程:

5、Sobel 算子
Sobel算子近视表示高斯滤波器的1阶导数,Sobel算子的滤波器如下图所示:

前面的1/8是一个经验值,为了得到合适的梯度的幅值
下方图片展示了Sobel算子的效果:
原图

x方向导数

y方向导数

幅值


6、LoG算子
除了使用高斯滤波器的一阶导数求边缘,还可以使用其二阶导数求边缘,边缘值刚好位于二阶导数的零值。如下图所示:

二维高斯函数的二阶导数如下图所示:

Laplacian 算子

LoG (Laplacian of Gaussian) 算子近似表示高斯滤波器的二阶导数。LoG算子如下图:

7、Canny 边缘检测
7.1Canny 边缘检测的过程
- 用高斯的梯度对图片滤波
- 求出梯度的幅值和方向
- 非极大值抑制(Non-maximum suppression)
- 设定阈值并连接
7.2 非极大值抑制(Non-maximum suppression)
检查一个点沿着该点的梯度方向是否为局部最大值,如果是保留,如果不是抑制.
在Canny 的论文中,梯度方向只有4个,0°,45°,90°,135°,但是实际上,梯度方向有很多种,不仅仅只有四种,
可阅读此博客:Canny算子中的非极大值抑制
非极大值抑制处理之前

非极大值抑制处理之后

7.3 设定阈值并连接
- 设置高低两种阈值
- 梯度幅值大于高阈值的视为强边缘
- 梯度幅值小于低阈值的视为噪声
- 位于高低阈值之间的视为弱边缘

7.4 Canny 边缘检测实例

7.5 Canny边缘检测的问题
不同高斯的  值,会影响到边缘检测,如下图所示。
 值,会影响到边缘检测,如下图所示。

较大的  能检测到较粗的边缘,较小的 
 还能检测到较细的边缘。
当使用不同的滤波器时,一节导数的最大值(边缘点)会出现偏移,甚至重合。

8、好的边缘检测算法的标准
- 能够发现所有的边缘
- 不受噪音影响
- 检测到的边缘点离实际点越近越好
- 对于每一个实际的边缘点,算法只返回一个点