snake_evolve — SEGMENTATION contour op

• 数据种类:image2d × pairs → table

• 调用: import fullseye as fs; fs.ledger.snake_evolve(image, init_points, *, alpha: 'float' = 0.1, beta: 'float' = 0.1, gamma: 'float' = 1.0, external: 'str' = 'edge', w_line: 'float' = 0.0, w_edge: 'float' = 1.0, sigma: 'float' = 1.0, kappa: 'float' = 1.0, gvf=None, gvf_mu: 'float' = 0.2, max_px_move: 'Optional[float]' = None, n_iter: 'int' = 300, spline_order: 'int' = 3, tol: 'float' = 0.0, resample_every: 'int' = 0, record_every: 'int' = 0) -> 'Dict[str, object]'(要直接调用实现,import segcontour; segcontour.snake_evolve(image, init_points, *, alpha: 'float' = 0.1, beta: 'float' = 0.1, gamma: 'float' = 1.0, external: 'str' = 'edge', w_line: 'float' = 0.0, w_edge: 'float' = 1.0, sigma: 'float' = 1.0, kappa: 'float' = 1.0, gvf=None, gvf_mu: 'float' = 0.2, max_px_move: 'Optional[float]' = None, n_iter: 'int' = 300, spline_order: 'int' = 3, tol: 'float' = 0.0, resample_every: 'int' = 0, record_every: 'int' = 0) -> 'Dict[str, object]';从台账取用则 opssegmentation.get("snake_evolve"))

用法

离散 snake(Kass–Witkin–Terzopoulos 1988)的半隐式更新 x_t = (A + γI)^(-1)(γ x_(t-1) − f_x)(式 (19)(20))(snake_evolve)。

闭合 snake(周期边界)的点 init_points(N, 2)= [row, col],N ≥ 5。内部能量 E_int = ½ Σ (α |v_(i+1) − v_i|² + β |v_(i+1) − 2v_i + v_(i−1)|²) = ½ xᵀ A x(隐式)。外力(显式)由 external 选择:

"edge" = 势 P = w_line · G_σ*I + w_edge · |∇(G_σ*I)|²,E_ext = −κ Σ P(v_i)(Kass 的 E_line 与 E_edge), "potential" = 把 image 直接作为 P 使用(为了传入与第 2 实现(独立实现)相同的 P), "gvf" = 力本身为 −κ (v, u)(GVF,把 gvf_field 的返回传给 gvf,或用 gvf_mu 在内部构造), "none" = 外力 0。P 用 spline_order 次的插值样条(值与导数一致)取到点的位置上。给出 max_px_move 时把 1 次迭代的移动限制为 max_px_move · tanh(Δ)(与 skimage 相同。失去近端梯度的性质)。resample_every > 0 时每 k 次迭代按弧长重新等间隔布点(防止进入凹部时点变稀疏。能量的单调性在那一刻中断)。点被截断到图像范围 [0, H−1] × [0, W−1] 内。

返回值: points(N, 2)、mask(折线内部)、energy / energy_internal / energy_external(每次迭代, 开头 = 初始。GVF 中外力的能量没有定义,所以 total 与 external 为 NaN)、n_increase(能量增加的迭代次数,GVF 时为 None)、max_increase、lipschitz(κP 的黑塞矩阵的谱范数在网格上的最大值 = 外力梯度的 Lipschitz 常数的估计)、gamma_ge_lipschitz(γ ≥ L 时由下降引理保证单调不增)、radius_factor(外力 0 时圆在 1 次迭代中收缩 γ/(γ + λ_1) 的闭式)、history(每 record_every 次的点)、n_iter、converged。

详细使用指南

• halcon_segmentation 族使用指南

背景知识指南(该算子背后的物理与约定)

• active_contours_and_level_sets — 变分、主动轮廓与水平集 —— 哪种轮廓停在哪里、保证什么

参考(示例数据、文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

• 算法的正典(作者、年份)与用途见上面的族使用指南。

可运行的示例(实际调用该算子并已验证的样例)

• poc_active_contours — py -3.11 examples/poc_active_contours.py

类型可衔接的下一个算子(可接受 table 作为输入)

class_ndim_norm

同类别(contour)

gvf_field · chan_vese_energy · chan_vese_evolve · morph_chan_vese · morph_geodesic_ac · edge_stop_g · level_set_reinit · drle_evolve


*Provenance: segcontour.py — SEGMENTATION 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.