snake_evolve — SEGMENTATION contour op

• Data kinds: image2d × pairs → table

• Call: 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]' (implementation को सीधे call करना हो तो 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]', registry से लेना हो तो opssegmentation.get("snake_evolve"))

उपयोग

discrete snake (Kass–Witkin–Terzopoulos 1988) का semi-implicit update x_t = (A + γI)^(-1)(γ x_(t-1) − f_x) (समीकरण (19)(20))।

बंद snake (periodic boundary) के points init_points (N, 2) = [row, col], N ≥ 5। internal energy E_int = ½ Σ (α |v_(i+1) − v_i|² + β |v_(i+1) − 2v_i + v_(i−1)|²) = ½ xᵀ A x (implicit)। external force (explicit) external से चुना जाता है:

"edge" = potential P = w_line · G_σ*I + w_edge · |∇(G_σ*I)|², E_ext = −κ Σ P(v_i) (Kass के E_line और E_edge), "potential" = image को सीधे P के रूप में इस्तेमाल करें (2nd implementation को वही P देने के लिए), "gvf" = force स्वयं −κ (v, u) है (GVF; gvf में gvf_field का return दें, या gvf_mu से भीतर ही बनवाएँ), "none" = external force 0। P को spline_order order के interpolating spline (values और derivatives संगत) से points की positions पर लिया जाता है। max_px_move देने पर 1 iteration की गति max_px_move · tanh(Δ) तक सीमित होती है (skimage जैसा; proximal gradient का गुण खो जाता है)। resample_every > 0 होने पर हर k iterations पर points को arc length से समान दूरी पर फिर से रखा जाता है (concave भाग में जाते समय points के विरल होने से बचाता है; energy की monotonicity उस क्षण टूट जाती है)। points को image की सीमा [0, H−1] × [0, W−1] में clamp किया जाता है।

Returns: points (N, 2), mask (polyline के अंदर), energy / energy_internal / energy_external (हर iteration, पहला = प्रारंभिक; GVF में external force की energy परिभाषित नहीं, इसलिए total और external NaN), n_increase (उन iterations की संख्या जिनमें energy बढ़ी, GVF में None), max_increase, lipschitz (κP के Hessian matrix के spectral norm का grid पर maximum = external force के gradient के Lipschitz constant का अनुमान), gamma_ge_lipschitz (γ ≥ L हो तो descent lemma से monotone non-increase की गारंटी), radius_factor (external force 0 पर circle के 1 iteration में सिकुड़ने γ/(γ + λ_1) का closed form), history (हर record_every पर points), n_iter, converged।

उपयोग की विस्तृत guide

• halcon_segmentation family guide

पृष्ठभूमि guides (इस op के पीछे की physics और conventions)

• active_contours_and_level_sets — Variational और active contours, level sets — कौन-सा contour कहाँ रुकता है, और वह क्या guarantee देता है

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_active_contours — py -3.11 examples/poc_active_contours.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

class_ndim_norm

इसी category के (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 operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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