03 边缘检测(Edge Detection)
03 边缘检测(Edge Detection)
03 边缘检测(Edge Detection)
一、核心思想:边缘检测 = 卷积运算
边缘检测的本质是通过卷积核(filter / kernel) 对图像进行滑动窗口操作,突出图像中亮度发生剧烈变化的位置——即“边缘”。
- 图像可视为二维矩阵 $I \in \mathbb{R}^{H \times W}$。
- 卷积核为小尺寸矩阵(如 $3 \times 3$),记作 $K \in \mathbb{R}^{k \times k}$。
卷积输出(特征图)为:
\[(I * K)_{i,j} = \sum_{m=0}^{k-1} \sum_{n=0}^{k-1} I_{i+m, j+n} \cdot K_{m,n}\]
注:此处为“有效卷积”(valid convolution),不考虑 padding。
二、垂直与水平边缘检测
1. 垂直边缘检测器(Vertical Edge Detector)
典型卷积核:
\[K_{\text{vert}} = \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \end{bmatrix}\]- 作用:检测图像中从左到右由亮变暗的垂直边缘。
- 若结果为正(如 +30),表示左侧亮、右侧暗(正边);
- 若结果为负(如 -30),表示左侧暗、右侧亮(负边)。
✅ 正负号区分了明暗过渡方向。
若不关心方向,可取绝对值:
\[|I * K_{\text{vert}}|\]2. 水平边缘检测器(Horizontal Edge Detector)
典型卷积核:
\[K_{\text{horiz}} = \begin{bmatrix} 1 & 1 & 1 \\ 0 & 0 & 0 \\ -1 & -1 & -1 \end{bmatrix}\]- 作用:检测从上到下由亮变暗的水平边缘。
- 正响应:上亮下暗;负响应:上暗下亮。
三、经典边缘检测算子(Hand-crafted Filters)
1. Sobel 算子(Sobel Filter)
增强中心行/列权重,提升抗噪能力:
垂直 Sobel:
\[K_{\text{Sobel, vert}} = \begin{bmatrix} 1 & 0 & -1 \\ 2 & 0 & -2 \\ 1 & 0 & -1 \end{bmatrix}\]水平 Sobel:
\[K_{\text{Sobel, horiz}} = \begin{bmatrix} 1 & 2 & 1 \\ 0 & 0 & 0 \\ -1 & -2 & -1 \end{bmatrix}\]
✅ 中心加权 → 对噪声更鲁棒。
2. Scharr 算子(Scharr Filter)
比 Sobel 更精确地逼近梯度导数:
垂直 Scharr:
\[K_{\text{Scharr, vert}} = \begin{bmatrix} 3 & 0 & -3 \\ 10 & 0 & -10 \\ 3 & 0 & -3 \end{bmatrix}\]水平 Scharr 可通过对转获得。
✅ 在小尺度下梯度估计更准确。
四、从手工设计到可学习滤波器(Learnable Filters)
关键思想:
不再固定卷积核数值,而是将其视为可训练参数!
将 $3 \times 3$ 卷积核中的 9 个元素视为可学习参数:
\[K = \begin{bmatrix} w_1 & w_2 & w_3 \\ w_4 & w_5 & w_6 \\ w_7 & w_8 & w_9 \end{bmatrix} \quad \text{其中 } w_i \text{ 通过反向传播优化}\]在深度学习中,这些参数在训练过程中自动调整,以提取对任务最有用的特征(如边缘、纹理、角点等)。
优势:
- 可检测任意角度的边缘(不仅是 0°、90°,还包括 45°、73° 等);
- 可学习非传统模式的特征(甚至无明确物理解释的滤波器);
- 自适应于具体任务(分类、检测、分割等)。
💡 卷积神经网络(CNN)的第一层通常学习到的就是类似 Gabor 或边缘检测器的低级视觉特征。
五、图像尺寸与边缘响应的关系
- 在小图像(如 $6 \times 6$)中,边缘区域占比大,中间可能出现“混合响应”(如 +10 表示部分正边 + 部分负边抵消)。
- 在大图像(如 $1000 \times 1000$)中,边缘区域占比极小,中间过渡带影响可忽略,边缘响应更清晰。
六、总结要点(Key Takeaways)
| 概念 | 说明 |
|---|---|
| 卷积 = 边缘检测基础 | 所有边缘检测本质都是卷积运算 |
| 正/负响应 | 区分明暗过渡方向(亮→暗 vs 暗→亮) |
| 垂直 vs 水平滤波器 | 结构互为转置,分别检测不同方向边缘 |
| Sobel / Scharr | 经典手工设计算子,具抗噪性或高精度 |
| 可学习滤波器 | 将卷积核参数化,通过反向传播自动优化 |
| CNN 的第一层 | 通常自动学习出边缘、条纹等低级特征 |
七、后续内容预告
接下来将学习:
- Padding(填充):控制输出尺寸,保留边界信息;
- Stride(步长):控制卷积滑动步幅;
- 这些是构建卷积神经网络(CNN) 的基础模块。
📌 学习建议:动手实现一个简单的卷积函数,用上述滤波器对灰度图做边缘检测,观察正负响应与图像结构的关系。再尝试用 PyTorch/TensorFlow 定义一个可学习的 $3\times3$ 卷积层,可视化其学到的核——你会发现它很像 Sobel 或 Gabor 滤波器!
本文由作者按照 CC BY 4.0 进行授权