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