848 字
4 分钟
图像分割:水平集与快速行进法
2026-06-30
无标签

水平集(Level Set)方法由 Osher 和 Sethian(1988)提出,将曲线演化问题嵌入到高维函数的零水平集中。快速行进法(Fast Marching Method, FMM)是水平集的一个特化,专用于描述曲线始终沿法线方向单向传播的情形。

水平集的思想#

显式地跟踪一条轮廓曲线 C(p,t)C(p,t) 需要处理拓扑变化(分裂、合并)——曲线在演化过程中可能从一条断成两条,或者两条合成一条,显式表达处理起来非常麻烦。

水平集将曲线隐式地表示为一个更高维函数 ϕ(x,y,t)\phi(x,y,t) 的零水平集:

C(t)={(x,y)ϕ(x,y,t)=0}C(t) = \{(x,y) \mid \phi(x,y,t) = 0\}

ϕ\phi 通常初始化为符号距离函数:曲线内部的点 ϕ<0\phi < 0,外部的点 ϕ>0\phi > 0,曲线上的点 ϕ=0\phi = 0。曲线演化转化为 ϕ\phi 随时间的变化,而 ϕ\phi 在每一步都是单值函数,拓扑变化自动处理。

Eikonal 方程与快速行进法#

当曲线始终沿法线方向以速度 F>0F > 0 向外传播时(单向传播,不回流),到达时间 T(x,y)T(x,y) 满足 Eikonal 方程:

T(x,y)F(x,y)=1|\nabla T(x,y)| \cdot F(x,y) = 1

其中 T(x,y)T(x,y) 表示波前从初始种子点传播到像素 (x,y)(x,y) 所需的时间,F(x,y)F(x,y) 是传播速度。若 FF 处处为 1,则 TT 就是距离变换——这就是 Eikonal 方程与距离变换的关系。

FMM 的核心思路是:用类似 Dijkstra 算法的思想,按照到达时间从小到大的顺序逐像素更新 TT 值。每个像素维护三种状态:

  • 已知(Known)TT 值已经确定,不再更新。
  • 窄带(Narrow Band / Trial)TT 值已由邻居计算得出但尚未确定,是当前传播的前沿。
  • 未到(Far):尚未被波及。

算法循环从窄带中取出 TT 值最小的像素,将其标记为 Known,用 Eikonal 方程更新它的四个邻域像素。直到所有像素都被标记为 Known 或达到停止条件。

离散 Eikonal 方程的求解(二维,取 max\max 形式的 Godunov 差分):

[max(DxT,Dx+T,0)2+max(DyT,Dy+T,0)2]1/2=1Fij\left[\max(D_x^{-} T, -D_x^{+} T, 0)^2 + \max(D_y^{-} T, -D_y^{+} T, 0)^2\right]^{1/2} = \frac{1}{F_{ij}}

其中 Dx,Dx+D_x^{-}, D_x^{+} 分别是向后和向前差分。这个公式确保了到达时间解是物理合理的(满足因果关系),使得波前不会”倒流”。

速度函数设计#

F(x,y)F(x,y) 控制传播行为,决定了分割的边界最终停在何处。两种经典设计:

基于边缘的速度:用图像梯度幅值来减速。梯度大的地方可能是物体边界,波前应该慢下来:

F(x,y)=11+GσI(x,y)F(x,y) = \frac{1}{1 + |\nabla G_\sigma * I(x,y)|}

当图像梯度大时,FF 接近 0,传播停止;平坦区域梯度小,FF 接近 1,传播迅速。GσG_\sigma 是高斯平滑核。

基于区域的速度:利用统计信息(强度均值、方差)驱动模型,适应弱边界场景。

分割流程#

  1. 在目标内部或边缘附近指定种子点(初始零水平集)。
  2. 计算边缘指示函数 g(x,y)g(x,y) 或自定义速度图。
  3. 运行 FMM,逐像素计算到达时间 T(x,y)T(x,y),传播到整个图像。
  4. 设定到达时间阈值 TmaxT_{\max}(或最大迭代步数),T(x,y)TmaxT(x,y) \leq T_{\max} 的区域作为分割结果。

FMM 的计算复杂度为 O(NlogN)O(N \log N)NN 为像素总数,其中 log\log 因子来自窄带队列的堆维护。

图像分割:水平集与快速行进法
https://biscuit0613.github.io/posts/cv/cv-seg-fastmarching/
作者
Biscuit
发布于
2026-06-30
许可协议
CC BY-NC-SA 4.0
图像分割:轮廓检测与分析
图像分割:阈值分割与Otsu大津法