边缘检测
Edge Detection
边缘检测是计算机视觉和图像处理中一项基础且关键的任务。它旨在识别图像中像素强度发生显著变化的区域,这些区域通常对应着物体的轮廓、纹理、颜色或亮度边界。边缘是图像中重要的结构信息,对于图像理解、特征提取和物体识别至关重要。
核心思想:寻找像素变化
边缘本质上是图像局部区域像素值不连续的体现。边缘检测算法通过计算图像的梯度 (Gradient) 来寻找这些不连续点。梯度表示像素强度变化的速度和方向,梯度幅值越大,表示该点越可能是边缘。
常见边缘检测算子
1. Sobel 算子
- 原理: Sobel算子是一种基于一阶导数的边缘检测算子。它通过两个
的卷积核分别计算图像在水平方向 ( ) 和垂直方向 ( ) 的近似梯度。 - 卷积核:
- 梯度幅值:
- 梯度方向:
- 特点: 简单高效,对噪声有一定的平滑作用。
2. Prewitt 算子
- 原理: 与Sobel算子类似,也是基于一阶导数,但其卷积核的权重分布略有不同。
- 卷积核:
3. Roberts 算子
- 原理: 最简单的一阶导数算子,使用
的卷积核,计算对角线方向的梯度。 - 卷积核:
- 特点: 对噪声敏感,边缘定位精度不高。
4. Laplacian 算子
- 原理: 基于二阶导数的边缘检测算子。它通过检测图像的二阶导数过零点来寻找边缘。二阶导数在边缘处会发生符号变化。
- 卷积核:
- 特点: 对噪声非常敏感,容易产生双边缘。
5. Canny 边缘检测
Canny边缘检测是目前最常用、效果最好的边缘检测算法之一,它是一个多阶段的优化过程,旨在实现低错误率、高定位精度和单边缘响应。
- 1. 高斯滤波: 使用高斯滤波器平滑图像,去除噪声,防止噪声被误识别为边缘。
- 2. 计算梯度幅值和方向: 使用Sobel或Prewitt算子计算图像每个像素点的梯度幅值和方向。
- 3. 非极大值抑制 (Non-Maximum Suppression): 沿着梯度方向,抑制非最大值的像素点。这有助于将模糊的边缘细化为单像素宽的边缘。
- 4. 双阈值检测 (Double Thresholding):
- 设置两个阈值:高阈值
和低阈值 。 - 如果像素点的梯度幅值大于
,则被认为是强边缘点。 - 如果像素点的梯度幅值介于
和 之间,则被认为是弱边缘点。 - 如果像素点的梯度幅值小于
,则被抑制。
- 设置两个阈值:高阈值
- 5. 边缘连接 (Edge Tracking by Hysteresis): 通过分析强边缘点和弱边缘点之间的连接性来确定最终的边缘。只有与强边缘点相连的弱边缘点才会被保留,从而避免将噪声点误识别为边缘。