chan_vese_evolve — SEGMENTATION contour op

• 資料種類:image2d × mask → table

• 呼叫: 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]'(要直接呼叫實作,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]';從台帳取用則 opssegmentation.get("chan_vese_evolve"))

用法

最小化 Chan–Vese 2001 的兩相能量(預設是凸鬆弛的交替最小化,也可選擇水平集梯度下降)(chan_vese_evolve)。

2 種方法:

method="convex"(預設)= c 的更新(內外平均 = 最佳)與固定 c 時分割的更新的交替最小化。分割的更新是把 Chan–Esedoglu–Nikolova 2006 的凸鬆弛 min_(u∈[0,1]) μ TV(u) + Σ (ν + λ1 (I − c1)² − λ2 (I − c2)²) u 以 Chambolle–Pock 求解 n_inner 次,再以 1/2 作 2 值化(TV 為各向異性的前向差分 = 2 值時為 4 鄰域裂縫的數量 = chan_vese_energy 的 perimeter_sharp。由離散餘面積公式,鬆弛的最小解在任何閾值處切開都是 2 值的最小解)。銳利能量(energy = chan_vese_energy 的 energy_sharp)在交替最小化下單調不增 —— 若內側解法的誤差看起來會使其增加,就捨棄更新並停止(n_guard,應為 0)。method="level_set" = 沿 離散能量的嚴格梯度 下降平滑的能量(chan_vese_energy 的 energy)。

梯度 = μ(δ_ε'(φ) |Dφ|_η + Dᵀ(δ_ε(φ) Dφ / |Dφ|_η)) − δ_ε(φ)(ν + λ1 (I − c1)² − λ2 (I − c2)²)(D = 前向差分, Dᵀ = 其伴隨。在連續極限下成為 −δ_ε κ μ 項,與論文式 (9) 右邊的符號反轉一致)。c1, c2 是每個 φ 的最佳值,所以由包絡定理不進入梯度。步長從 dt 開始,減半直到滿足 Armijo 條件 E_new ≤ E − 10⁻⁴ dt |∇E|² (滿足後下次迭代為 1.1 倍,上限 dt)。因此能量單調不增(n_increase 應為 0,回退次數為 n_rejected)。實測的侷限: 嚴格的梯度除了移動界面,也會朝著讓 |φ| 膨脹、使 H_ε 變銳利的方向下降,所以遠處的像素(δ_ε 小)實際上不動,停在局部解(橢圓 + 雜訊 σ = 0.2 時 300 次迭代後誤差仍約 800 像素,convex 為幾十像素)。這是論文把重新初始化列為「可選」的理由之 1。init = bool 遮罩(內側)或 φ(內側 φ < 0)。

回傳值: mask(φ < 0)、phi(convex 時為 2 值的符號距離)、energy(開頭 = 初始)、c1 / c2、n_rejected、n_guard、n_increase、duality_gap(convex 內側解法的原始對偶間隙,每次外側迭代)、history(每 record_every 次的遮罩)、n_iter、converged、method。

詳細使用指南

• halcon_segmentation 族使用指南

背景知識指南(該運算子背後的物理與規範)

• active_contours_and_level_sets — 變分、主動輪廓與水平集 —— 哪種輪廓停在哪裡、保證什麼

參考(範例資料、文獻)

• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。

• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。

• 演算法的正典(作者、年份)與用途見上面的族使用指南。

可執行的範例(實際呼叫該運算子並已驗證的樣例)

• poc_active_contours — py -3.11 examples/poc_active_contours.py

型別可銜接的下一個運算子(可接受 table 作為輸入)

class_ndim_norm

同類別(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 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*

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