SIFT : Scalar Invariant Feature Transform

 

영상의 크기와 회전에 불변하는 특징을 추출하는 알고리즘

 

SIFT의 4단계

 

1. Scale-space extrema detection

2. Keypoint localization

3. Orientation assignment

4. Keypoint Descriptor

 

 

1단계 : Scale-space extrema detection, 특징의 크기와 위치를 결정한다.

 - Scale(크기)과 Orientation(방향)에 불변할 것이라고 추측되는 Interest Point(관심영역)를 추출한다. 이걸 위해 가우시안 피라미드가 있어야 하고, DoG(Difference of Gaussian)을 이용한다.

 - SIFT알고리즘을 사용하기 전에 먼저 image를 gray scale로 바꿔주어야한다.

 - Gray 영상으로 전환해 준 후에 그림 1과 같이 DoG를 구성한다. 구성하는 방법은 처음 입력 영상 I(x, y)에 분산 시그마를 갖는 Gaussian Filter G(x, y)를 convolution하기 위해서 Gaussian 영상을 만들어야 한다.

 - 이 수식에서 G(x,y,)는 가우시안 필터이다, 그 다음 입력 연산에 convolution을 하게 되면, Gaussian 영상이 만들어진다.

 - 이런식으로 가우시안 필터를 적용시키면서 하나의 피라미드를 구성한다.

 - Octave : 바뀔 때 마다 가로/2, 세로/2의 크기로 변화된다.

 - 가우시안 영상들의 수는 S+3 즉, 원하는 개수보다 3개 더 지정해 주어야 한다.

  * 따라서 최소 영상 개수는 S=1일 때인 4개의 영상이다. 이렇게 해야하는 이유는 가우시안 영상의 수가 S+3개라고 하면 DoG 영상의 수는 S+2개가 되고, 처음 영상과 마지막 영상은 local extrema를 계산할 수 없기 때문에,, 실제로 local extrema까지 계산할 수 있는 영상은 S개 이기 때문이다.

 - 하지만, 실제로는 최소 S=2를 해주어야 하는데, 4, 2 둘다 맞는데 2를 사용하는게 더 효율적이기 때문이다. (가우시안 필터의 크기가 줄어들어서)

 - extrema : DoG 영상 중에 하나의 중심 픽셀에 이웃한 8개의 픽셀과 위아래 영상의 9개 픽셀들을 각각 비교하여 maxima나 minima를 구하여 extrema인가를 결정하는 것이다.

  * 위 그림 오른쪽

  * 이게 바로 특징점으로 선택이 되는 것, 크기변화에 불변인 특성을 갖게 된다.

  * 3 x 3 x 3 공간에서 중심에 있는 값이 가장 크거나 작을 때 keypoint 후보가 되는 것

  * 주변, 위, 아래 26개의 점과 비교된다. (위, 아래 : 9개 + 점 주변 8개 = 26개)

 

 

2단계 : 특징에 좋지 않은 점들 제거,

 - keypoint의 후보로 만들어진 점 중 matching을 함에 있어 안정적이지 못한 점을 제거한다.

 - 정수영역(integer domain)이 아닌 연속공간에 위치시킨다. 그래서 taylor 급수를 사용한다.

  * taylor 급수 죽여버려 몰라 난 그냥 코드로 볼래,,, 애니웨이~

 - taylor급수로 DoG를 전개하면 이진영상이 연속영상에 근사되는데 이렇게 근사된 영상은 이진 영상과 D값에서 다른 극점을 가지게 되므로, 이의 차이를 가지고 조정해 줄 수 있다.

  * 이 차이가 어느 방향으로든 0.5(픽셀간격 50%)이상이 차이나면, keypoint는 현재의 위치가 아닌 다른 점에 가까우므로, 이동하여 다시 Taylor 급수를 전개해야한다.

 - 이런 근사과정은 크기 x, y좌표 뿐만 아니라, 크기에도 적용된다.

  * 만약 0.5보다 작다면 세밀하게 계산된 D함수(Taylor 전개한 DoG)의 극점의 좌표를 계산해서 keypoint의 위치를 조정한다.

  * 이 과정에서 keypoint의 (x, y, )가 정해진다. 또, D 값이 특정한 값(실험 결과 0.03)보다 작다면 작은 관심영역이므로 keypoint에서 제외시킨다.

 - Edge Elimination : Harris Corner Detection에서 사용했던 Hassian Matrix 사용법과 유사하게 Threshold 값을 주어 edge 임을 확인하고 edge에 가까운 경우 keypoint에서 제외시킨다.

 

 

3단계 : Keypoint들의 방향성분을 결정한다.

 - 각 keypoint의 방향과 그 양을 구한다 어쨋든 방향(Orientation)을 구하는 것

 - Keypoint 주변 pixel의 방향을 다음 두개의 식을 이용하여 계산한다.

 - 그 후 방향(Orientation) 히스토그램을 만든다.

  - 이 때, 가장 값이 큰 것을 해당 keypoint 방향으로 결정하며, 해당 방향의 값이 80%에 해당하는 다른 점이 있다면 또 다른 keypoint를 만들어준다.

  * 즉 동일한 지점에서 여러개의 keypoint가 존재할 수 있다.

 

 

4단계 : Keypoint descriptor, 키포인트 다시표현

 - keypoint를 중심으로 주변에 있는 gradient 값들의 방향을 구한다.

 - 주변의 gradient 값들은 Gaussian Window를 사용해서 가중치를 적용하는데, 그 크기는 keypoint scale의 1.5배에 해당하는 값을 사용한다.

  * 즉, 마스크의 크기가 원래 이미지에 적용되었던 크기의 1.5배가 된다.

 - 이 때 방향 불변을 위해 Gradient 값을 구할 때 사용하는 좌표는 반드시 keypoint의 방향으로 회전시켜서 샘플링한다.

 - 광원 불변을 위해 모든 방향값을 Normalization 해 준다......

 

 

 

아 정리는 했는데

뭔지는 알겠는데 확실하게 감이 오지 않는다..

 

 

'Augmented Reality > Image Processing' 카테고리의 다른 글

Gaussian Pyramid  (0) 2014.06.10
영상처리 영문용어  (0) 2014.06.10
Kalman Filter  (5) 2014.05.27
Gaussian Filter  (0) 2014.05.27
Posted by 긍정왕오킹