본문 바로가기
공부/컴퓨터비젼

[컴퓨터 비젼] SIFT(Scale Invariant Feature Transform

by 맑은청이 2021. 4. 12.
728x90
반응형

SIFT(Scale Invariant Feature Transform)

: 이미지의 크기와 회전(상하좌우로 이동이 일어난)에 불변하는 특징을 추출하는 알고리즘 

서로 다른 두 이미지에서 SIFT 특징을 추출하여 각각 유사한 특징끼리 매칭하면 이미지끼리 대응되는 부분을 찾을 수 있다는 것이 기본 원리 

 

 

두 이미에 크기가 다르고 회전이 다른 두 이미지 중에 일치하는 내용을 갖고 이미지에 동일한 물체를 찾아서 매칭해줄 수 있는 알고리즘

아래 이미지는 같은 책을 찾아내어 매칭한 것을 볼 수 있음  

크기, 회전도 다르고 다른 물체에 가려져 있기도 하지만 일치되는 부분을 잘 찾아서 매칭

이것이 SIFT의 장점임

 

SIFT로 이미지 매칭한 예

이 알고리즘은 파노라마를 만들 때도 사용됨. 

 

SIFT의 간략한 순서

1. Scale space 제작

2. Difference of Gauusian (DoG) 연산

3. keypoint 찾기

4. 안 좋은 keypoint 제거

5. keypoint들에 방향 할당 

6. 최종 SIFT Features들 산출 

 

 

 


1. Scale space 제작 

 

Scale space 이란? 

여러 스케일(크기)의 이미지들을 모아놓은 것 

 

- 원본 이미지를 두 배로 만든 다음에 점진적으로 Blur 처리 

    원본 이미지를 두배하는 이유는 DoG 이미지를 만들 때 같은 옥타브(같은 크기의 이미지 그룹) 안에 인접한 2개의 Blur 이미지를 활용하고 이때 만들어짐 DoG 이미지들 중에서 인접한 세 개의 DoG 이미지를 활용하여 Keypoint 를 찾음 

- 원본 이미지를 반으로 축소시킨 다음 점진적으로 Blur 처리

Scale space 만든 결과

 

Blur 처리는 가우시안 연산자와 이미지를 컨볼루션 연산


2. DoG연산 

 

1번 과정을 통해 다양한 scale 값으로 Gaussian 연산처리된 옥타브들의 이미지를 얻음

Difference of Gaussian(DoG)를 통해 Edge 정보, Corner 정보 도출 

DoG는 매우 간단, 전 단계에서 얻은 옥타브(같은 크기의 이미지 그룹)내에서 인접한 두개의 Blur 이미지끼리 빼주면(-) 됨

SIFT 내 DoG연산


3. keypoint 찾기 

DoG 이미지 내에 극대값, 극소값드의 대략적 위치찾음

한 픽셀에서 극대값,극소값을 결정하는 동안 세장의 DoG 이미지 필요

체크할 DoG 이미지와 scale이 한단계 크고 작은 DoG 이미지 필요 

체크할 픽셀 주변의 8개 픽셀과 scale이 한단계씩 다른 두 DoG 이미지에서 체크하려고 하는 픽셀과 가까운 9개씩해서 

총 26개를 검사 

이 값 중에 가장 크거나 가장 작을 때 해당 픽셸은 극소값이거나 극대값임 

DoG 이미지에서 극소값, 극대값 찾는 원리 


4. 안 좋은 keypoint 제거

 

찾은 극값들 중에 활용가치가 떨어지는 극 값을 제거해줘야 함 

두 가지 기준이 존재

첫번재 낮은 코트라스트를 갖고 있는 값 제거

두번째는 엣지 위에 존재하는 것 제거 

 

낮은 코트라스트의 keypoint를 제거하는 과정은 간단히 DoG 이미지에서 keypoint들의 픽셀의 값이 특정 값(threshold)보다 작으면 제거 

 

두번째로는 엣지 위 존재하는 keypoint 제거 

확실하고 안전한 코너점들만 keypoint로 남겨주기 위해 제거 

keypoint 에 수직 수평 그레디언트를 계산하여 방향에 따른 변화량을 계산 하고 각 방향의 차이가 크면 엣지로 판단 

 


5. keypoint들에 방향 할당 

 

이때까지 찾은 keypoint들은 scale invariance를 만족시킴

여기에 방향을 할당해주어 rotation invariance 를 갖게 하는 과정 

 

방법 : 각 keypoint 주변의 그레디언트 방향과 크기를 모음, 후 두드러지는 방향 찾아서 keypoint 에 할당

하나의 keypoint 픽셀 주변에 윈도우를 만들어 그 keypoint에 scale 값으로 가우시안 블러링 처리

 

방향을 할당하는 방번은 그레디언트의 방향에 대한 히스토그램을 만들어 가장 높은 bin 방향의 keypoint 방향으로 할당

가장 높은 bin 의 80% 이상의 높이를 갖는 bin이 있다면 그 방향도 keypoint 방향으로 인정 

 


6. 최종 SIFT Features들 산출 

 

이제 keypoint들을 식별하기 위해 특별한 정보 부여해야함

각각 keypoint의 특징을 128개의 숫자로 표현 

16개의 작은 윈도우에 속한 픽셀들의 그레디언트 크기와 방향을 계산

전단계와 비슷하게 히스토그램을 만드는데 이번에 bin 을 8개만 세팅 

360도를 8개로 쪼개서 사용 

8개의 bin 이니 16x8 = 128 의 숫자(feature vector) 얻음

이 값이 keypoint의 지문 

이는 이미지가 회전할 경우 모든 그레디언트 방향이 변경 

회전 의존 문제를 해결하기 위해 keypoint의 방향을 각각의 그레디언트 방향에서 뺌 

각각의 그레디언트 방향은 keypoint방향에 상대적 

밝기 의존성은 정규화를 하여 해결 

728x90
반응형

'공부 > 컴퓨터비젼' 카테고리의 다른 글

[컴퓨터비젼] 13. Stereo  (0) 2021.04.18
[컴퓨터 비젼] 11.Single-View Modeling  (0) 2021.04.18
[컴퓨터 비젼] 10. Panoramas  (0) 2021.04.12
[컴퓨터비젼] 9. RANSAC  (0) 2021.04.12
Canny Edge 설명 & 구현코드  (0) 2021.04.06