contour op• 데이터 종류: image2d × pairs → table
• 호출: 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]'(구현을 직접 호출하려면 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]', 원장에서 가져오려면 opssegmentation.get("snake_evolve"))
이산 snake(Kass–Witkin–Terzopoulos 1988)의 반음적 갱신 x_t = (A + γI)^(-1)(γ x_(t-1) − f_x)(식 (19)(20))(snake_evolve).
닫힌 snake(주기 경계)의 점 init_points(N, 2) = [row, col], N ≥ 5. 내부 에너지 E_int = ½ Σ (α |v_(i+1) − v_i|² + β |v_(i+1) − 2v_i + v_(i−1)|²) = ½ xᵀ A x(음적). 외력(양적)은 external로 고른다:
"edge" = 퍼텐셜 P = w_line · G_σ*I + w_edge · |∇(G_σ*I)|², E_ext = −κ Σ P(v_i)(Kass의 E_line과 E_edge), "potential" = image를 그대로 P로 사용(2번째 구현(독립 구현)과 같은 P를 넘기기 위해), "gvf" = 힘 자체가 −κ (v, u)(GVF, gvf에 gvf_field의 반환을 넘기거나 gvf_mu로 내부에서 만든다), "none" = 외력 0. P는 spline_order차 보간 스플라인(값과 미분이 정합)으로 점의 위치에서 얻는다. max_px_move를 주면 1반복의 이동을 max_px_move · tanh(Δ)로 제한(skimage와 같음. 근접 기울기의 성질은 잃는다). resample_every > 0이면 k반복마다 호 길이로 등간격으로 다시 찍는다(오목부에 들어갈 때 점이 성겨지는 것을 막음. 에너지의단조성은 그 시점에서 끊긴다). 점은 영상 범위 [0, H−1] × [0, W−1]로 잘라 넣는다.
반환값: points(N, 2), mask(꺾은선의 안쪽), energy / energy_internal / energy_external(반복마다, 첫 항목 = 초기. GVF에서는 외력의 에너지가 정의되지 않으므로 total과 external은 NaN), n_increase(에너지가늘어난 반복의 수, GVF이면 None), max_increase, lipschitz(κP의 헤세 행렬의 스펙트럼 노름의 격자상 최대 = 외력 기울기의 Lipschitz 상수의 추정), gamma_ge_lipschitz(γ ≥ L이면 하강 보조정리로 단조 비증가가 보장됨), radius_factor(외력 0인 원의 1반복 수축 γ/(γ + λ_1)의 닫힌 식), history(record_every마다의 점), n_iter, converged.
• active_contours_and_level_sets — 변분·동적 윤곽과 레벨셋 — 어떤 윤곽이 어디서 멈추고 무엇을 보장하는가
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• poc_active_contours — py -3.11 examples/poc_active_contours.py
table 를 입력으로 받는 것)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 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.