[알고리즘]

Harris Corner Detector 란 무엇인가

Neo Park 2012. 10. 19. 17:57

 

어떤 특정한 점들의 corresponding point를 얻기 위해선 점의 reliable과 distinctive가 필요하다. 

(corresponding 되는 점들끼리만 matching 되야 하므로)  

이러한 feature point는 
  -Image alignment (homography, fundamental matrix)  
  -3D reconstruction
  -Motion tracking
  -Object recognition
  -Indexing and database retrieval
  -Robot navigation
등에 사용이 가능하다.

 

<Harris corner detector 예>



작은 window(mask)를 써서 이 window가 이리저리 움직였을 때, 그 window 안의 intensity 값들의 차이가 큰 점들을 corner로 쓴다. 

다음 그림을 보면 여러 경우에 대해 설명하고 있다.

 

여기서, intensity 값 차이란, 각 window intensity값 평균의 차이를 말하는게 아니라, window의 각 cell들 값 차이를 더한 값이다.


결국 E(u,v)는 u,v 만큼 shift 된 window 내의 pixel의 intensity와 shift 안된 window 내의 pixel의 intensity 차이를 제곱하여 모두 합한 값이다.(window 함수 1로 무시하고...)  window function은 다음 그림과 같이, window 전 영역에서 1, 또는 window shift가 커질 수록 가중치를 적게 주도록 Gaussian도 가능하다.


우선 w는 무시하고, shift 되는 이미지에 대해 Taylor expansion의 1차항만 써보면

 

이걸 저 위의 수식에 집어넣어서 풀어보면 (w는 무시;;)

 

여기저기 문서들 보다 보니, 이렇게 taylor 전개로 이리저리 전개한 것도 있고, bilinear approximation이라고 맨 아래 줄이 달랑 나온 것도 있었다.  아직 이해가 부족하다.  u,v를 delta x, delta y, 이 M matrix의 eigenvalue를 두 개 구할 수 있는데, eigenvalue를 쓰면서 rotationally invariant 하게 된다.

위 그림처럼, eigenvalues에 대해 3가지 경우를 고려 가능하다.

1. 두 개 다 작아서, local auto-correlation function이 flat 하다. (어느 쪽으로든 E(u,v)값 변화가 작다)  (위 그림에서 회색 부분)
2. 하나만 크고 나머지는 작다, local auto-correlation function이 ridge shaped. 

   한쪽 방향으론 차이가 크나, 다른 수직 방향으론 차이가 작다. (위 그림에서 주황색 부분)  - edge
3. 두 개 다 크다면, auto-correlation function은 sharply peaked, (위 그림에서 파란색 부분)  -corner

이것을 한 값, corner response로 나타내면

이것은 2*2크기의 Hessian matrix로 부터 계산되어 진 것이다.

 

참조 : http://blog.naver.com/PostView.nhn?blogId=sancholok&logNo=30099732975