chan_vese_evolve — SEGMENTATION contour op

• Data kinds: image2d × mask → table

• Call: import fullseye as fs; fs.ledger.chan_vese_evolve(image, init, *, method: 'str' = 'convex', mu: 'float' = 0.1, nu: 'float' = 0.0, lambda1: 'float' = 1.0, lambda2: 'float' = 1.0, eps: 'float' = 1.0, eta: 'float' = 0.1, dt: 'float' = 5.0, n_iter: 'int' = 200, n_inner: 'int' = 200, tol: 'float' = 0.0, record_every: 'int' = 0) -> 'Dict[str, object]' (implementation को सीधे call करना हो तो import segcontour; segcontour.chan_vese_evolve(image, init, *, method: 'str' = 'convex', mu: 'float' = 0.1, nu: 'float' = 0.0, lambda1: 'float' = 1.0, lambda2: 'float' = 1.0, eps: 'float' = 1.0, eta: 'float' = 0.1, dt: 'float' = 5.0, n_iter: 'int' = 200, n_inner: 'int' = 200, tol: 'float' = 0.0, record_every: 'int' = 0) -> 'Dict[str, object]', registry से लेना हो तो opssegmentation.get("chan_vese_evolve"))

उपयोग

Chan–Vese 2001 की 2-phase energy को न्यूनतम करता है (default में convex relaxation का alternating minimisation, level set का gradient descent भी चुना जा सकता है)।

2 तरीके:

method="convex" (default) = c का update (अंदर-बाहर का mean = optimal) और c को स्थिर रखकर partition का update, इनका बारी-बारी minimization। partition का update Chan–Esedoglu–Nikolova 2006 के convex relaxation min_(u∈[0,1]) μ TV(u) + Σ (ν + λ1 (I − c1)² − λ2 (I − c2)²) u को Chambolle–Pock से n_inner बार हल करके 1/2 पर 2-valued बनाता है (TV anisotropic forward differences है = 2-valued होने पर 4-neighbourhood की दरारों की संख्या = chan_vese_energy का perimeter_sharp। discrete coarea formula से, relaxation के minimiser को किसी भी threshold पर काटने से 2-valued minimiser मिलता है)। sharp energy (energy = chan_vese_energy का energy_sharp) बारी-बारी minimization में monotonically non-increasing है — यदि भीतरी solver की त्रुटि से इसके बढ़ने की आशंका हो तो update छोड़कर रुक जाता है (n_guard, 0 होना चाहिए)। method="level_set" = smooth energy (chan_vese_energy का energy) को discrete energy के exact gradient से नीचे ले जाता है।

Gradient = μ(δ_ε'(φ) |Dφ|_η + Dᵀ(δ_ε(φ) Dφ / |Dφ|_η)) − δ_ε(φ)(ν + λ1 (I − c1)² − λ2 (I − c2)²) (D = forward differences, Dᵀ = उसका adjoint। continuum limit में यह −δ_ε κ μ term बन जाता है और paper के equation (9) के दाएँ पक्ष के उलटे sign से मेल खाता है)। c1, c2 हर φ के लिए optimal हैं, इसलिए envelope theorem से gradient में नहीं आते। step dt से शुरू होता है और Armijo condition E_new ≤ E − 10⁻⁴ dt |∇E|² पूरी होने तक आधा किया जाता है (पूरी होने पर अगला iteration 1.1 गुना, ऊपरी सीमा dt)। इसलिए energy monotonically non-increasing है (n_increase 0 होना चाहिए, पीछे हटने की संख्या n_rejected है)। measured सीमा: exact gradient interface को खिसकाने के बजाय |φ| को फुलाकर H_ε को sharp करने की दिशा में भी घटता है, इसलिए दूर के pixels (δ_ε छोटा) व्यवहार में नहीं हिलते और यह local solution पर रुक जाता है (ellipse + noise σ = 0.2 पर 300 iterations के बाद भी लगभग 800 pixels ग़लत, convex में कुछ दर्जन pixels)। paper के reinitialisation को "वैकल्पिक" बताने के कारणों में से 1 यही है। init = bool mask (अंदर) या φ (अंदर φ < 0)।

Returns: mask (φ < 0), phi (convex में 2-valued signed distance), energy (पहला = प्रारंभिक), c1 / c2, n_rejected, n_guard, n_increase, duality_gap (convex के भीतरी solver का primal-dual gap, हर बाहरी iteration पर), history (हर record_every पर mask), n_iter, converged, method।

उपयोग की विस्तृत 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)

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