SIFT/키포인트 검출기

Flash·2022년 7월 30일
0

SIFT Keypoint Descriptor

SIFT(Scale Invariat Feature Transform)은 이미지의 크기, 회전과 같은 이미지 변형에
영향을 받지 않는 Keypoint를 추출하는 알고리즘이다.

이렇게 Keypoit를 찾아 두 이미지를 매칭하여 비슷한 부분을 찾아낼 수 있다.

SIFT를 이용하여 파노라마 영상을 만들 수도 있고,
두장의 이미지가 수평적인 차이를 가진 스트레오 이미지 매칭에도 사용할 수 있다.

SIFT 알고리즘에 대한 내용에 앞서 KeypointKeypoint descriptor
간단하게 정리한다.

특징 점(Key points)

  • 이미지에서 특징이 되는 부분, 이미지 매칭을 시도할 때 이 특징 부분을 비교하여 매칭을 확인한다.
  • 보통 물체의 모서리나 코너로 삼는다.
  • 객체의 좌표, 주변 픽셀과의 관계에 대한 정보를 가지고 대표적으로 size와 angle 속성이다.
  • 코너 점의 경우에 코너의 경사도와 방향도 속성으로 지님

특징 디스크립터(Key points Descriptor)

  • 특징 점 주변 픽셀을 일정한 크기의 블록으로 나누어 블록에 속한 픽셀의 그레디언트 히스토그램 계산, 특징 점 주변의 밝기, 색상, 방향, 크기 등의 정보 포함
  • 이를 추출하는 알고리즘에 따라 변화가 있을 수 있으며 일반적으로 8방형 경사도를 표현

    특징 디스크립터 구하는 함수


SIFT(Scale-Invariant Feature Transform)

SIFT의 흐름에 대해 공부했다

1. Scale Space 만들기
scale에 대해 설명하면 작은 스케일은 가까이서 세세하게 이미지를 보는 것을 말하고
큰 스케일로 이미지를 본다는 것이 좀 떨어져서 전체적인 이미지를 보는 것이다.
이 여러 스케일의 이미지들을 모아놓은 것을 Scale space라고 한다.
2. DoG(Difference of Gaussian) 연산하기
LoG(Laplacian of Gaussian)를 이용하여 Keypoint를 구할 수 있지만 연산량이 많기 때문에 SIFT에서는 DoG(Difference of Gaussian)을 이용하여 비슷한 성능을 낸다.
이 연산은 Scale space에서 얻은 같은 옥타브 내에 인접한 두 개의 블러된 이미지들끼리 차이를 구하는 연산이다.

3. 나쁜 keypiont 제거하기
나쁜 키포인트는 낮은 Contrast를 갖는 경우와 엣지 위에 존재하는 것들이다. 엣지는 노이즈일 가능성이 높기 때문에 Keypointㄹ 사용하지 않는다. 따라서 최대한 코너 값을 검출하려는 노력이 필요하다.

4. Keypoint에 방향 할당하기
scale space를 만들고 DoG연산을 하면서 Scale Invariance 할당을 했기 때문에 rotation invariance를 만족시키는 과정이 필요하다.
과정은 Keypoint 주변의 Gradient 방향과 크기를 모아서 크기에 따라 가중치를 준다.
총 36개의 범위에서 가장 큰 값을 가지는 각도를 방향으로 선택하고,
가장 높은 값을 지니는 방향의 80% 이상의 크기를 가지는 방향이 있다면 그 방향도 추가적인 방향으로 인정해준다.

5. 최종 Keypoint 산출하기
각 Keypoint에 특별한 정보를 부여하는 데 이 특징을 128개의 숫자로 표현한다. 128차원 벡터
Keypoint 주변을 16*16 윈도우를 만들고 이 윈도우를 16개의 4*4 윈도우로 세팅한다. 각 4*4 윈도우를 8개의 방향으로 나누어 위에서 한 과정처럼 8개 방향에 대한 크기 정보를 얻는다. 이것이 8-bin orientation histogram
이렇게 되면 총 16*8(16개의 8방향 정보) 개의 Feature Vector를 얻게 되고 이것이 keypoint의 정보가 된다. 이것이 Keypoint Descriptor
이렇게 하면 회전 의존성이 생기기 때문에 Keypoint의 방향을 각 gradient에서 빼주면 모든 gradient는 keypoint의 방향에 상대적으로 설정된다.
마지막으로 정규화를 통해 밝기에 대한 의존성까지 제거하면 정규화 과정을 거치면 SIFT 특징을 얻어낸다.

출처 [Boosting of factorial correspondence analysis for image retrieval](Boosting of factorial correspondence analysis for image retrieval)

다음 글에서는 OpenCV를 이용하여 SIFT 실습을 진행한 결과를 포스팅하려고 한다.

https://bkshin.tistory.com/entry/OpenCV-27-%ED%8A%B9%EC%A7%95-%EB%94%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%84%B0-%EA%B2%80%EC%B6%9C%EA%B8%B0-SIFT-SURF-ORB?category=1148027
https://kionkim.github.io/2018/06/08/Convolution_arithmetic/
https://ballentain.tistory.com/47
https://hydragon-cv.info/entry/Scale-Invariant-Feature-Transform-SIFT

profile
Whiplash We Flash

0개의 댓글