SIFT와 ORB

Xpert·2024년 2월 25일
0

Computer Vision

목록 보기
2/10
  • 패스트캠퍼스 컴퓨터비전 초격차 패키지 강의 수강 내용을 개인적으로 정리하였습니다.

SIFT


1. Detector : 키포인트를 찾는 과정
2. Descriptor : 방향 정보를 계산하고 최종 피쳐를 뽑아냄


Blob feature를 뽑는데에는 기본적으로 LoG(라플라시안, 2번 미분)를 피쳐뽑는데 사용하지만, 연산량 때문에 DoG(Diffrence of Gaussian)를 사용. LoG에 대한 근사값이지만 더 효율적으로 계산할 수 있어서 사용함

키포인트를 뽑기 위해서 이미지 피라미드라는 것을 만드는데 이는 이미지에 Gaussian blur를 단계적으로 주면서 계층적으로 쌓는 것이다. 이미지의 사이즈가 직접적으로 변하진 않지만, 블러 효과는 마치 초점을 조정 하는 것과 같이 확대 축소 개념을 가질 수 있다고 함
그 후 3차원 피라미드를 윈도우 슬라이딩하면서 각 위치의 3x3x3 영역(Height x Width x Scale)에서 피쳐를 뽑아냄

위에서 구한 키포인트 주변에서 일종의 magnitude(크기)와 theta(각도)로 구성된 벡터장을 만든다. 그리고 이중 가장 dominant한 orientation을 구한다

8 x 8 벡터장을 2 x 2 tile들로 쪼개면 총 16개의 sub matrix가 되며, 각 영역에서 방향들을 8개로 quantize한다. (8방위와 같이 북, 북동, 동,...) 그리고 이들의 갯수를 가지고 8bit에 encoding한다.
예를들어 위 vector에서 맨 앞 8자리를 보면 53412743으로 이루어져있는데 이는 특정 tile 영역에서 각 방향에 dominant한 벡터의 갯수를 의미한다
쉽게 풀어본다면 결국 이미지의 각 local 영역에서의 orientation 정보를 flatten 하여 feature를 만들었다고 볼 수 있다

위와 같이 이미지의 각 keypoint마다 일종의 벡터장이 만들어졌고 이걸 일종의 matching feature로 활용할 수 있다 (descriptor). 즉, 두 이미지가 주어졌다면 각 이미지에서 저러한 피쳐들을 계산하고 유사 피쳐들끼리 mapping 할 수 있다는 의미이다.

이미지에서의 keypoint와 이에 대한 feature인 descriptor가 만들어졌고, 두 이미지에서 각각 이러한 정보들을 가지고 있다고 했을때, 각 keypoint의 descriptor끼리 브루트포스 연산을 통해 서로 비교하면서 일정 수준 이상 유사하면 같은 키포인트로 취급한다. 이때 유사하다는 것을 판정하기 위해 Hamming Distance 등을 이용한다


Geometric 및 photometric한 부분에서 invariance하며, Robust하다.


SIFT를 이용해 두 이미지의 Feature를 서로 matching할 수 있고, 이를 기반으로 영상에서는 영상의 흐름을 optical flow와 비슷하게 계산하거나, image stitching 에 사용하거나 할 수 있다

SIFT Logic


1. 피쳐 추출
2. 첫번째 이미지에서의 각 FD(Feature Descriptor)에 대해서 두번째 이미지의 FD 중 가장 가까운 FD를 찾는다. 이 과정에서 ambiguous한 피쳐를 필터링하기도 하고, 두번째 이미지에서 첫번째 이미지로의 유사도를 double check 하기도 하는 등 검증 과정을 거친다

ORB Match


BRIEF는 rotation에 sensative한 단점이 있고, rBRIEF (ORB) 는 SIFT, SURF에 비해 Robustness, 처리 속도 면에서 이점을 보인다고 한다

profile
Python, CV, ML, Backend

2개의 댓글

comment-user-thumbnail
2024년 4월 7일

안녕하세요! 혹시 패캠 한번에 끝내는 컴퓨터비전 초격차 클래스 패키지를 구입할지 고민중인데 후기가 많이 없네요.. 혹 어떻게 생각하세요?

1개의 답글
Powered by GraphCDN, the GraphQL CDN