이전에 영상 와핑(Warping)을 공부하고 구현을 하면서 직접 영상에서 코너(corner)를 찾는 것이 매우 귀찮았다.

 

그래서 코너점 검출하는 방법이 당연히 있을 것이니 알아보았다.

 

물론 깊게 공부하여 정리하는 것은 아니고, 각 알고리즘의 논문들을 하나씩 읽어볼 계획이다.

 

여기서는 간단하게 어떠한 방식이다 정도만 정리하려고 한다.

 

* Harris Corner

 

  - 영상에서 작은 위도우를 조금씩 이동(Shift)시켰을 때, 코너점의 경우는 모든 방향으로 영상변화가 커야한다라는 것을

    기반으로 한다.

 

  - 2 x 2 행렬 M의  두 고유값(eigenvalue)를 구하고, 두 값이 모두 큰 값이면 코너점으로 판단한다.

 

  - 두 고유값 중에서 하나는 크고 하나는 작은 값이면 엣지(edge) 영역으로 판단한다.

 

  - 두 고유값이 모두 작은 값이면 'flat'한 영역으로 본다.

 

  - Harris Corner는 영상의 평행이동, 회전 변화에는 불변성을 뛰고, affine 변환이나 조명 변화에도 어느정도 강인하다.

 

  - 영상의 크기 변환에는 영향을 받는다.

    -> Harris Corner 검출 후 스케일 변화에 대해 Laplacian이 극대인 점을 선택하는 방식(Harris-Laplacian)이 이후 발표됨.

 

 

* shi & Tomasi

 

  - Harris 방법처럼 M의 두 eigenvalue를 같이 고려하는 것보다는 두 고유 값중 최소값만을 고려하는 것이 더 좋다는 것을

    이용한다.

 

 

* SIFT(Scale Invariant Feature Transform)

 

  - Harris의 스케일 변화에 민감한 문제를 해결하기 위해 연구되었다.

 

  - DoG(Difference of Gaussian)를 기반으로 이미지 내에서 뿐만 아니라 스케일 축으로도 코너성이 극대인 점을 찾는다.

 

  - 이미지 피라미드를 구축한 후 모든 스케일에서 코너성을 계산한 후 각 스케일마다 Laplacian 함수값을 계산한다.

 

  - 스케일 축으로 극대(또는 극소)인 점들을 특징점으로 선택한다.

 

  - 속도 문제로 실제 스케일 모두를 계산하지는 않고, DoG를 이용하여 스케일별 Laplacian을 근사적으로 계산하여 이용한

    다.

    -> DoG는 찾아보지 않았지만 이름으로 봤을 때 Gaussian의 차이값으로 Laplacian의 근사값을 구할 수 있는 것 같다.

 

  - OpenCV에 함수로 존재한다.

 

 

 

* FAST(Features from Accelerated Segment Test)

 

  - 어떤 점 p가 코너(croner)인지 여부를 p를 중심으로 하는 반지름 3인 원 상의 16개 픽셀값을 보고 판단한다.

    (영상에 마스크를 씌워서 판단하는 것과 비슷한 맥락인 것 같다.)

 

  - p보다 일정값 이상 밝은 ( > p+t ) 픽셀들이 n개 이상 연속되어 있거나 또는 일정값 이상 어두운 ( < p-t ) 픽셀들이 n개

    이상 연속되어 있으면 p를 코너점으로 판단한다.

 

 

* AGAST(2010)

 

  - FAST의 성능을 약 20~30% 정도 더 개선시킨 방법

 

 

이외에도 SIFT, SURF, ORB 등 많은 방법이 있다.

 

 

후에 알아볼 것이 더 많고 더 깊게 공부해봐야 할 것이다. 지금은 와핑을 먼저 공부해야 한다..

 

 

 

출처 : 다크프로그래머님의 포스트를 보고 공부했다.

+ Recent posts