Feature Detection and Matching

2023. 11. 14. 20:46컴퓨터비전

728x90

방법

1. Detection: 관심 있는 점을 식별

2. Description: 관심 있는 점들의 특징 벡터를 추출하여 어떻게 다르고 어떻게 같은지 표현

3. Matching: 대응하는 점들을 결정하여 매칭

 

 

특징

  • Repeatability: 같은 특징은 여러 이미지에도 반복적으로 나타나야 한다
    (회전, 크기, 빛 등의 변화가 있더라도)
  • Saliency: 각 특징들은 구별가능한 표현을 가져야 한다
  • Compactness and efficiency: 적은 특징만으로 구별가능해야 한다
  • Locality: 적당히 작은 구역을 특징으로 잡아야 한다.
    (너무 크면 구별하기 어렵다)

 

 

Detection

Harris Corner

: 코너성을 찾기 위한 detector

 

flat: 모든 방향에서 변화가 없음

edge: x 또는 y 방향의 변화량(gradient)만 크다

corner: 모든 방향에서 변화량(gradient)이 크다

 

찾는 방법

1. 어떤 영상의 특정 위치에 코너가 존재한다면 

코너의 주변점들에 대해서 x, y방향 모두 밝기의 차이가 존재할 것.

-> E(u, v)의 값이 크게 나타날 것.

2. 코너가 아님에도 불구하고 밝기 차이가 큰 경우가 있을 수 있다.

따라서 E(u,v)의 값이 모든 방향에서 크게 나타나는지 확인해야 한다.

다음처럼 근사 가능
Ix,Iy는 x,y방향으로 각각 편미분 한 결
다음처럼 변형 가능

 

  • 두 고윳값 중 하나가 매우 클 경우: edge
  • 두 고윳값 모두 매우 클 경우: corner
  • 두 고윳값 모두 매우 작을 경우: flat

 

얼마나 커야 크다고 할 수 있는가?

-> 세타값을 기준으로 말할 수 있다.

알파는 0.04~0.06까지의 임의의 상수이다.

 

 

Harris Detector 사용하기

1. 해리스 코너 응답함수 f 계산하기

2. f > threshold인 점들만 찾기

3. 한 코너에 여러 개의 코너값이 검출될 수 있으므로 지역최댓값만 취하기

 

 

만약 영상이 회전되어 있었다면?

-> Rotation Invariant 하기 때문에 회전시켜 고윳값을 구하고 다시 원상복구시킨다.

 

만약 scale이 달라졌다면?

-> Scale Inavariant 하지 않다.

윈도 크기를 다르게 적용해야 하는데 Harris corner는 그런 방법이 없다

그에 따른 해결법으로 Blob detection이 있다.

 

 

Blob Detection

영상의 크기가 다를 때

알맞은 윈도 크기는 어떻게 찾을 수 있을까?

x축은 윈도우 크기 y축은 함수 f값 

함수 f값의 최고점에 해당하는 윈도우 크기를 지정하면 된다.

 

어떤 함수를 써야 할까?

-> 1개의 안정적인 sharp peak를 가진 함수를 써야 한다.

 

 

Blob Detection을 할 때는 Laplacian of Gaussian 필터를 사용한다.

가우시안을 2번 미분한 것이다.

 

 

특징은 작은 이미지는 작은 필터에서 

큰 이미지는 큰 필터에서 높은 값을 가지게 된다.

 

하지만 Laplacian of Gaussian은 많은 연산을 요구하기 때문에 

비교적 간단하면서도 비슷한 성능을 낼 수 있는 

Difference of Gaussian을 사용한다.

Descriptor

 

이제 feature point들 detection은 끝났다.

다음은 feature point들을 describe 하는 방법을 알아야 한다.

 

SIFT descriptor를 사용한다.

 

1. feature point 주변 gradient의 크기 및 방향을 알아낸다

2. 구한 gradient들로 x축이 방향(각도), 세로축이 크기인 히스토그램을 그린다

3. 히스토그램에서 가장 큰 값을 가지는 방향을 feature point의 방향으로 설정한다

만약 가장 큰 값의 80%보다 큰 방향이 존재한다면, 그 방향도 feature point의 방향으로 설정한다.

4. 아래 그림처럼 feature point를 중심으로 각 픽셀들의 크기와 방향성을 표시한다.

이미지가 회전하면 모든 gradient의 방향이 바뀌게 된다.

따라서 회전된 이미지에서도 변하지 않도록 하기 위해 각각의 4*4 윈도에서 

feature point의 방향을 빼준다.

그러면 각 16개의 윈도우 방향은 feature point의 상대적인 방향이 되므로 

원래의 이미지와 회전된 이미지에서의 feature point는 같게 된다.

 

 

Matching

후보들을 찾기 위해, 모두 비교하여 가장 비슷한 윈도우들을 찾는다.

 

728x90