본문 바로가기

전생의 기억/영상처리

SIFT Descriptor 알아보기

참조 : http://www.vlfeat.org/api/sift.html#sift-tech-descriptor

SIFT(Scale Invariant Feature Transform) 알고리즘은 Feature를 크기와 방향에 불변하도록 변화(생성)시키는 알고리즘입니다.


다시 이야기 하면, SIFT 알고리즘은 이미지 영역에서 크기와 방향에 불변하도록 Transformed 된 Feature Point를 찾는 알고리즘이라고 이해할 수 있습니다.


SIFT 알고리즘 이전의 Feature Detector 알고리즘으로는 Harris Detector 등이 있었습니다. 하지만, 특징점의 방향과 크기의 변화에 민감하다는 단점이 있었고, 이를 보완하기 위해 고안된 알고리즘이 바로 SIFT 알고리즘입니다.


Feature Detector 알고리즘이 유용한 이유는, 추출된 특징점들을 학습데이터로 하여 Learning 등에 이용하여 특정 문제를 해결하는 모델을 만드는데 이용하거나, 질의 이미지와 원본 이미지간의 feature point를 matching 하여 서로 같은 이미지가 포함되어 있는지를 확인하는 등의 작업에 이용할 수 있습니다. 또한, feature point를 opticalflow와 같은 point tracking 기법에 활용하여 특정 이미지를 트래킹하는데에 사용될 수 있습니다. 이처럼, 추출된 feature point 들을 다양한 분야에 접목시킬 수 있기때문에 매우 중요한 학문이라고 할 수 있습니다. 


SIFT는 이러한 Feature Point Detecting 알고리즘 분야에서 혁신적인 성능 변화를 가져왔던 알고리즘이며, 추출된 Descriptor의 차원수가 128차원으로 매우 높아 지금은 다양한 방법으로 응용된 방식의 기법들이 많이 사용되고 있지만, 많은 알고리즘들의 모태가 되는 알고리즘이라고 할 수 있습니다.


SIFT와 관련된 더 자세한 내용은 글의 맨 위의 좌표를 통해 확인하실 수 있습니다.

-------



이 글에서는 SIFT 알고리즘의 핵심 요소중 하나인  Descriptor(서술자)에 대해 알아보는 시간을 가지겠습니다.


이전 단계에서는 이미지에서 Feature point 들의 위치를 찾았고, 각각의 feature point 들은 크기와, 방향성을 가지게 됩니다. SIFT Descriptor는 128차원의 벡터로 이루어져 있는데, 이를 계산하게 되면 각각의 특징점들에 대해서 조명이나, 위치변화, 크기 변화에도 불변하는 아주 강한 특징을 표현할 수 있게 됩니다.


#하나의 Keypoint에 대한 SIFT Descriptor는 이미지 그레디언트의 3차원 공간 히스토그램입니다.

Image gradient의 의미는, 어떤 이미지에서 명암값이나 컬러값의 변화방향을 의미합니다. 아주 대표적인 예로, Canny Edge Detection 기법에서는 Image gradient 를 이용해서 엣지를 찾습니다.


Descriptor Vector를 계산하기 위해서는, 먼저 특징점 주변의 16 X 16 픽셀에 대해 4 X 4 픽셀단위로 8분위로 표현하는 방향 히스토그램을 구합니다.


각각의 16개 픽셀에 대한 방향 히스토그램들(16개)은 feature Point 주변의 16 X 16 의 샘플 픽셀들에서 얻어진 방향과 크기 값들에 의해 계산되어 집니다. 이후에, 가우시안 가중치 함수를 적용하여 feature point로부터 너무 멀리 떨어진 값들에 대해 가중치를 적용하면, 구해진 히스토그램들 16개에 대해, 하나의 히스토그램당 8개의 데이터를 가지고 있게 되며, 128차원의 단일 벡터로 표현되게 됩니다. SIFT 알고리즘에서 이 단일 벡터가 Feature Point 하나당 가지는 Descriptor Vector입니다. 이후에, 전체 벡터들의 요소에 대해 threshold 값(0.2)을 적용하여 정규화를 하여 조명의 변화에 더 강하도록 안정성을 높여줍니다.


The SIFT descriptor generation [2]. 

<SIFT Descriptor>