morph_chan_vese — SEGMENTATION contour op

• 数据种类:image2d × mask → table

• 调用: import fullseye as fs; fs.ledger.morph_chan_vese(image, init, *, n_iter: 'int' = 100, smoothing: 'int' = 1, lambda1: 'float' = 1.0, lambda2: 'float' = 1.0, phase: 'int' = 0, record_every: 'int' = 0) -> 'Dict[str, object]'(要直接调用实现,import segcontour; segcontour.morph_chan_vese(image, init, *, n_iter: 'int' = 100, smoothing: 'int' = 1, lambda1: 'float' = 1.0, lambda2: 'float' = 1.0, phase: 'int' = 0, record_every: 'int' = 0) -> 'Dict[str, object]';从台账取用则 opssegmentation.get("morph_chan_vese"))

用法

形态学 Chan–Vese(Márquez-Neila–Baumela–Álvarez 2014 的 MorphACWE)。1 次迭代 = 数据步 + 平滑步(morph_chan_vese)。

数据段: c1 = 内侧平均,c0 = 外侧平均,aux = |∇u|(λ1 (I − c1)² − λ2 (I − c0)²),把 aux < 0 的像素放到内侧, aux > 0 的放到外侧(|∇u| ≠ 0 = 只有边界附近会动)。平滑段: 曲率算子(SI∘IS 与 IS∘SI 交替)执行 smoothing 次。phase = 最先使用的算子(0 = SI∘IS)。skimage 的实现把交替的相位保存在模块的全局状态中,所以同样的输入也可能因上一次调用而结果不同 —— 这里每次调用都从 phase 开始(确定性)。拟合能量 E_fit = λ1 Σ_in (I − c1)² + λ2 Σ_out (I − c0)² 在各段前后记录。门禁(严格): 固定 c 时 E_fit 是逐像素的和,所以数据段中翻转的像素都会使 E_fit 下降(或相等), 之后把 c 更新为平均值还会进一步下降 ⇒ 数据段前后 E_fit 单调不增(n_data_increase = 0)。平滑段可能使 E_fit 上升(用 fit_after_smooth 实测)。

返回值: mask、fit_before_data / fit_after_data / fit_after_smooth(每次迭代)、n_data_increase、history、n_iter、n_changed(每次迭代变化的像素数)。

详细使用指南

• 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)

snake_evolve · gvf_field · chan_vese_energy · chan_vese_evolve · 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.