본문 바로가기

IT 기타/시각 개론

[시각처리] 이미지의 스켈레톤(Skeleton, 뼈대) 구하기

 

 

 

<목표> [시각처리] 이미지의 스켈레톤(Skeleton, 뼈대) 구하기

     

   

  시각 개론 시간에 이미지의 뼈대(Skeleton)에 관해서 배워보았습니다. 스켈레톤은 흔히들 아시는 데로, 뼈대입니다. 오보젝트 이미지가 있으면, 해당하는 이미지의 뼈대를 구해서 중심점을 찾아냅니다. 문자 인식을 위해서도 사용되는 방법이기도 합니다. 문자의 스켈레톤을 구해서, 가는 뼈대로 추려내고, 그것을 추정해서 문자를 인식하는 형태로 사용되기도 합니다.

 

뼈대(Skeleton) 구하기 (사진 출처 : http://www.structuralwisdom.com/)

 

뼈대(Sekeleton) 예

 

 

  간단한 거리 변환을 통해서 이미지를 분석하고, 분석한 자료를 토대로, 스켈레톤 이미지를 추려내어 나타내는 프로그램을 살펴보겠습니다. 알고리즘 자체가 워낙 단순하기 때문에, 특별한 공식보다는 이야기로 풀어나가는 방향대로 설명하겠습니다.

 

 

STEP 1  거리 변환(Distance Transforms) 알고리즘

     

   거리 변환은 크게 세 가지로 나타낼 수 있습니다. 아래를 보시면 간단히 이해할 수 있으실 겁니다.

 

거리 변환 방식

 

거리 변환을 위해서 Chessboard distance 방식을 이용하여 아래와 같이 나타냅니다.

 

 

  사각형의 이미지가 있다고 가정한다면, 이미지가 있는 부분(1로 나타냄)에서 자신의 주위, 네 방향을 봅니다. 네 방향 중에가 가장 큰수와 자신이 처음으로 가지고 있던 초기값을 더하면 위와 같은 형태가 됩니다. 즉, (1,1)에서의 거리값을 본다면, 자신의 주위가 모두 1입니다. 즉, 1이 가장 큰수이고, (1,1)에서의 초기값인 1과 더하면 2가 되는 것입니다. 이렇한 방식으로 여러 번 거치면, 맨 오른쪽의 그림과 같이 나타납니다. 그러면 이미지의 거리 변환은 모두 끝난 것이 됩니다.

 

 

STEP 2 스켈레톤 변환 알고리즘

     

   이제 위와 같이 변한 이미지를 토대로 스켈레톤을 뽑아낼 수 있습니다. 현재 자신의 주위를 비교하여, 현재 자신이 가지고 있는 수가 그 주위의 값들 중 가장 큰 수와 크거나 같을 때, 그 점은 스켈레톤 좌표가 됩니다. 그것을 모두 연결하면, 스켈레톤을 뽑아낼 수 있습니다. 아주 간단하죠?

 

 

STEP 3 자바를 이용한 스켈레톤 프로그램

 

   이런 방식을 통해 구현해본 프로그램 입니다. 간단하게 마우스를 이용하여 그림을 그릴 수 있으며, 변환을 시작하면, 스켈레톤 그림이 빨간색으로 표시가 됩니다.

 

스켈레톤 구하기 프로그램 예(1)

 

 

스켈레톤 구하기 프로그램 예(2)

 

 

 

<마무리> [시각처리] 이미지의 스켈레톤(Skeleton) 구하기

 

   간단한 이미지의 스켈레톤 구하는 것에 대해 알아보았습니다. 처음으로는 거리 변환 알고리즘을 이용하여, 오브젝트 이미지를 거리 변환을 이용하여 숫자 형태로 변환시킵니다. 그리고 변환이 없을 때까지 반복해서 변환합니다. 그리고 나서, 자신의 주위에 있는 값들이 주위에 존재하는 값보다 같거나 클 경우에 스켈레톤 포인트로 지정하고, 그 지점을 연결하면, 이미지의 뼈대를 구할 수 있습니다.

 

 

 

[참고자료]  

     

 

Created by 맥박