코딩 및 기타/이미지

SIFT (Scale-Invariant Feature Transform)

정지홍 2025. 1. 13. 13:05

 

scale space이미지들. 출처: Computer Vision for Busy Developers ❘ by Vinny DaSilva ❘ Medium
하나의 이미지를 여러 스케일로 보고 이를 쌓는다.(가우시안 블러링 적용 ) 출처: Computer Vision for Busy Developers ❘ by Vinny DaSilva ❘ Medium

스케일 공간 scale-space

  • 영상처리시에 오직 하나의 스케일의 이미지가 아니라, 여러 스케일로 본 이미지들을 가지고 작업하는 경우가 많다. 이때 여러 스케일의 이미지들을 모아 둔 것을 scale-space라고 한다.
  • scale-space를 하는 방법에는 image-pyramid , gaussian blurring등이 존재

 

가우시안 블러의 sigma값에 따른 이미지. 출처: Computer Vision for Busy Developers ❘ by Vinny DaSilva ❘ Medium
출처: Difference of Gaussian is obtained as the difference of Gaussian... ❘ Download Scientific Diagram

DoG ( differenece of Gaussian )

  • 이미지에서 edge를 감지하거나 특징을 추출하기 위해 사용하는 간단하고 효과적인 방법
  • 두개의 다른 스케일에서 Gaussian 필터를 적용한 이미지를 빼서 edge를 강조함

 

특징점 기술 descriptor

  • 단순히 이미지위에 특징점을 그리는 것이 아니라, 각 특징점 주변의 패턴과 데이터를 수치화해서 고유한 벡터descriptor로 표현하는 과정이다. 이는 나중에 특징점을 비교하거나 매칭하는데 사용한다.
  • keypoints 특징점이란?
    • 이미지 내에서 눈에 띄는 지점의 좌표,크기,방향등을 나타내는 정보이다
    • 특징점 기술은 각 keypoint주변의 픽셀 강도 값(기울기 방향값)을 수치적으로 표현한 벡터
    • decsriptor는 이미지를 비교하거나 매칭을 하기 위한 고유한 서명 역할을 한다.

 

 

SIFT

  • 이미지의 특징점을 추출하고 기술하는데 사용되는 알고리즘이다.
  • 크기조정, 회전 , 조명 변화 등 다양한 이미지 변환에 강건한 특징점을 제공해서 객체인식,SLAM, 이미지 매칭 등 다양한 분야에서 사용
  • 특징
    • 불편성
      • 스케일,회전,조명 변화등 약간의 변형에도 강건하다.
    • 효율성
      • 이미지의 고유한 특징을 잡아내어서, 다른 이미지와 구별할 수 있다.
    • 고유성
      • 대규모 데이터셋에서도 비교적 효율적으로 특징점을 추출하는 것이 가능하다.
  • 단점
    • 높은 계산비용
    • 극단적 조명 변화에는 취약
      • 단점을 개산하여 개선된 알고리즘에는 SURF , ORB , KAZE등이 존재
  • 알고리즘 단계
    • 1. 스케일 공간 생성
      • 1-1. 이미지 내에서 다양한 크기의 특징점을 탐지하기 위해서 스케일 공간을 생성한다.
      • 1-2. 이를 위해서 가우시안 블러를 반복적으로 적용하며 이미지를 부드럽게 만들고, 블러링 된 이미지 간의 차이(DOG , differnece of Gaussian)를 계산함.
      • 1-3. DOG를 통하여 극대값과 극소값을 찾고 이들을 잠재적 특징점으로 식별
        • 만약, 스케일 공간이 8개 레이어로 구성되어 있다면, DoG 이미지는 해당 레이어에서 7개가 생성.
    • 2. 특징점 검출 ( 그림 1 참고 )
      • DoG에서 추출한 극대/극소값을 후보로 삼아서 위치와 스케일을 정확히 계산함.
        만약에 극값이 안정적이지 않으면(가장자리 영역 or 노이즈에 민감한 특징점) 이를 제거함.
        • 아래 그림1처럼, target point 주변의 26개의 pixel값과 target 지점의 pixel값을 비교한다. 만약에 target의 pixel값이 가장 크거나 작은 경우에 특징점으로 판단한다.
    • 3. 특징점 방향 할당.
      • 각 특징점 주변의 기울기 방향을 계산해서 주된 방향을 설정함.
        • 위의 단계는 특징점이 회전에 대해서 불변성을 가지게 해준다.
    • 4. 특징점 기술 ( descripor 생성 )
      • 특징점 주변 픽셀의 기울기 및 방향 정보를 기반으로 128차원의 특징 벡터를 생성함.
        • 위의 생성한 벡터는 특징점의 고유한 서명을 제공하며, 이미지 매칭 과정에서 사용됨
      • 즉, Difference of Gaussian (DoG)를 기반으로 특징점(키포인트)을 검출하고, 검출된 특징점을 중심으로 방향 및 주변 정보를 분석하여 Descriptor(기술자)를 생성하는 것
    • 5. 매칭
      • 두 이미지에서 추출한 SIFT 특징점 벡터를 비교해서 유사도를 측정함.
        • 주로 유클리디안 거리 or knn을 사용한다.
      • 매칭을 왜???
        • 만약에 이미지를 매칭한다하면, 두개의 이미지에서 동일한 객체나 장면을 찾기 위해서
          • ex) 한 이미지에서 다른 각도나 위치에서 찍은 이미지를 비교하고 일치하는 부분을 찾음
        • 추적 : 비디오에서 특정 물체나 사람을 추적할 때, 특정 프레임에서 검출된 특징점들을 다른 프레임에서 추적하여 물체의 이동을 파악
        • 로봇비전: 로봇이 주변환경을 인식하고, 장애물을 피하거나 경로를 찾을때 보다 정확하게 작업을 수행할 수 있게 도와주기 때문
          • 장애물 감지 및 회피
          • 경로 추적 및 네비게이션

그림1. 특징점 검출

import cv2

# 1. 이미지를 읽고 그레이스케일로 변환
img = cv2.imread( 'image.jpg' )
gray = cv2.cvtColor( img , cv2.COLOR_BGR2GRAY )

# 2. sift 검출기 초기화
# sift객체를 만들고, contrast 및 edge 감도를 설정
sift = cv2.SIFT_create()
sift.setContrastThreshold( 0.25 ) # 특징점 검출 시 constrast대비 임계값 설정
sift.setEdgeThreshold( 5 ) # edge 임계값 설정

# 3. 특징점 검출 및 디스크럽터 계산
# detectAndCompute()는 이미지에서 특징점 keypoints를 찾고 해당 descriptor를 계산한다.
keypoints , descriptor = sift.detectAndCompute( img , None ) # 이미지에서 keypoints와 descripot를 계산, none은 마스크가 없음을 의미.

# 특징점 정보 출력
for x in keypoints:
    print( "({:.2f},{:.2f}) = size {:.2f} angle {:.2f}".format(x.pt[0], x.pt[1], x.size, x.angle) )

# 4. 특징점을 이미지에 그림
# drawKeypoints는 원본 이미지에 검출된 특징점을 시각적으로 표시함.
# None은 출력 이미지이다.
img_kp = cv2.drawKeypoints( gray , keypoints , None , flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS )

# 출력 이미지 크기 조정
new_width, new_height = 1200, 900  # 원하는 출력 크기 (너비, 높이)
resized_img = cv2.resize(img_kp, (new_width, new_height))  # 이미지 크기 조정

# 조정된 크기의 이미지를 출력
cv2.imshow("Keypoints (Resized)", resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

'코딩 및 기타 > 이미지' 카테고리의 다른 글

U-Net  (0) 2025.01.15
SURF (Speeded-Up Robust Features)  (0) 2025.01.14
HOG ( Histogram of Oriented Gradients )  (0) 2025.01.10
canny edge detection  (0) 2025.01.09
가우시안 필터 Gaussian Filter  (0) 2025.01.09