contour op• Data kinds: image2d × mask → table
• Call: 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]' (to call the implementation directly, 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]'; from the registry, opssegmentation.get("morph_chan_vese"))
Morphological Chan–Vese (MorphACWE of Márquez-Neila–Baumela–Álvarez 2014). One iteration = data step + smoothing step (morph_chan_vese).
Data stage: c1 = inside mean, c0 = outside mean, aux = |∇u|(λ1 (I − c1)² − λ2 (I − c0)²); pixels with aux < 0 go inside, aux > 0 outside (|∇u| ≠ 0 = only pixels near the boundary move). Smoothing stage: the curvature operator (alternating SI∘IS and IS∘SI) smoothing times. phase = the operator used first (0 = SI∘IS). skimage's implementation keeps the alternating phase in module-global state, so the same input can give a different result depending on the previous call — here every call starts from phase (deterministic). The fitting energy E_fit = λ1 Σ_in (I − c1)² + λ2 Σ_out (I − c0)² is recorded before and after each stage. Gate (exact): with c fixed, E_fit is a per-pixel sum, so every pixel flipped in the data stage lowers E_fit (or leaves it equal), and updating c to the means afterwards lowers it further ⇒ E_fit is monotonically non-increasing across the data stage (n_data_increase = 0). The smoothing stage can raise E_fit (measured in fit_after_smooth).
Returns: mask, fit_before_data / fit_after_data / fit_after_smooth (per iteration), n_data_increase, history, n_iter, n_changed (number of pixels changed per iteration).
• halcon_segmentation family guide
• active_contours_and_level_sets — Variational and active contours, level sets — which contour stops where, and what it guarantees
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• The canonical algorithm (author, year) and its uses are named in the family usage guide above.
• poc_active_contours — py -3.11 examples/poc_active_contours.py
table as input)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 operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.