一、算法演进与核心思想
1.1 边缘检测的意义
边缘是图像中灰度发生剧烈变化的区域边界,承载着物体形状、纹理等重要信息。在计算机视觉领域,精确的边缘检测是目标识别、三维重建等任务的基础。
1.2 Canny算法三大准则
- 低错误率:最小化漏检和误检
- 高定位精度:检测到的边缘应接近真实边缘
- 单响应:单个边缘只产生一个响应
二、数学基础深入剖析
2.1 高斯滤波数学推导
二维高斯函数定义:
G ( x , y ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 G(x,y) = \frac{1}{2\pi\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}} G(x,y)=2πσ21e−2σ2x2+y2
离散化处理(5x5核示例):
1 | 4 | 6 | 4 | 1 |
---|---|---|---|---|
4 | 16 | 24 | 16 | 4 |
6 | 24 | 36 | 24 | 6 |
4 | 16 | 24 | 16 | 4 |
1 | 4 | 6 | 4 | 1 |
归一化系数:1/256
参数选择原则:
- σ越大,平滑效果越强
- 核尺寸通常取6σ+1的奇数值
2.2 梯度计算原理
图像函数I(x,y)的梯度向量:
∇ I = [ ∂ I ∂ x ∂ I ∂ y ] \nabla I = \begin{bmatrix} \frac{\partial I}{\partial x} \\ \frac{\partial I}{\partial y} \end{bmatrix} ∇I=[∂x∂I∂y∂I]
梯度幅值:
∣ ∇ I ∣ = ( ∂ I ∂ x ) 2 + ( ∂ I ∂ y ) 2 |\nabla I| = \sqrt{(\frac{\partial I}{\partial x})^2 + (\frac{\partial I}{\partial y})^2} ∣∇I∣=(∂x∂I)2+(∂y∂I)2
梯度方向:
θ = arctan ( ∂ I / ∂ y ∂ I / ∂ x ) \theta = \arctan(\frac{\partial I/\partial y}{\partial I/\partial x}) θ=arctan(∂I/∂x∂I/∂y)
2.3 非极大值抑制数学本质
设当前像素梯度方向为θ,需比较沿梯度方向的两个相邻像素
插值计算相邻点梯度值:
{ d t e m p 1 = ( 1 − tan θ ) × M ( x + 1 , y ) + tan θ × M ( x + 1 , y − 1 ) d t e m p 2 = ( 1 − tan θ ) × M ( x − 1 , y ) + tan θ × M ( x − 1 , y + 1 ) \begin{cases} d_{temp1} = (1-\tan\theta) \times M(x+1,y) + \tan\theta \times M(x+1,y-1) \\ d_{temp2} = (1-\tan\theta) \times M(x-1,y) + \tan\theta \times M(x-1,y+1) \end{cases} { dtemp1=(1−tanθ