SIFT란? AI에서 크기와 회전이 달라진 이미지의 특징을 찾아 비교하는 방법
TL;DR
SIFT는 이미지의 크기와 회전 변화에도 다시 찾기 쉬운 국소 특징점과 그 주변의 숫자 표현을 만드는 컴퓨터 비전 알고리즘입니다. 두 사진에서 같은 무늬를 대응시키는 데 쓰며 신경망을 훈련하지 않고 특징을 추출합니다. 특징점 위치와 128차원 기술자를 얻은 뒤 별도의 매칭과 기하 검증을 거칩니다. 사물의 이름이나 사람의 신원을 자동으로 알아내는 기능은 아니며 큰 시점 변화·흐림·반복 무늬에서는 실패할 수 있습니다.
핵심 3줄 요약
- 핵심 1
위치와 주변 무늬를 함께 기록합니다. 특징점은 좌표·크기·방향을 담고 기술자는 주변 밝기 변화의 분포를 숫자로 표현합니다. - 핵심 2
크기와 회전의 차이를 줄여 비교합니다. 여러 스케일에서 점을 찾고 방향을 맞춰 기술합니다. 모든 촬영 변화에 대한 완전한 불변성은 아닙니다. - 핵심 3
매칭과 검증은 별도 단계입니다. 가까운 기술자를 찾은 뒤 모호한 후보와 기하적으로 맞지 않는 연결을 걸러야 합니다.
이 글에서 다룰 내용
- SIFT의 한 문장 정의
- 기준 사진과 진열대 사진으로 보는 쉬운 예시
- 스케일 공간·특징점·방향·기술자의 작동 원리
- 주요 설정과 128차원 출력의 뜻
- ORB·이미지 임베딩·광학 흐름과의 차이
- 이미지 대응의 사용처와 실전 체크리스트
- 반복 무늬·가림·기하 검증의 주의점
SIFT를 한 문장으로 정의하면 무엇인가요?
SIFT는 이미지의 여러 크기 수준에서 안정적인 국소 특징점을 찾고 각 점의 방향을 기준으로 주변 변화의 분포를 기술해 다른 이미지와 비교하는 방법입니다.
영문명은 Scale-Invariant Feature Transform이며 스케일 불변 특징 변환 또는 척도 불변 특징 변환으로 옮깁니다. David G. Lowe의 원 논문은 같은 장면을 크기와 방향을 달리해 촬영했을 때 다시 대응시키기 쉬운 특징을 설명합니다. 여기서는 OpenCV의 SIFT 안내와 버전을 고정한 API를 기준으로 살펴봅니다.
국소 특징은 사진 전체의 의미를 한꺼번에 요약하는 표현과 다릅니다. 글자의 모서리, 무늬의 접점처럼 작은 영역에서 구분할 만한 밝기 변화가 있는 위치를 고릅니다. 특징점이 있다고 그 점이 사람의 관절이거나 상품의 중심이라는 뜻은 아닙니다.
한 줄 정리: SIFT는 이미지 안에서 다시 찾을 만한 점과 그 주변의 무늬를 만드는 특징 추출 방법입니다. 두 사진의 연결은 이후 매칭 단계에서 구합니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 상품 포장 앞면의 기준 사진을 찍고 진열대 사진에서 같은 포장 무늬를 찾는다고 가정해 보겠습니다. 기준 사진은 크게 찍었지만 진열대 사진의 상품은 작고 조금 기울어져 있습니다. 아래는 원리를 설명하는 가정 예시이며 SIFT를 실행한 측정값은 아닙니다.
SIFT는 두 사진에서 각각 구분할 만한 점을 찾습니다. 포장 글자의 모서리나 복잡한 그림의 일부에는 점이 생길 수 있고 아무 무늬 없는 면에는 점이 적을 수 있습니다. 사진마다 점의 위치·크기·방향과 주변 무늬를 나타내는 기술자를 기록합니다.
그다음 기준 사진의 기술자와 진열대 사진의 기술자 사이 거리를 비교합니다. 주변 무늬가 비슷한 점은 가까운 후보가 됩니다. 여러 점이 포장 앞면의 위치 관계를 일관되게 설명한다면 같은 인쇄면을 찾았다는 근거가 더 강해집니다.
똑같은 상품 상자가 여러 개라면 작은 무늬만으로 어느 상자인지 구별하기 어려울 수 있습니다. 줄무늬 진열대가 포장의 무늬와 잘못 연결될 수도 있습니다. SIFT의 출력에 상품 이름이나 확정 판정이 들어 있다고 생각하지 않고 연결된 점의 분포를 확인합니다.
쉬운 예시: 사진마다 눈에 띄는 무늬에 표시를 붙이고 그 무늬 주변의 밝기 변화를 기록한다고 생각하세요. 표시의 숫자 표현을 비교한 뒤 여러 연결이 함께 맞는지 봅니다.
왜 AI에서 SIFT가 중요한가요?
사진의 픽셀 좌표만 비교하지 않습니다
같은 무늬도 촬영 거리와 방향이 달라지면 화면의 위치와 크기가 바뀝니다. SIFT는 특징에 맞는 스케일과 방향을 사용해 이런 차이를 줄입니다. 원본 이미지의 같은 좌표끼리 비교하는 방식보다 다른 사진 사이 대응을 찾는 데 적합한 표현입니다.
학습된 모델과 다른 비교 기준이 됩니다
SIFT 자체는 정답 라벨이나 학습된 신경망 가중치를 요구하지 않습니다. 이미지 대응이 필요한 시스템에서 전통적인 특징 추출의 기준선으로 검토할 수 있습니다. 딥러닝 특징보다 항상 정확하거나 빠르다는 뜻은 아니므로 같은 촬영 자료와 장비에서 비교합니다.
후속 기하 계산에 대응점을 전달합니다
특징점의 연결은 사진 정렬이나 알려진 평면의 위치 추정에 쓰일 단서가 됩니다. OpenCV의 특징 매칭·호모그래피 예시는 SIFT 매칭 뒤 변환을 추정합니다. SIFT, 매처, 이상 연결 제거, 좌표 변환을 한 알고리즘으로 뭉뚱그리지 않습니다.
핵심 인사이트: SIFT의 출력은 대응을 찾기 위한 재료입니다. 사물 이름, 실제 거리, 깊이와 추적 ID는 목적에 맞는 후속 처리에서 다룹니다.
SIFT는 어떤 순서로 작동하나요?
1. 여러 스케일에서 후보를 찾습니다
이미지를 서로 다른 정도로 부드럽게 만든 가우시안 피라미드를 구성하고 인접 스케일의 차이인 DoG를 구합니다. 공간과 스케일 방향의 주변 값과 비교해 극값 후보를 찾습니다. 한 크기의 창만 보는 대신 무늬가 두드러지는 크기 수준도 함께 고릅니다.
2. 불안정한 후보를 걸러냅니다
후보의 위치와 스케일을 더 정밀하게 구하고 대비가 너무 약한 반응을 제외합니다. 한쪽으로 길게 이어진 가장자리에서도 위치가 불안정할 수 있어 곡률 정보를 확인합니다. 선이나 모서리를 모두 없애는 처리가 아니라 안정적인 특징을 남기는 기준입니다.
3. 주변 변화로 방향을 정합니다
선택한 스케일의 주변에서 밝기 기울기의 방향과 크기를 집계해 특징점의 기준 방향을 정합니다. 강한 방향이 여러 개면 같은 위치와 스케일에서 방향이 다른 특징점을 만들기도 합니다. 특징점 수를 서로 다른 픽셀 위치의 수로 곧바로 읽으면 안 됩니다.
4. 주변 분포를 기술자로 만듭니다
기준 방향과 스케일을 맞춘 주변 영역을 4×4의 공간 칸으로 나누고 칸마다 8개 방향의 밝기 기울기를 요약합니다.
4 × 4 × 8 = 128
개 값이 한 기술자를 이룹니다. 이 산술은 Python으로 확인했으며 실제 이미지 특징을 추출한 실행 결과로 제시하지 않습니다.
기술자에 정규화와 큰 성분의 영향 제한을 적용해 일부 조명 변화의 영향을 줄입니다. 이 과정이 이미지의 모든 정보를 보존하거나 어떤 조명에서도 같은 숫자를 돌려준다는 뜻은 아닙니다. 각 사진에서 추출을 마친 뒤 기술자끼리 비교합니다.
실전 팁: 특징점 검출과 기술자 계산, 두 이미지 사이 매칭을 구분해 기록하세요. 어느 단계에서 대응이 사라졌는지 찾기 쉬워집니다.
주요 설정과 결과는 어떻게 읽나요?
특징점 목록과 기술자 행을 연결합니다
kp, des = sift.detectAndCompute(gray, None)
는 특징점 목록과 기술자 배열을 함께 얻는 공식 예시입니다. 보통 기술자 배열은 특징점 수에 해당하는 행과 128개 열을 갖습니다. 각 행은 같은 순서의 특징점과 연결합니다. 점을 재정렬하고 기술자 순서를 그대로 두면 다른 위치를 매칭하게 됩니다.
대비 임계값과 스케일 층 수를 함께 봅니다
OpenCV 4.13.0 SIFT API의 기본
contrastThreshold=0.04
는 약한 특징을 거르는 설정입니다. 값을 높이면 보통 특징이 줄어듭니다. 실제 필터에서는
nOctaveLayers
로 나누므로 층 수를 바꾸면 같은 인자도 같은 효과가 아닙니다. API는 기본 3층에서 논문의 유효 값 0.03을 원하면 인자를 0.09로 정하라고 안내합니다.
가장자리 임계값의 방향을 혼동하지 않습니다
edgeThreshold
는 대비 임계값과 다릅니다. API 설명에 따르면 값을 높일수록 가장자리형 특징을 덜 제외해 더 많이 남깁니다.
nfeatures
는 유지할 좋은 특징 수를 조절하고
sigma
는 첫 옥타브 입력의 가우시안 흐림을 정합니다. 특징 수만 늘린 결과를 대응 품질이 좋아진 결과로 보고하지 않습니다.
매칭 결과의 거리도 분류 확률이 아닙니다. 공식 특징 매칭 안내는 SIFT 기술자 비교에 L2 거리를 사용하고 이진 기술자인 ORB에는 다른 거리 규칙을 안내합니다. 두 번째 후보까지 얻는
knnMatch(..., k=2)
의 k는 SIFT의 출력 차원이나 상품의 개수를 정하는 값이 아닙니다.
SIFT와 헷갈리는 용어는 무엇이 다른가요?
특징점과 기술자의 차이
특징점은 어디를 어떤 크기와 방향으로 볼지 담는 정보입니다. 기술자는 그 주변이 어떤 무늬인지 비교할 숫자 표현입니다. 좌표끼리 가까운 것과 기술자끼리 가까운 것은 다른 관계입니다. 사진이 움직였다면 같은 무늬의 좌표가 멀어도 기술자는 비슷할 수 있습니다.
ORB와 SIFT의 차이
ORB 공식 안내는 FAST 계열의 특징점 검출과 회전에 맞춘 BRIEF 계열 기술자를 결합합니다. ORB는 이진 기술자를 사용하므로 SIFT와 매칭 거리·배열 형식을 그대로 교환하지 않습니다. 연산 비용과 대응 품질은 촬영 자료에서 측정하며 한 방법이 모든 이미지에서 우위라고 단정하지 않습니다.
이미지 임베딩·객체 탐지와의 차이
의미 기반 이미지 임베딩은 사진의 내용이나 학습된 표현을 비교하는 데 쓰입니다. SIFT는 국소 밝기 무늬의 대응을 다룹니다. 같은 종류의 상품인지와 동일한 인쇄 무늬가 있는지는 다른 질문입니다. 객체 탐지가 반환하는 범주 라벨·경계 상자도 SIFT의 특징점 목록과 다릅니다.
광학 흐름·객체 추적과의 차이
광학 흐름은 두 프레임의 겉보기 이동을 점이나 픽셀의 변위로 추정합니다. 객체 추적은 여러 프레임에 걸쳐 대상의 연결과 ID를 관리합니다. SIFT는 각 이미지의 국소 특징을 추출하는 방법입니다. 추적에 쓰일 단서를 제공해도 시간에 따른 이동 지도나 지속적인 대상 ID를 혼자 만들지는 않습니다.
비교 정리: 특징점은 위치 정보, 기술자는 비교 표현, 매칭은 후보 연결, 기하 검증은 여러 연결의 위치 관계 확인입니다. SIFT는 이 중 특징점과 기술자 생성에 해당합니다.
실전에서는 어디에 쓰이나요?
평면 인쇄물의 대응과 사진 정렬에 씁니다
기준 포장 앞면이나 포스터가 다른 사진의 어디에 나타나는지 찾을 때 검토합니다. 연결된 특징점으로 평면의 투영 변환을 구하면 기준 사진의 모서리를 새 사진에 옮길 수 있습니다. 이미지가 충분히 겹치는 사진 정렬에서도 국소 대응은 출발점이 됩니다.
장면 대응의 기준선과 실패 분석에 씁니다
로봇 시각이나 여러 사진의 장면 분석처럼 대응점이 필요한 작업에서 학습된 특징과 비교할 기준이 됩니다. 무늬가 없는 벽, 반복 타일, 흐린 장면처럼 실패 조건을 나누어 살핍니다. SIFT의 특징점 수를 장면 인식 정확도나 최종 시스템의 안전성 점수로 대신하지 않습니다.
SIFT를 적용할 때 어떤 순서로 확인하나요?
1. 같은 대상을 찾는 기준을 정합니다
같은 인쇄면의 대응인지, 같은 상품 종류의 분류인지 먼저 구분합니다. 후자라면 SIFT만으로 목적을 충족한다고 가정하지 않습니다. 입력 이미지의 크기·색상 처리·잘림과 기준 사진을 기록하고 실제 촬영 조건의 평가 자료를 준비합니다.
2. 추출 결과를 눈으로 확인합니다
한 이미지에서 특징점 위치·크기·방향을 그려 봅니다. 대상보다 배경에 점이 몰렸는지, 점이 거의 없는지 확인합니다. 기술자 누락과 후보 부족은 정상적인 실패 경로로 처리합니다. 출력이 없을 때 임의의 매칭이나 위치를 채워 넣지 않습니다.
3. 모호한 매칭을 걸러냅니다
가장 가까운 후보의 거리와 두 번째 후보의 거리를 비교하는 비율 검사를 검토합니다. 설명용 거리 20과 100의 비율은 0.2이고 95와 100은 0.95입니다. 뒤의 경우 두 후보가 비슷해 더 모호합니다. 이 수치는 Python 산술로 확인한 가정 예시이며 정답 확률을 계산한 값이 아닙니다.
공식 예시에도 0.75 또는 0.7처럼 서로 다른 비율 기준이 등장합니다. 한 예제의 숫자를 모든 이미지에 대한 최적값으로 복사하지 않습니다. 실제 검증 자료에서 기준을 정하고 두 후보를 얻지 못한 항목이나 두 번째 거리가 0인 경우를 별도로 처리합니다.
4. 위치 관계와 최종 실패를 검증합니다
평면 대응이라면 호모그래피와 RANSAC 같은 후속 검증을 적용해 일관되지 않는 연결을 제외합니다. 남은 점 수뿐 아니라 대상 전체에 퍼져 있는지, 재투영이 맞는지 확인합니다. 같은 변환으로 설명하기 어려운 비평면 장면에는 다른 기하 모델이 필요합니다. 최종 비교 자료는 임계값 조정에 쓰지 않습니다.
한 줄 정리: 점 추출, 기술자 매칭, 모호한 후보 제거, 기하 검증과 업무 판정을 각각 확인합니다. 어느 단계의 성공인지 구분해야 실패 원인을 좁힐 수 있습니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 불변성을 무조건적인 보장으로 읽지 않습니다. 크기·회전 변화에 대응하도록 설계했어도 심한 흐림, 가림, 극단적인 시점 변화나 비선형 조명 변화에서는 특징이 사라지거나 달라집니다. 저해상도 사진을 크게 확대한다고 잃어버린 무늬가 복원되지는 않습니다.
둘째, 비슷한 기술자를 같은 대상으로 확정하지 않습니다. 반복 무늬와 동일한 제품의 여러 포장은 오매칭을 만듭니다. 가까운 후보가 하나 있다는 사실보다 여러 대응의 공간 배치와 목적에 맞는 판정 근거를 함께 확인합니다.
셋째, 호모그래피 예제를 모든 장면에 적용하지 않습니다. 평면의 투영 관계를 다루는 변환과 임의의 3차원 장면은 다릅니다. 비평면 물체의 깊이가 서로 다르고 카메라 위치까지 바뀌면 한 평면 변환으로 모든 점을 설명하기 어렵습니다.
넷째, 좋은 연결 수만 성능으로 보고하지 않습니다. 점을 많이 남기면 오매칭과 계산 비용도 늘어날 수 있습니다. 대응의 정확성, 위치 오차, 실제 찾기 성공·실패와 처리 시간을 같은 조건에서 확인합니다. 외부에 이미지나 기술자를 전달한다면 원본의 민감정보와 보관 범위도 살핍니다.
주의: SIFT는 이미지 대응의 한 구성요소입니다. 기술자 거리, 비율 검사 통과와 기하 검증 통과를 사물의 의미·개인의 신원·자동 실행 허가로 바꾸지 않습니다.
자주 묻는 질문
Q1. SIFT는 딥러닝 모델인가요?
아닙니다. 여기서 설명한 SIFT는 스케일 공간과 밝기 기울기를 이용하는 전통적인 특징 추출 알고리즘입니다. 정답 라벨로 신경망을 학습하지 않아도 실행합니다. 학습된 특징과 비교할 수 있지만 같은 방법은 아닙니다.
Q2. 128차원이면 사진에서 점을 128개 찾나요?
아닙니다. 128은 한 특징점의 기술자에 들어가는 숫자의 수입니다. 발견한 점의 수는 이미지와 설정에 따라 달라집니다. 기술자 배열의 행 수와 열 수를 따로 읽습니다.
Q3. SIFT의 점은 자세 추정의 관절점인가요?
아닙니다. 국소 밝기 무늬로 찾은 특징점에는 무릎이나 손목 같은 의미 라벨이 없습니다. 자세 추정의 정해진 관절점과 같은 출력으로 취급하지 않습니다.
Q4. 매칭 거리가 작으면 정답 확률이 높은가요?
작은 거리는 선택한 기술자 공간에서 가깝다는 뜻입니다. 정답 확률로 보정된 수치가 아닙니다. 두 번째 후보와의 차이, 반복 무늬와 기하 관계까지 확인합니다.
Q5. 회전과 크기가 달라도 항상 같은 점을 찾나요?
항상 그렇지는 않습니다. 실제 사진에는 가림·흐림·해상도·시점 변화가 함께 생깁니다. 기준 사진의 특징이 다음 사진에 나타나지 않으면 대응을 만들 수 없습니다. 실패를 알맞게 반환하는 경로도 준비합니다.
Q6. ORB 기술자와 SIFT 기술자를 바로 비교해도 되나요?
같은 표현으로 가정하지 않습니다. 기술자의 생성 방식과 거리 규칙이 다릅니다. 같은 종류의 기술자를 같은 매처 설정에서 비교하고 라이브러리의 자료형 지원도 확인합니다.
출처
마무리
SIFT는 여러 스케일에서 국소 특징점을 찾고 방향을 맞춘 기술자로 주변 무늬를 표현하는 방법입니다. 크기와 회전이 달라진 이미지에서 대응을 찾을 단서를 만들지만 사물 이름이나 확정적인 연결 결과를 혼자 반환하지는 않습니다.
감자나라ai님이 이미지 대응을 검토한다면 특징점과 128차원 기술자부터 구분해 보세요. 실제 촬영 자료에서 추출 위치, 매칭의 모호함과 기하 관계를 차례로 확인합니다. 같은 무늬를 찾는 목적에 맞는지 판단하고 실패한 장면도 평가 기록에 남기는 것이 출발점입니다.
