활성 윤곽선

편집 역사 토론
컴퓨터 그래픽스 수치해석 마지막 수정: 2026-08-26 04:14:22

상위 문서: 이미지 분할

1. 개요[편집]

활성 윤곽선
Active Contour / Snake
제안Kass · Witkin · Terzopoulos (1988)
미지수곡선 $v(s) = (x(s), y(s))$ — 매개변수 표현
에너지내부(탄성 $\alpha$ + 강성 $\beta$) + 외부($-|\nabla(G_\sigma * I)|^2$)
이산 연산자순환 오각대각(pentadiagonal) 행렬, 한 스텝 $O(n)$
시간 전진내부 항 암시적 · 외부 힘 명시적(반암시적)
고질병좁은 캡처 반경 · 오목부 진입 실패 · 위상 변화 불가
처방GVF · 풍선력 · 거리 포텐셜 / 아예 레벨셋 방법으로 이주

고무줄을 영상 위에 던져 놓고, 스스로 물체 경계에 감기게 두는 것.

활성 윤곽선(active contour), 통칭 스네이크(snake)는 영상 위의 매개변수 곡선 v(s)=(x(s),y(s))v(s)=(x(s),y(s)) 자체를 미지수로 두고, 곡선의 매끄러움을 재는 내부 에너지와 영상 특징에 끌리는 외부 에너지의 합을 최소화해 물체 경계를 찾는 변분 모형이다. 카스·위트킨·테르조풀로스가 1988년 IJCV 창간호에 발표했고, 논문 제목이 그냥 「Snakes: Active Contour Models」였던 탓에 별명이 그대로 학술 용어가 됐다.1

이미지 분할 문서가 분할 기법 전반의 계보를 다루고, 분수령 변환이 형태학·침수 계열을 맡고 있으므로 여기서는 겹치지 않는 쪽 — 범함수를 세우고, 오일러-라그랑주 방정식을 유도하고, 그 결과 나온 강성(stiff) 상미분방정식계를 어떻게 안정하게 적분하는가 — 에 집중한다. 실제로 스네이크는 영상처리 기법이라기보다 탄성 보(beam)의 준정적 해석 코드에 가깝다. 내부 에너지는 1차원 스트링 + 오일러-베르누이 보의 변형 에너지 그 자체이고, 외부 힘은 그 보에 걸리는 분포 하중이며, 푸는 방식은 유한차분법으로 이산화한 반암시적 시간 전진이다. 구조해석 하던 사람이 이 문서를 보면 어색할 것이 하나도 없다.

2. 에너지 범함수[편집]

곡선을 s[0,1]s \in [0,1]로 매개변수화하고 총 에너지를 다음처럼 쓴다.

E[v]  =  0112(α(s)v(s)2+β(s)v(s)2)Eint  +  Eext(v(s))  dsE[v] \;=\; \int_0^1 \underbrace{\tfrac{1}{2}\Bigl(\alpha(s)\,|v'(s)|^2 + \beta(s)\,|v''(s)|^2\Bigr)}_{E_{\text{int}}} \;+\; E_{\text{ext}}\bigl(v(s)\bigr)\; ds

세 항의 역할이 서로 다르다.

  • αv2\alpha|v'|^2 — 탄성(막, membrane) 항. 곡선 길이에 벌점을 준다. 늘어나기 싫어하므로 곡선을 줄이는 방향으로 작용한다.
  • βv2\beta|v''|^2 — 강성(thin plate) 항. 곡률에 벌점을 준다. 꺾이기 싫어하므로 곡선을 펴는 방향으로 작용한다. β(s)=0\beta(s)=0으로 두면 그 지점에서 꺾임(코너)이 허용되므로, α,β\alpha,\betass의 함수로 둔 것은 “여기는 각진 물체다”라는 사전지식을 넣는 통로다.
  • EextE_{\text{ext}} — 외부(영상) 에너지. 경계에서 값이 낮아야 하므로 표준 선택이
Eext(x,y)  =  (GσI)(x,y)2E_{\text{ext}}(x,y) \;=\; -\,\bigl|\nabla \bigl(G_\sigma * I\bigr)(x,y)\bigr|^2

이다. 원본 영상 II를 표준편차 σ\sigma의 가우스 핵으로 평활한 뒤 기울기 크기의 제곱에 음수를 붙인 것. 밝기 자체를 쓰면(Eext=±IE_{\text{ext}} = \pm I) 어두운·밝은 선을 따라가는 라인 스네이크가 되고, 사용자가 찍은 점으로 끌어당기는 구속 에너지 EconE_{\text{con}}을 더하는 것이 원 논문의 대화형 편집 기능이었다.

여기서 이미 이 모형의 성격이 드러난다. EE볼록이 아니다. 외부 에너지가 영상이라는 임의의 함수인 이상 전역 최소를 기대할 수 없고, 스네이크가 찾는 것은 초기 곡선 근처의 국소 최소다. 그래서 스네이크는 자동 분할기가 아니라 반자동 도구로 태어났다 — 사람이 대충 그린 곡선을 다듬어 주는 것이 원래 용도였고, 이 점을 잊고 무작위 초기화로 돌리면 반드시 실망한다.

3. 오일러-라그랑주 방정식[편집]

범함수의 1차 변분을 0으로 놓으면(변분법의 표준 절차, 오일러-라그랑주 방정식 참고) 다음 4계 방정식이 나온다.

(αv)  +  (βv)  +  Eext(v)  =  0-\bigl(\alpha\,v'\bigr)' \;+\; \bigl(\beta\,v''\bigr)'' \;+\; \nabla E_{\text{ext}}(v) \;=\; 0

xx 성분과 yy 성분이 내부 항에서는 완전히 분리되고 외부 힘에서만 얽힌다. 이 정류 조건을 직접 푸는 대신, 관례는 인공 시간을 넣어 경사흐름으로 내려보내는 것이다.

vt  =  (αv)    (βv)    Eext(v)\frac{\partial v}{\partial t} \;=\; \bigl(\alpha\,v'\bigr)' \;-\; \bigl(\beta\,v''\bigr)'' \;-\; \nabla E_{\text{ext}}(v)

정상 상태가 곧 해다. 그런데 이 방정식은 확산항(α\alpha, 2계)과 초확산항(β\beta, 4계)을 동시에 가진 전형적인 강성 방정식이다. 파수 kk 성분의 감쇠율이 αk2+βk4\alpha k^2 + \beta k^4로 자라므로, 명시적 오일러로 적분하면 시간 스텝이 τh4/β\tau \lesssim h^4/\beta에 묶인다. 점을 두 배로 촘촘히 잡는 순간 스텝을 16분의 1로 줄여야 한다는 뜻이고, 이건 못 쓴다.

4. 오각대각 행렬과 반암시적 전진[편집]

곡선을 nn개의 점 vi=(xi,yi)v_i = (x_i, y_i)로 이산화하고 α,β\alpha,\beta를 상수, 격자 간격을 1로 두자. 2계 항은 중심차분, 4계 항은 그 제곱을 쓰면

α(xi12xi+xi+1)+β(xi24xi1+6xi4xi+1+xi+2)-\alpha\bigl(x_{i-1} - 2x_i + x_{i+1}\bigr) + \beta\bigl(x_{i-2} - 4x_{i-1} + 6x_i - 4x_{i+1} + x_{i+2}\bigr)

이 되어, 행렬 AA의 한 행이 [β,  (α+4β),  2α+6β,  (α+4β),  β][\,\beta,\; -(\alpha+4\beta),\; 2\alpha+6\beta,\; -(\alpha+4\beta),\; \beta\,]오각대각 행렬이 만들어진다. 닫힌 윤곽선이면 iimodn\bmod\, n이라 네 귀퉁이에 성분이 붙는 순환(cyclic) 오각대각이 되고, 열린 곡선이면 양 끝의 경계조건(고정 끝·자유 끝)이 첫·마지막 두 행을 바꾼다.

시간 전진은 내부 항만 암시적으로, 외부 힘은 명시적으로 처리한다.

(I+τA)vn+1  =  vn  +  τf(vn),f=Eext\bigl(\mathbf{I} + \tau A\bigr)\,v^{n+1} \;=\; v^{n} \;+\; \tau\, f\bigl(v^{n}\bigr), \qquad f = -\nabla E_{\text{ext}}

이 한 줄이 스네이크 구현의 전부라고 해도 과언이 아니다. 실무적 함의가 셋이다.

  • AA가 시간에 대해 상수다. α,β,τ\alpha,\beta,\tau를 바꾸지 않는 한 (I+τA)(\mathbf I + \tau A)한 번만 분해해 두고 매 스텝 전진·후진 대입만 하면 된다. 순환 대역 행렬은 대역 LU + 셔먼-모리슨(또는 순환 감소)으로 **스텝당 O(n)O(n)**이다. 희소행렬 루틴을 부를 것도 없이 배열 몇 개면 끝난다.
  • 강성 제약이 사라진다. 선형인 내부 항을 암시적으로 다루므로 그 부분은 무조건 안정이고, τ\tau의 상한은 이제 명시적으로 다루는 외부 힘이 정한다. 실무 기준은 단순하다 — 한 스텝의 이동량이 화소 한두 개를 넘지 않게. 그 이상 밀면 곡선이 경계를 뛰어넘어 반대편 국소 최소로 도망간다.
  • 점이 뭉친다. 매개변수화가 자동으로 균일하게 유지되지 않아서, 곡선이 수축하는 구간에 점이 몰리고 늘어나는 구간은 성기어진다. 주기적인 재매개변수화(호길이 등간격 재표본화)가 사실상 필수이며, 이걸 빼먹으면 v|v'| 추정이 망가져 내부 힘이 엉뚱하게 계산된다. B-스플라인 기저로 곡선을 표현해 자유도 자체를 줄이는 B-스네이크는 이 문제와 매끄러움을 한꺼번에 해결하는 대안이다.

5. 고질병 — 캡처 반경과 오목부[편집]

스네이크가 실전에서 무너지는 지점은 놀랍도록 일관적이다. 원인은 전부 외부 힘 Eext-\nabla E_{\text{ext}}의 모양에 있다.

캡처 반경(capture range)이 좁다. Eext=(GσI)2E_{\text{ext}} = -|\nabla(G_\sigma * I)|^2는 경계에서 멀어지면 평평하게 0이다. 평평한 곳의 기울기는 0이므로 끌어당기는 힘이 아예 없다. 즉 초기 곡선이 경계에서 몇 화소만 떨어져 있어도 스네이크는 물체의 존재를 감지조차 못 한다. 그러면 남는 것은 내부 에너지뿐이고, 그 결과가 두 번째 고질병이다.

외부 힘이 없으면 수축해서 사라진다. 탄성 항은 곡선 길이의 벌점이므로, 닫힌 곡선을 계속 줄여 한 점으로 붕괴시키는 것이 그 항의 유일한 최소해다. 초기 곡선을 크게 그린 뒤 “알아서 물체에 감기겠지” 하고 돌리면 물체를 지나쳐 점으로 사라지는 광경을 보게 된다.

오목부에 못 들어간다. U자 모양 물체의 홈 안쪽으로 곡선을 밀어 넣으려면 곡선이 깊게 꺾여야 하는데, 강성 항이 그 꺾임에 벌점을 물고, 홈 바닥의 에지 힘은 캡처 반경 밖이라 도와주지 못한다. 결과는 홈 입구를 가로질러 뚜껑을 덮은 모양이다.

σ\sigma를 키우면 캡처 반경이 넓어지지만 그만큼 경계 자체가 뭉개지고 밀린다 — 가까운 두 경계가 하나로 합쳐지고, 곡선이 안착하는 위치가 실제 경계에서 어긋난다. 이 절충이 스네이크 연구 10년의 주된 동력이었다.

6. 처방 — GVF, 풍선력, 거리 포텐셜[편집]

**기울기 벡터 흐름(GVF, 쉬·프린스 1997/1998)**이 가장 널리 쓰인 답이다. 발상은 “힘장을 영상 전체로 확산시키자”는 것. 에지 맵 ff에 대해 벡터장 w=(u,v)\mathbf{w}=(u,v)를 다음 범함수의 최소해로 정의한다.

ε[w]=μ(ux2+uy2+vx2+vy2)  +  f2wf2  dxdy\varepsilon[\mathbf{w}] = \iint \mu\bigl(u_x^2+u_y^2+v_x^2+v_y^2\bigr) \;+\; |\nabla f|^2\,\bigl|\mathbf{w}-\nabla f\bigr|^2 \; dx\,dy

두 항의 저울질이 예쁘다. f|\nabla f|가 큰 **경계 근처에서는 둘째 항이 지배해 wf\mathbf{w} \approx \nabla f**로 원래 에지 힘을 그대로 쓰고, f0|\nabla f| \approx 0평탄한 영역에서는 첫째 항만 남아 라플라스 방정식이 되어 에지 힘이 매끄럽게 확산된다. 오일러-라그랑주는 μ2u(ufx)(fx2+fy2)=0\mu\nabla^2 u - (u - f_x)(f_x^2+f_y^2)=0 꼴의 확산 방정식이고, 반복법으로 한 번 풀어 두면 그 뒤로는 재사용한다. GVF는 캡처 반경을 영상 전체로 넓히는 동시에 오목부 안쪽을 향하는 성분을 만들어 내서, 위의 두 고질병을 한꺼번에 완화한다. 대가는 영상 크기만 한 PDE 한 번과, 확산 계수 μ\mu라는 파라미터 하나가 더 늘어난 것이다.

**풍선력(balloon force, 코엔 1991)**은 훨씬 거칠지만 싸다. 곡선의 법선 방향으로 상수 압력 k1n(s)k_1\mathbf{n}(s)를 더해 곡선을 강제로 부풀리거나(또는 오므리거나) 한다. 물체 안쪽에 작은 원을 놓고 부풀리면 경계까지 밀려 나가 멈추므로 초기화가 쉬워지고, 수축 붕괴도 막힌다. 단점도 명확하다 — 부호를 사람이 정해 줘야 하고(안에서 밖인지 밖에서 안인지), 압력이 에지 힘보다 세면 약한 경계를 그냥 뚫고 나간다. 영역 성장의 누출(leakage) 문제가 변분 언어로 되돌아온 셈.

거리 포텐셜(코엔·코엔 1993)은 이진 에지 맵의 거리 변환을 포텐셜로 쓴다. 힘이 영상 전체에 살아 있어 캡처 반경 문제는 사라지지만, 힘의 방향이 항상 “가장 가까운 에지 화소 쪽”이라 오목부 진입에는 여전히 약하다. GVF 논문이 굳이 이 방법과 비교 실험을 실은 이유가 그 차이를 보이기 위해서다.

7. 위상 변화라는 벽[편집]

여기까지의 처방으로도 못 넘는 벽이 하나 남는다. 매개변수 표현은 위상 변화를 못 한다. 세포 하나를 좇던 곡선이 두 개로 갈라져야 하거나, 따로 출발한 두 곡선이 하나로 합쳐져야 할 때, 점 사슬 자료구조로는 “누구를 누구와 잇는가”를 코드가 직접 결정해야 한다. 자기 교차 검출, 사슬 절단, 재연결 — 2차원에서도 지저분하고 3차원 곡면으로 올라가면 사실상 지옥이다.2

파라메트릭 진영의 답이 T-스네이크(맥이너니·테르조풀로스)였다. 배경에 아핀 셀 분해 격자를 깔고 매 스텝 곡선을 격자에 재투영해, 격자 위에서 위상을 다시 판정하는 방식이다. 작동은 하지만 결국 “암시적 표현의 장점을 명시적 표현에 억지로 이식한” 구조라 코드 복잡도가 크다.

주류가 택한 답은 이주였다. 카셀레스·키멜·사피로(1997)의 측지 활성 윤곽선은 같은 에너지를 영상 기울기로 정의한 리만 계량 위의 곡선 길이

Egeo[C]  =  0L(C)g(I)dsE_{\text{geo}}[C] \;=\; \int_0^{L(C)} g\bigl(|\nabla I|\bigr)\, ds

로 다시 쓴다. 매개변수화에 무관한 순수 기하 범함수이므로 곡선을 레벨셋 방법ϕ=0\phi=0 등고선으로 옮겨 실을 수 있고, 그 순간 분열·병합이 공짜로 처리된다. 진화식은 ϕt=g(I)(κ+c)ϕ+gϕ\phi_t = g(|\nabla I|)\,(\kappa + c)\,|\nabla\phi| + \nabla g \cdot \nabla \phi 꼴로, 마지막 항이 곡선을 에지 골짜기 바닥으로 끌어당기는 역할을 한다. 여기서 β\beta에 해당하는 강성 항이 사라지고 곡률 κ\kappa가 그 자리를 대신한다는 점도 눈여겨볼 만하다 — 4계가 2계로 내려가면서 강성이 완화됐다.

챈-베세 모형(2001)은 한 걸음 더 나가 기울기를 아예 안 쓴다. 곡선 안팎의 평균 밝기와의 편차 제곱합을 줄이는 영역 기반 범함수라, 경계가 흐릿해 I|\nabla I|가 무의미한 영상(초음파, 저선량 CT)에서도 작동한다. 이 계열의 비교는 이미지 분할 문서에 정리돼 있다.

8. 그래서 지금도 쓰는가[편집]

쓴다. 다만 자리가 바뀌었다.

  • 반자동 편집 도구로. 의료영상 라벨링 툴의 “자석 올가미”·“윤곽 스냅” 기능이 대개 스네이크나 그 사촌인 인텔리전트 시저(라이브 와이어)다. 사람이 대충 그린 곡선을 화소 단위로 붙여 주는 용도로는 여전히 최적이고, 국소 최소라는 성질이 오히려 예측 가능성이라는 장점이 된다.
  • 신경망 출력의 후처리로. 합성곱 신경망이 뱉은 확률맵을 외부 포텐셜로 삼아 스네이크를 돌리면 계단형 경계가 매끄러워지고 닫힌 곡선이 보장된다. 최근에는 아예 곡선 제어점을 신경망이 예측하고 진화 몇 스텝을 미분 가능하게 이어 붙이는(딥 스네이크 계열) 구성도 흔하다.
  • 통계적 형상 모형의 조상으로. “형상을 저차원 매개변수로 표현하고 에너지를 최소화한다”는 골격은 능동 형상 모형(ASM)과 능동 외형 모형(AAM)으로 이어졌다. 자유로운 곡선 대신 학습된 형상 공간 안으로 변형을 제한하는 것이 차이인데, 그 덕에 경계가 잘 안 보이는 영역에서도 안 무너진다.
  • 파라미터가 넷이라는 사실. α,β,σ,τ\alpha, \beta, \sigma, \tau(+ GVF의 μ\mu, 풍선의 k1k_1)를 다 맞춰야 한다. 이 조합을 영상마다 손으로 찾는 노동이 스네이크가 벤치마크에서 밀려난 진짜 이유에 가깝다.3

9. 실무 감각[편집]

  • 초기 곡선이 답의 절반이다. 물체를 감싸고, 경계에서 GVF 캡처 반경 안에 있고, 오목부 쪽으로 미리 살짝 들어가 있으면 대개 잘 수렴한다. “아무 데나 원 하나 그리고 돌린다”는 실패 시나리오다.
  • 에너지를 로그로 찍어라. E[vn]E[v^n]이 단조 감소하지 않으면 τ\tau가 크거나 재매개변수화가 에너지를 튀기고 있는 것이다. 곡선 그림만 보고 “잘 되는 것 같다”고 판단하면 파라미터 탐색이 미신이 된다.
  • 정지 조건은 이동량으로. 최대 절점 이동이 화소 하나의 몇 분의 일 아래로 떨어지면 멈춘다. 반복 횟수 고정은 영상 크기가 바뀌는 순간 무의미해진다.
  • 자기 교차를 검사해라. 강한 외부 힘 아래에서 곡선은 태연히 자기를 통과한다. 매 몇 스텝마다 선분 교차를 검사해 고리를 잘라 내지 않으면, 겉보기엔 수렴했는데 내부가 8자로 꼬인 결과를 얻는다.
  • 화소 좌표와 연속 좌표를 섞지 마라. 외부 힘을 이중선형 보간으로 샘플링할 때 절점이 반 화소 밀리는 오프셋 버그가 이 분야의 국룰급 실수다. 경계가 일관되게 한쪽으로 치우쳐 안착하면 이걸 먼저 의심한다.

10. 관련 문서[편집]

11. Footnotes[편집]

  1. 원 논문의 스네이크 시연은 지금 기준으로 보면 대화형 편집기였다. 사용자가 마우스로 곡선을 끌면 그 지점에 스프링 구속이 붙고, 손을 떼면 곡선이 다시 영상 특징으로 미끄러져 붙는다. “곡선이 꿈틀거리며 경계로 기어가는” 그 화면 때문에 뱀이라는 별명이 붙었고, 저자들도 논문 안에서 대놓고 snake라고 부른다. 학술 용어가 밈에서 나온 드문 사례.

  2. 3차원 변형 곡면에서 위상 변화를 명시적으로 처리하려면 삼각형 메시의 절단·재봉합을 매 스텝 해야 하는데, 그 과정에서 요소 품질이 무너져 다시 재메싱이 필요해지고, 재메싱이 곡면 위치를 흔들어 에너지가 튀고, 그러면 시간 스텝을 줄여야 하고… 이 악순환을 한 번 겪어 본 사람이 레벨셋 방법 논문을 읽으면 종교적 체험을 하게 된다.

  3. 파라미터가 많은 고전 기법이 딥러닝에 밀린 과정을 “성능 차이”로만 설명하는 것은 절반만 맞다. 나머지 절반은 재현성이다. 논문에 α=0.05, β=0.01\alpha=0.05,\ \beta=0.01까지는 적혀 있어도 σ\sigma와 재매개변수화 주기, 정지 조건은 안 적혀 있는 경우가 대부분이고, 그걸 맞추느라 며칠을 쓰느니 사전학습 가중치를 내려받는 쪽이 합리적이었다.