838 字
4 分钟
图像分割:Canny边缘检测
2026-06-30
无标签

Canny 边缘检测(Canny, 1986)从输入图像生成单像素宽的二值边缘图。边缘可以作为分割的边界线索——连通边缘围成的闭合区域对应物体的轮廓。

以下符号定义适用于全篇:

  • II:输入图像
  • GσG_\sigma:标准差为 σ\sigma 的高斯核
  • S=IGσS = I * G_\sigma:高斯平滑后的图像
  • Sx,SyS_x, S_y:平滑图像 SSx,yx, y 方向的梯度(用 Sobel 算子计算)
  • M(x,y)=Sx2+Sy2M(x,y) = \sqrt{S_x^2 + S_y^2}:梯度幅值图
  • Θ(x,y)=arctan(Sy/Sx)\Theta(x,y) = \arctan(S_y / S_x):梯度方向图,取值 (180,180](-180^\circ, 180^\circ]
  • Θq(x,y)\Theta_q(x,y)Θ\Theta 量化到 {0,45,90,135}\{0^\circ, 45^\circ, 90^\circ, 135^\circ\} 后的方向图
  • N(x,y)N(x,y):非极大值抑制后的候选边缘图
  • TH,TLT_H, T_L:高阈值和低阈值,TH:TL[2:1,3:1]T_H : T_L \in [2:1, 3:1]
  • E(x,y)E(x,y):最终输出的二值边缘图

步骤一:高斯平滑#

S=IGσS = I * G_\sigma

高斯卷积去除高频噪声,减小后续梯度计算对噪声的敏感度。σ\sigma 控制平滑强度,σ\sigma 越大保留的边缘越少(只保留强结构),σ\sigma 越小保留的细节越多但也包含更多噪声。典型取值范围 σ[1,2]\sigma \in [1, 2]

步骤二:计算梯度幅值与方向#

用 Sobel 算子计算 SxS_xSyS_y,逐像素得到 M(x,y)M(x,y)Θ(x,y)\Theta(x,y)

Θ\Theta 量化到四个离散方向,为 NMS 步骤的邻域比较做准备:

Θq\Theta_q角度范围比较方向
00^\circ[22.5,22.5][-22.5^\circ, 22.5^\circ][157.5,202.5][157.5^\circ, 202.5^\circ]水平(左右)
4545^\circ[22.5,67.5][22.5^\circ, 67.5^\circ][202.5,247.5][202.5^\circ, 247.5^\circ]东北-西南
9090^\circ[67.5,112.5][67.5^\circ, 112.5^\circ][247.5,292.5][247.5^\circ, 292.5^\circ]垂直(上下)
135135^\circ[112.5,157.5][112.5^\circ, 157.5^\circ][292.5,337.5][292.5^\circ, 337.5^\circ]西北-东南

步骤三:非极大值抑制(NMS)#

沿梯度方向寻找局部极大值。对每个像素 (x,y)(x,y),取 Θq(x,y)\Theta_q(x,y) 方向上的前一个和后一个邻域像素,记其幅值为 MprevM_{\text{prev}}MnextM_{\text{next}}

N(x,y)={M(x,y),M(x,y)Mprev and M(x,y)Mnext0,otherwiseN(x,y) = \begin{cases} M(x,y), & M(x,y) \geq M_{\text{prev}} \ \text{and} \ M(x,y) \geq M_{\text{next}} \\ 0, & \text{otherwise} \end{cases}

NMS 是 Canny 输出单像素宽边缘的关键:在垂直梯度方向(即沿边缘法线),只会有一个像素被保留,该像素处于局部梯度峰值位置。

步骤四:双阈值滞后跟踪#

NN 中的候选像素按幅值分为三类:

{强边缘:N(x,y)TH弱边缘:TLN(x,y)<TH非边缘:N(x,y)<TL\begin{cases} \text{强边缘:} & N(x,y) \geq T_H \\[4pt] \text{弱边缘:} & T_L \leq N(x,y) < T_H \\[4pt] \text{非边缘:} & N(x,y) < T_L \end{cases}

强边缘直接标记为边缘输出。弱边缘只有在其 8-邻域内存在至少一个强边缘像素时才被激活为边缘——这就是滞后跟踪:

E(x,y)={1,N(x,y)TH1,TLN(x,y)<TH and  强边缘在 8-邻域内0,otherwiseE(x,y) = \begin{cases} 1, & N(x,y) \geq T_H \\[4pt] 1, & T_L \leq N(x,y) < T_H \ \text{and} \ \exists \ \text{强边缘在 8-邻域内} \\[4pt] 0, & \text{otherwise} \end{cases}

滞后跟踪利用了边缘的连续性:真实边缘可能在局部出现弱梯度(表面不平整或光照不均),但这些弱梯度区域与强边缘相连,应被保留。孤立的噪声响应不与任何强边缘相连,自然被丢弃。

从边缘到分割#

Canny 输出的是二值边缘图 E(x,y)E(x,y)。要得到完整的区域分割,还需后续处理:

  • 形态学闭合:对边缘图做闭运算(膨胀+腐蚀),连接断裂的边缘段。
  • 轮廓填充:提取连通轮廓,填充封闭区域。
  • 分水岭标记:将 Canny 边缘作为分水岭输入或外部标记。

Canny 不产生闭合的连续边界,但在大多数图像上产生的边缘是分割的有效中间线索。

图像分割:Canny边缘检测
https://biscuit0613.github.io/posts/cv/cv-seg-canny/
作者
Biscuit
发布于
2026-06-30
许可协议
CC BY-NC-SA 4.0
图像分割:深度学习方法概述
图像分割:轮廓检测与分析