가지치기 (형태학)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
가지치기(Pruning)는 형태학적 이미지 처리 기법 중 하나로, 이미지의 골격에서 불필요한 가지를 제거하는 알고리즘이다. 이 알고리즘은 주로 솎아내기, 끝점 찾기, 끝점 팽창, 합집합의 네 단계를 거쳐 수행되며, 3x3 구조적 요소 행렬을 사용한다. MATLAB 코드를 통해 구현할 수 있으며, 이미지 골격화 후 스퍼(spur)를 제거하여 이미지의 형태를 개선하는 데 활용된다.
더 읽어볼만한 페이지
- 수학적 형태학 - 구조적 요소
구조적 요소는 이진 이미지 처리에서 사용되는 작고 단순한 형태의 집합으로, 유클리드 공간 또는 정수 격자에서의 이진 이미지를 정의하며, 원, 정사각형, 십자 모양 등 다양한 형태를 가질 수 있다. - 수학적 형태학 - 닫기 (형태학)
닫기는 이미지 처리에서 팽창 후 침식 연산을 적용하여 작은 구멍을 채우고 경계를 부드럽게 만들어 노이즈를 제거하며, 이미지 복원, 객체 분리, 문자 인식 등에 활용되는 형태학적 기법이다. - 디지털 기하학 - 디지털 이미지
디지털 이미지는 픽셀로 구성된 디지털 데이터 집합으로, 래스터 이미지와 벡터 이미지로 나뉘며 디지털 카메라, 스캐너, 또는 수학적 함수를 통해 생성되고, JPEG와 같은 압축 기술 덕분에 인터넷에서 널리 사용된다. - 디지털 기하학 - 닫기 (형태학)
닫기는 이미지 처리에서 팽창 후 침식 연산을 적용하여 작은 구멍을 채우고 경계를 부드럽게 만들어 노이즈를 제거하며, 이미지 복원, 객체 분리, 문자 인식 등에 활용되는 형태학적 기법이다.
가지치기 (형태학) |
---|
2. 수학적 정의
표준 가지치기 알고리즘은 주어진 점수보다 짧은 가지를 제거하는 방식으로 작동한다. 예를 들어 기생 가지가 4점 미만이고 알고리즘을 ''n = 4''로 실행하면 해당 가지가 제거된다.[1] 이 알고리즘은 각 선의 주요 줄기가 단축되지 않도록 하는 두 번째 단계를 거친다.[1]
2. 1. 구조적 요소 (Structuring Elements)
가지치기 알고리즘에는 다음과 같은 8개의 3x3 구조적 요소 행렬(B1 ~ B8)이 사용된다.B1 | B2 | B3 | B4 |
---|---|---|---|
B5 | B6 | B7 | B8 |
---|---|---|---|
가지치기 알고리즘은 솎아내기, 끝점 찾기, 끝점 팽창, 결과 합집합의 4단계로 구성된다. 1단계에서는 픽셀 수가 적은 가지를 솎아내어 제거하고, 2단계에서는 남은 가지의 끝점을 찾는다. 3단계에서는 찾은 끝점을 팽창시켜 원래 이미지와 비교하여 연결성을 판단하고, 마지막 4단계에서 이전 단계의 결과들을 합쳐 최종 결과를 얻는다.
여기서 'x'는 "무관" 조건을 나타내는데, 이는 해당 위치에 0 또는 1이 모두 올 수 있음을 의미한다.
3. 가지치기 알고리즘 단계
3. 1. 1단계: 솎아내기 (Thinning)
주어진 횟수(n)만큼 솎아내기를 적용하여 픽셀 수가 n개 이하인 모든 가지를 제거한다.[1]
:
3. 2. 2단계: 끝점 찾기
구조화 요소를 충족하는 모든 위치에서 3x3 행렬의 중심을 종점(end point)으로 간주한다.
:
3. 3. 3단계: 끝점 팽창 (Dilation)
3x3 행렬(H)을 사용하여 팽창을 수행한다. 이때 모든 요소가 1로 구성되고, 원래 이미지(A)에도 1이 있는 경우에만 1을 삽입한다. 모든 방향(n)에서 각 끝점에 대해 이 작업을 수행한다.
:
3. 4. 4단계: 합집합 (Union)
1단계 결과와 3단계 결과를 합집합하여 최종 결과를 얻는다.
:
4. MATLAB 코드
matlab
% 이미지 읽기
img = imread('Pruning.tif');
b_img_skel = bwmorph (img, 'skel', 40);
b_img_spur = bwmorph(b_img_skel, 'spur', Inf);
figure('Name', 'Pruning');
subplot(1,2,1);
imshow(b_img_skel);
title(sprintf('이미지 골격'));
subplot(1,2,2);
imshow(b_img_spur);
title(sprintf('가지치기된 골격 이미지'));
```
이 코드는 MATLAB을 사용하여 이미지 처리 작업을 수행한다.
1. `'Pruning.tif'` 이미지를 읽어 `img` 변수에 저장한다.
2. `bwmorph` 함수를 사용하여 이미지의 골격을 추출하고 (`b_img_skel`), 가지치기를 수행한다 (`b_img_spur`).
- `'skel'` 옵션은 이미지의 골격을 추출하며, 40번 반복한다.
- `'spur'` 옵션은 무한 반복하여 가지치기를 수행한다.
3. 결과를 시각적으로 표시하기 위해 새 창(`figure`)을 만들고, 두 개의 서브플롯(`subplot`)을 생성한다.
- 첫 번째 서브플롯에는 골격 이미지를 표시한다.
- 두 번째 서브플롯에는 가지치기된 골격 이미지를 표시한다.
- `title` 함수를 사용하여 각 서브플롯에 제목을 추가한다.
5. MATLAB 예제
아래 MATLAB 예제에서는 원본 이미지(왼쪽)를 가져와 40번 골격화한 다음 위 MATLAB 코드에 따라 이미지를 가지치기하여 스퍼를 제거한다. 표시된 것처럼(오른쪽) 이로 인해 대부분의 모든 스퍼가 제거되어 더 깨끗한 이미지가 생성되었다.
원본 이미지 | 이미지 골격 | 골격 이미지 가지치기 |
---|---|---|
![]() |
참조
[1]
서적
The image processing handbook
CRC Press
2011
[2]
서적
Digital image processing
Prentice Hall
2008
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com