Scale-Invariant Feature Transform (SIFT)
크기 불변 특징 변환(SIFT)은 키포인트를 찾고 스케일 및 회전 변화에도 안정적인 128개 값의 디스크립터를 생성하는 고전적인 알고리즘입니다.
크기 불변 특징 변환(SIFT)은 이미지에서 특징적인 로컬 키포인트를 찾고 각 키포인트를 이미지의 크기를 조정하거나 회전해도 대체로 동일하게 유지되는 128개 숫자의 벡터로 표현하는 고전적인 컴퓨터 비전 알고리즘입니다. 이러한 디스크립터를 매칭하면 소프트웨어가 서로 다른 거리와 각도에서 촬영한 동일한 장면의 사진 두 장을 연결할 수 있으며, 이 방식으로 서로 겹치는 사진을 이어 파노라마를 만듭니다. SIFT는 직접 설계한 특징 추출 방식으로, 합성곱 신경망이 학습한 특징 맵과는 다릅니다.
기원과 핵심 개념#
브리티시컬럼비아 대학교의 David Lowe는 1999년 ICCV 논문 로컬 스케일 불변 특징을 이용한 객체 인식에서 SIFT를 소개했으며, 2004년 국제 컴퓨터 비전 저널에 발표한 "스케일 불변 키포인트에서 얻은 특징적인 이미지 특징"에서 이를 상세히 설명했습니다. SIFT 특징은 스케일과 회전의 영향을 받지 않으며, 상당한 수준의 아핀 왜곡, 3D 시점 변화, 노이즈 및 조명 변화에도 강건하게 매칭됩니다. 이 방법은 특허를 받았으며 특허는 2020년에 만료되었습니다. OpenCV는 버전 4.4.0에서 SIFT를 contrib 저장소에서 메인 라이브러리로 옮겼습니다.
사진 속 객체의 크기는 고정되어 있지 않으므로 검출기는 모든 크기의 구조를 찾아야 합니다. SIFT는 강도를 점차 높여 가우시안 블러를 반복 적용하고 옥타브라고 하는 그룹 단위로 다운샘플링하여 스케일 공간을 구성합니다.
SIFT 작동 방식#
알고리즘은 네 단계로 실행됩니다:
- 스케일 공간 극값 검출: 인접한 블러 수준 간의 차이(가우시안 차분)는 블롭 검출기를 근사합니다. 픽셀은 공간과 스케일을 기준으로 26개의 이웃 픽셀 중 최댓값 또는 최솟값이면 후보로 선정됩니다.
- 키포인트 위치 지정: 후보를 서브픽셀 정확도로 정밀화합니다. 불안정한 저대비 점과 에지를 따라 있는 점은 제거합니다.
- 방향 할당: 각 키포인트 주변의 로컬 그래디언트 방향을 히스토그램으로 나타내 지배적인 방향을 결정하고, 이후의 모든 측정은 이 방향을 기준으로 수행합니다. 이를 통해 회전 불변성을 확보합니다.
- 디스크립터 구성: 이웃 영역을 4 x 4 그리드로 나누고 각 셀에 8개 빈의 그래디언트 히스토그램을 저장합니다. 이에 따라 총 4 x 4 x 8 = 128개의 값이 생성되며, 조명에 대한 민감도를 낮추도록 정규화합니다.
디스크립터 매칭은 유클리드 거리를 비교합니다. Lowe의 비율 테스트는 가장 가까운 이웃이 두 번째로 가까운 이웃보다 확실히 가까운 경우에만 매칭을 유지합니다. k-최근접 이웃 검색에서 k = 2로 설정하면 두 거리를 모두 구할 수 있습니다.
import cv2
from ultralytics.utils import ASSETS
# Load a sample image in grayscale and a half-size copy
img = cv2.imread(str(ASSETS / "bus.jpg"), cv2.IMREAD_GRAYSCALE)
small = cv2.resize(img, None, fx=0.5, fy=0.5)
# Detect keypoints and compute 128-dimensional descriptors
sift = cv2.SIFT_create()
kp1, des1 = sift.detectAndCompute(img, None)
kp2, des2 = sift.detectAndCompute(small, None)
# Match half-size descriptors to full-size ones, then apply Lowe's ratio test
pairs = cv2.BFMatcher().knnMatch(des2, des1, k=2)
good = [m for m, n in pairs if m.distance < 0.8 * n.distance]
print(f"{len(good)} of {len(kp2)} half-size keypoints matched at full size")출력된 개수는 절반 크기의 이미지에서 찾은 키포인트 중 전체 크기 이미지에서도 다시 인식된 키포인트의 수를 보여 주며, 이는 스케일 불변성이 작동하는 예입니다.
응용 분야#
SIFT는 기하학적 비전 작업에서 기본 로컬 특징으로 자리 잡았습니다:
- 파노라마 스티칭: Brown과 Lowe의 자동 파노라마 스티칭(IJCV 2007)은 겹치는 사진의 SIFT 특징을 매칭하고 호모그래피를 추정해 사진을 정렬합니다. 이 정렬 단계는 이미지 정합이라고 합니다.
- 3D 재구성: Photo Tourism(Snavely, Seitz, Szeliski, 2006)은 관광 사진 전반의 SIFT 특징을 매칭하고 극선 기하학을 사용해 카메라 포즈와 희소한 3D 구조를 복원합니다.
- 로봇 위치 추정: Se, Lowe, Little(2001)은 모바일 로봇의 위치 추정과 매핑에 SIFT 랜드마크를 사용했으며, 이는 현대적인 시각 SLAM의 전신입니다.
- 인스턴스 인식: Lowe의 2004년 논문은 복잡하고 일부가 가려진 장면에서 매칭된 특징이 최소 3개만 있어도 장난감 기차와 개구리를 인식합니다.
Ultralytics YOLO 객체 추적에서 BoT-SORT는 프레임 간 카메라 움직임을 보정하며, 추적기 설정에서 gmc_method: sift을 설정하면 기본 희소 광학 흐름 대신 SIFT 매칭을 사용해 움직임을 추정합니다.
SIFT와 관련 방법 비교#
SIFT는 여러 뷰에서 동일한 실제 지점을 매칭하므로 대응점과 기하학적 분석에 적합합니다. 반면 객체 검출은 객체의 범주와 위치를 예측합니다. 템플릿 매칭은 고정된 패치를 이동해 비교하므로 스케일이나 회전이 바뀌면 성능이 저하됩니다.
SIFT는 ORB보다 느립니다. Rublee와 동료들이 2011년에 SIFT 및 SURF의 대안으로 소개한 ORB는 이진 디스크립터입니다. 또한 SIFT는 텍스처가 없는 표면과 큰 시점 변화에 취약하며, 범주 수준 인식에서는 대부분 학습 모델로 대체되었습니다.
Lowe의 2004년 테스트에서는 거리 비율이 0.8을 초과하는 매칭을 제거했을 때 무작위 스케일 및 회전 변화, 30도 깊이 회전, 2% 노이즈가 있는 이미지에서 40,000개의 키포인트를 대상으로 오매칭의 90%가 제거되고 정매칭은 5% 미만만 제외되었습니다.










