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।
• halcon_segmentation family guide
• active_contours_and_level_sets — Variational और active contours, level sets — कौन-सा contour कहाँ रुकता है, और वह क्या guarantee देता है
• 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 में दिए गए हैं।
• poc_active_contours — py -3.11 examples/poc_active_contours.py
table को input के रूप में लेते हैं)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.