1. 개요[편집]
| 골격화 Skeletonization | |
|---|---|
| 입력 | 이진 영상 · 복셀 볼륨 · 다각형/다면체 형상 |
| 출력 | 두께 1의 중심선(2D) 또는 중심면·중심곡선(3D) |
| 이론적 정의 | 중심축(medial axis) — 블룸의 잔디불 (1967) |
| 주요 계열 | 거리 변환 능선 · 위상 보존 세선화 · 보로노이 골격 |
| 대표 알고리즘 | 장-쑤엔(1984) 2 하위반복 세선화 |
| 고질병 | 경계 잡음 → 가짜 가지. 가지치기가 사실상 필수 |
골격화는 두께가 있는 형상을 위상과 대략적 기하를 보존한 채 두께 1의 중심선(골격)으로 줄이는 연산이다. 손가락 다섯 개짜리 손 모양은 다섯 갈래로 뻗은 나뭇가지가 되고, 도넛은 고리 하나가 되며, 혈관 조영 영상은 굵기 정보가 달린 그래프가 된다. 부피를 버리고 연결 구조만 남기는 것이 목적이다.
쓰임새는 두 갈래다. 하나는 인식·계측 — 획의 굵기가 필기구에 따라 달라지는 문자 인식, 회로 패턴의 단선 검출, 혈관의 분기 개수와 굴곡도 계측처럼 “굵기는 잡음이고 연결이 신호”인 문제들. 다른 하나는 차원 축소된 해석 모형의 골조 — 3차원 혈관망이나 다공체를 1차원 관망 그래프로 갈아 넣어 다공성 매질 유동이나 순환 모형을 돌리는 것, 메시 생성에서 육면체 격자의 스윕 방향을 잡는 것이 여기 속한다.
문제는 “중심”이라는 말이 생각보다 미끄럽다는 것이다. 연속 세계에서는 깔끔한 정의가 하나 있는데(중심축), 그것을 격자 위에서 계산하면 위상이 깨지거나 가짜 가지가 폭발하고, 위상을 지키는 알고리즘은 중심에서 벗어난다. 골격화의 역사는 사실상 이 셋 — 중심성, 위상 보존, 안정성 — 중 무엇을 포기할 것인가의 역사다.
2. 중심축과 잔디불[편집]
블룸(H. Blum, 1967)의 정의부터 보자. 형상 의 중심축(medial axis)은 경계 에 대해 가장 가까운 경계점이 둘 이상인 내부 점들의 집합이다. 동치인 정의로는 ” 안의 극대 내접원(내접구)의 중심들의 자취”가 있다. 각 중심축 점에 그 내접원의 반지름 을 붙여 둔 쌍을 중심축 변환(medial axis transform, MAT)이라 부르고, 이것만 있으면 원래 형상을 완전히 복원할 수 있다.
블룸의 직관이 유명한 잔디불(grassfire) 비유다. 경계 전체에 동시에 불을 붙여 등속으로 안쪽을 향해 태우면, 서로 다른 방향에서 온 불길이 부딪혀 꺼지는 자리가 중심축이고 그때의 시각이 곧 이다. 이 그림은 비유에 그치지 않는다 — 등속 파면의 도달시간은 아이코날 방정식 의 점성해이고, 불길이 부딪히는 자리는 그 해의 **충격파(비미분점)**다. 그래서 중심축은 거리 변환의 능선이자 거리함수의 특이집합이라는 세 얼굴을 동시에 갖는다.
중심축의 좋은 성질은 확실하다. 형상과 위상동형(단순연결 형상이면 중심축도 단순연결)이고, 복원 가능하며, 좌표계에 무관하다. 나쁜 성질도 확실하다 — 경계를 하우스도르프 거리로 아무리 조금만 흔들어도 중심축은 임의로 크게 변할 수 있다. 매끄러운 원판 경계에 반지름 짜리 돌기 하나를 붙이면 중심까지 뻗는 긴 가지가 새로 생긴다. 이 불안정성이 골격화 실무의 거의 모든 것을 결정한다.
3. 거리 변환의 능선[편집]
가장 직관적인 계산법은 내부의 거리 변환 을 구하고 그 능선을 따는 것이다. 정확 유클리드 거리 변환이 화소당 상수 시간에 끝나므로 재료는 공짜에 가깝다.
문제는 “능선”을 이산 격자에서 판정하는 일이다. 소박하게 “이웃보다 큰 국소 최대”를 고르면 골격이 뚝뚝 끊긴다 — 중심축은 대개 능선을 따라 걷는 곡선이라 능선 위 점들끼리는 값이 계속 변하기 때문이다. 그래서 실무는 세 가지를 섞는다.
- 극대원 판정. 가 다른 어떤 에도 포함되지 않으면 를 남긴다. 중심축 정의에 가장 충실하지만 격자에서는 부동소수점 경계 사례가 많고, 결과가 8-연결로도 이어지지 않는 경우가 흔하다.
- 최근접점 라벨 비교. 정확 거리 변환을 구할 때 각 화소가 어느 경계점에 배정됐는지를 함께 기록해 두고, 이웃과 배정 라벨이 크게 다른 자리를 능선으로 본다. 사실상 이산 보로노이 경계를 찾는 것이며, 아래의 보로노이 골격과 같은 이야기다.
- 평균 유출 플럭스. 시디키 등(2002)의 해밀턴-야코비 골격은 벡터장 의 평균 유출 플럭스 를 화소마다 재고, 이 값이 크게 음수인 곳(불길이 모여 소멸하는 곳)을 골격 후보로 삼는다. 충격파 위치를 훨씬 안정적으로 잡아 주며, 뒤에 위상 보존 세선화를 얹어 마무리하는 조합이 표준이다.
어느 쪽이든 능선 검출만으로는 위상이 보장되지 않는다. 그래서 능선은 “어디가 중심인가”를 알려 주는 지도로 쓰고, 실제로 화소를 지우는 일은 다음 절의 세선화에 맡기는 것이 흔한 설계다.
4. 위상 보존 세선화 — 장-쑤엔 알고리즘[편집]
세선화(thinning)는 정반대 방향에서 접근한다. 중심을 찾는 대신 지워도 위상이 안 변하는 경계 화소를 반복해서 깎는다. 이때 “지워도 되는 화소”를 단순점(simple point)이라 하고, 2차원 8-연결에서는 국소 3×3 패턴만 보고 판정할 수 있다.
전경 화소 의 8-이웃을 북쪽부터 시계방향으로 라 두고 두 양을 정의한다.
- — 이웃 중 전경인 것의 개수.
- — 순환 수열 에서 로 바뀌는 횟수(교차수).
장-쑤엔 알고리즘(Zhang–Suen, 1984)은 한 번의 반복을 두 하위반복으로 나눈다. 각 하위반복은 조건을 만족하는 화소를 전부 표시한 뒤 한꺼번에 지운다(그래서 병렬화가 자연스럽다).
하위반복 1 — 다음 넷을 모두 만족하면 삭제 표시.
하위반복 2 — 앞의 두 조건은 같고, 뒤의 둘만 바꾼다.
각 조건의 역할은 이렇다. 은 연결성 보존 — 교차수가 2 이상이면 그 화소가 서로 다른 두 갈래를 잇는 다리라서 지우면 형상이 끊어진다. 는 끝점 보호(이웃이 하나뿐인 획 끝을 남겨 가지가 갉아 먹히지 않게 한다), 은 내부 화소 배제. 마지막 두 곱 조건이 하위반복마다 다른 이유가 핵심인데, 첫 반복은 남·동쪽 경계를, 둘째 반복은 북·서쪽 경계를 지운다. 한 방향씩 번갈아 깎지 않고 사방을 동시에 지우면 얇은 획이 통째로 사라진다 — 병렬 세선화가 두 하위반복 구조를 갖는 이유가 정확히 이것이다.1
장-쑤엔은 구현이 20줄이고 빠르지만 약점도 잘 알려져 있다. 2×2 정사각형 블록이 통째로 지워져 위상이 깨지는 유명한 반례가 있고, 대각선 획에서 계단 모양 잔여물이 남으며, 결과가 중심축에서 반 화소쯤 치우친다. 구오-홀(1989)을 비롯한 후속 변종들이 조건을 손봤고, 실무 라이브러리는 대개 장-쑤엔과 구오-홀을 함께 제공한다. 3차원으로 올라가면 단순점 판정이 3×3×3 이웃의 위상수(topological number) 계산으로 바뀌고, 리-카시압-추(1994)나 팔라기-쿠바의 방향별 하위반복 알고리즘이 표준으로 쓰인다.
5. 보로노이 골격[편집]
경계를 점들로 촘촘히 샘플링한 뒤 그 점들의 보로노이 다이어그램을 세우면, 내부에 놓인 보로노이 변·면들이 중심축으로 수렴한다. “가장 가까운 경계점이 둘 이상”이라는 중심축의 정의가 곧 “보로노이 셀 경계”의 정의이므로 사실 당연한 이야기다.
이 접근의 장점은 격자를 쓰지 않는다는 것 — 해상도 편향이 없고, 각 골격점의 반지름이 실수 정밀도로 나온다. 단점은 샘플링이 성기면 엉뚱한 보로노이 조각이 섞이고, 3차원에서는 안쪽으로 아주 길쭉한 셀이 생겨 수치적으로 예민해진다는 것. 3차원에서 신뢰할 수 있는 부분만 골라 쓰는 표준 처방이 아멘타 등의 극점(pole) — 각 샘플의 보로노이 셀에서 가장 먼 꼭짓점만 취하는 것 — 이고, 여기서 표면 재구성(power crust)과 골격 추출이 갈라져 나온다.
혈관 중심선 추출의 사실상 표준인 VMTK가 이 계열이다. 혈관 내강 표면을 샘플링해 보로노이 다이어그램을 세우고, 각 보로노이 꼭짓점의 내접구 반지름을 비용의 역수로 삼아 입구에서 출구까지 최소비용 경로를 푼다. 결과가 “가장 굵은 길을 따라가는 곡선”, 즉 해부학적으로 납득 가능한 중심선이 된다.
6. 3차원 — 중심면과 곡선 골격[편집]
3차원에서 대부분의 직관이 무너진다. 입체의 중심축은 곡선이 아니라 면(medial surface)이다. 정육면체의 중심축은 여섯 장의 조각으로 이루어진 2차원 복합체이지, 선분 하나가 아니다. 반면 실무가 원하는 것은 대개 1차원 곡선 골격(curve skeleton)인데, 이건 수학적으로 유일하게 정의된 대상이 아니라 응용이 요구하는 성질들의 목록에 가깝다 — 형상 안에 있을 것, 위상이 같을 것, 중심에 가까울 것, 회전에 무관할 것, 잡음에 둔감할 것. 알고리즘마다 이 중 무엇을 우선하느냐가 다르고, 그래서 “정답”이 없다.2
그럼에도 3차원 골격이 계속 쓰이는 이유는 응용이 강력하기 때문이다.
- 격자 생성. 중심면을 따라 형상을 쪼개면 각 조각이 스윕 가능한 단순 볼륨이 되어, 육면체 격자 생성의 분해 규칙으로 쓸 수 있다(프라이스-암스트롱 계열의 중심면 세분). 두께 방향 요소 수를 국소 반지름 로 자동 결정하는 것도 같은 정보에서 나온다. 얇은 판 구조를 셸 요소로 자동 치환하는 미드서페이스 추출도 사실상 같은 계산이다.
- 다공체 망 추출. μCT 로 찍은 암석·촉매층 복셀 볼륨의 공극상을 골격화하면 공극(node)과 목(throat)의 그래프가 나온다. 각 목에 하겐-푸아죄유 저항을 붙여 관망을 풀면 투과율을 초 단위로 추정할 수 있어, 복셀 전체에 격자 볼츠만 방법을 돌리는 것보다 서너 자릿수 싸다. 대신 목의 단면 형상을 원통으로 이상화하는 만큼 절대값은 보정 계수에 의존한다. 목의 크기 통계를 세는 문제는 입도 분석 쪽으로 넘어간다.
- 1차원 축소 모형. 대동맥부터 세동맥까지 3차원으로 풀 수는 없으므로, 큰 혈관만 3차원으로 두고 나머지는 골격 그래프 위의 1차원 파동 방정식으로 처리한다. 골격의 반지름 함수가 그대로 단면적 분포가 된다.
- 리깅과 애니메이션. 메시에서 곡선 골격을 뽑아 관절을 자동 배치하는 것이 자동 리깅의 기본 뼈대이고, 그 결과가 스켈레탈 애니메이션과 역운동학의 입력이 된다.
7. 잡음 민감성과 가지치기[편집]
앞에서 말한 불안정성 — 경계의 짜리 돌기가 긴 가지를 만든다 — 때문에, 실제 코드는 “중심축을 구한다”보다 “중심축을 구하고 대부분을 버린다” 에 가깝다. 버리는 기준이 곧 알고리즘의 성격이다.
| 기준 | 무엇을 재나 | 성격 |
|---|---|---|
| 가지 길이 | 가지 끝에서 분기점까지의 거리 | 가장 싸고 가장 조잡. 굵기 스케일을 무시한다 |
| 이등분각 | 두 최근접 경계점이 이루는 각 | 각이 작으면 얕은 돌기. 국소 판정이라 빠르다 |
| λ-중심축 | 최근접 경계점 집합의 최소 포함원 반지름 | 하우스도르프 섭동에 대한 안정성이 증명돼 있다 |
| 스케일 축 | 반지름을 배 부풀린 뒤 남는 극대구 | 굵기에 비례해 자동으로 걸러진다 |
| 유출 플럭스 | 의 평균 유출량 | 능선 검출과 가지치기를 한 양으로 통합 |
핵심 교훈은 가지치기의 임계값이 절대 길이가 아니라 국소 굵기의 비율이어야 한다는 것이다. 팔뚝의 10화소짜리 돌기는 잡음이지만 손가락의 10화소짜리 가지는 신호다. λ-중심축과 스케일 축이 널리 쓰이는 이유가 여기 있다 — 둘 다 임계값이 길이 스케일과 함께 자동으로 늘어난다.
전처리도 절반의 몫을 한다. 골격화 직전에 반지름 1~2짜리 수학적 형태학의 열림·닫힘을 걸거나 재구성 열림으로 잔점만 걷어내면, 뒤따르는 가지 수가 자릿수로 줄어든다. 반대로 이미지 분할 단계에서 임계값을 잘못 잡아 경계가 톱니처럼 나오면, 어떤 정교한 가지치기를 얹어도 되살릴 수 없다. 골격의 품질은 분할 품질을 넘지 못한다 — 이 바닥의 “격자가 다 했다”에 해당하는 격언이다.3
마지막으로, 골격은 형상 기술자로도 쓰인다. 골격 그래프의 위상(분기 수, 고리 수)과 각 가지의 반지름 함수를 붙이면 회전·크기에 둔감한 형상 기술자가 되고, 그래프 편집 거리로 형상끼리 비교할 수 있다. 다만 앞서 본 불안정성 때문에 같은 물체의 다른 촬영본이 서로 다른 골격 위상을 갖는 일이 흔해서, 실무에서는 반지름 기반 정규화와 가지치기를 통과한 뒤에야 비교에 쓴다.
8. 관련 문서[편집]
- 거리 변환 · 수학적 형태학 · 분수령 변환
- 보로노이 다이어그램 · 들로네 삼각분할
- 아이코날 방정식 · 고속 행진법 · 레벨셋 방법
- 입도 분석 · 다공성 매질 유동 · 격자 볼츠만 방법
- 메시 생성 · 마칭 큐브
- 스켈레탈 애니메이션 · 역운동학
- 이미지 분할 · 하우스도르프 거리 · 형상 기술자
9. Footnotes[편집]
-
이걸 모르고 “조건 만족하는 화소 다 지우면 되지 않나” 하고 한 번에 지우는 코드를 짜면, 폭 2짜리 획이 첫 반복에서 통째로 증발하는 장면을 보게 된다. 양쪽 화소가 서로를 “내 이웃이 아직 있으니 나는 지워도 안전해”라고 판정하고 동시에 사라지기 때문. 병렬 알고리즘에서 이웃의 상태를 읽는 순간 이미 낡은 값이라는, 분산 시스템 사람들에게 익숙한 그 문제다. ↩
-
곡선 골격 논문의 서론이 하나같이 “곡선 골격에는 널리 합의된 정의가 없다”로 시작하는 데는 이유가 있다. 정의가 없으니 비교 기준도 없고, 그래서 이 분야의 평가는 대개 “우리 결과가 더 그럴싸해 보인다”에 머문다. 중심축은 정의가 깔끔한 대신 아무도 그대로 쓰지 않고, 곡선 골격은 다들 쓰는데 정의가 없다. 응용 수학에서 드물지 않게 벌어지는 일이다. ↩
-
그래서 골격화 관련 이슈로 들어온 버그의 절반쯤은 골격화 코드에 버그가 없다. 임계값이 흔들려 경계가 1화소씩 들쭉날쭉해졌거나, 서로 다른 물체 둘이 한 화소로 붙어 버려 골격이 둘을 잇는 다리를 정직하게 그려 준 경우다. 알고리즘은 시킨 대로 했을 뿐이다. ↩