contour op• Datenarten: image2d × mask → table
• Aufruf: 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]' (die Implementierung direkt: 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]'; aus dem Register: opssegmentation.get("chan_vese_evolve"))
Minimiert die zweiphasige Chan–Vese-2001-Energie (standardmäßig alternierende Minimierung der konvexen Relaxation; der Level-Set-Gradientenabstieg ist wählbar) (chan_vese_evolve).
2 Verfahren:
method="convex" (Standard) = alternierende Minimierung aus der Aktualisierung von c (Mittel innen/außen = optimal) und der Aktualisierung der Partition bei festem c. Die Partitionsaktualisierung löst die konvexe Relaxation min_(u∈[0,1]) μ TV(u) + Σ (ν + λ1 (I − c1)² − λ2 (I − c2)²) u von Chan–Esedoglu–Nikolova 2006 mit Chambolle–Pock in n_inner Iterationen und macht bei 1/2 2-wertig (TV mit anisotropen Vorwärtsdifferenzen = bei 2-wertigem Bild die Anzahl der Risse der 4-Nachbarschaft = perimeter_sharp von chan_vese_energy. Nach der diskreten Coarea-Formel ergibt das Schneiden des Minimierers der Relaxation bei jedem Schwellwert einen 2-wertigen Minimierer). Die scharfe Energie (energy = energy_sharp von chan_vese_energy) ist unter der alternierenden Minimierung monoton nicht wachsend — droht sie durch einen Fehler des inneren Lösers zu steigen, wird die Aktualisierung verworfen und abgebrochen (n_guard, sollte 0 sein). method="level_set" = steigt die glatte Energie (energy von chan_vese_energy) entlang des exakten Gradienten der diskreten Energie ab.
Gradient = μ(δ_ε'(φ) |Dφ|_η + Dᵀ(δ_ε(φ) Dφ / |Dφ|_η)) − δ_ε(φ)(ν + λ1 (I − c1)² − λ2 (I − c2)²) (D = Vorwärtsdifferenzen, Dᵀ = ihr Adjungiertes. Im Kontinuumslimes wird daraus der Term −δ_ε κ μ, übereinstimmend mit der vorzeichenumgekehrten rechten Seite von Gl. (9) des Papers). c1, c2 sind für jedes φ optimal, gehen also nach dem Envelope-Theorem nicht in den Gradienten ein. Die Schrittweite beginnt bei dt und wird halbiert, bis die Armijo-Bedingung E_new ≤ E − 10⁻⁴ dt |∇E|² erfüllt ist (danach in der nächsten Iteration das 1.1-Fache, höchstens dt). Daher ist die Energie monoton nicht wachsend (n_increase sollte 0 sein, die Zahl der Rückschritte ist n_rejected). Gemessene Grenze: Der exakte Gradient sinkt auch, indem er |φ| aufbläht und H_ε schärft, statt die Grenzfläche zu verschieben, daher bewegen sich entfernte Pixel (kleines δ_ε) praktisch nicht und es bleibt in einer lokalen Lösung stehen (Ellipse + Rauschen σ = 0.2: nach 300 Iterationen noch etwa 800 Pixel falsch, convex:
einige Dutzend Pixel). Das ist 1 der Gründe, warum das Paper die Reinitialisierung als "optional" aufführt. init = bool-Maske (innen) oder φ (innen φ < 0).
Rückgabewert: mask (φ < 0), phi (bei convex der 2-wertige vorzeichenbehaftete Abstand), energy (erster Eintrag = Anfang), c1 / c2, n_rejected, n_guard, n_increase, duality_gap (primal-duale Lücke des inneren Lösers von convex, je äußerer Iteration), history (Masken alle record_every), n_iter, converged, method.
• Leitfaden zur Familie halcon_segmentation
• active_contours_and_level_sets — Variationelle und aktive Konturen, Level-Sets — welche Kontur wo stoppt und was sie garantiert
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.
• poc_active_contours — py -3.11 examples/poc_active_contours.py
table als Eingabe)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. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.