코드를 느껴바라

컴퓨터 비전 : 특징 기술자(feature point) 본문

CS/컴퓨터 비전(Computer Vision)

컴퓨터 비전 : 특징 기술자(feature point)

feelTheCode 2025. 4. 19. 13:36

특징 기술자와 특징 기술자의 조건

컴퓨터 비전에서 뭔가를 "찾는다"는 건 꽤 자주 등장하는 일이다. 예를 들어 이미지 속 사람 얼굴, 도로 표지판, 특정 물체, 혹은 프레임 사이의 동일한 지점 등. 이럴 때 쓰이는 게 바로 특징점(feature point)과 그걸 수치적으로 설명해주는 특징 기술자(feature descriptor)다.

특징 기술자는 쉽게 말해, “이 지점이 이런 특징을 가지고 있어요”라고 말해주는 벡터(숫자 뭉치)다. 근데 아무 기술자나 쓰면 되는 건 아니다. 좋은 특징 기술자는 몇 가지 조건을 갖추고 있어야 한다.

1. 반복 가능성 (Repeatability)

사진을 여러 각도, 여러 조건에서 찍어도 같은 지점에서 같은 특징점이 나와야 한다. 이게 안 되면 매칭이고 뭐고 할 수가 없다. 예를 들어 같은 사과를 찍었는데, 어떤 사진에선 꼭지에서 특징이 잡히고, 다른 사진에선 아무 데서나 나온다면? 끝이다.

2. 불변성 (Invariance)

카메라가 돌거나, 멀어지거나, 빛이 살짝 바뀌어도 특징 기술자가 그대로 유지돼야 한다.
대표적인 예:

  • 이미지 회전 → 기술자도 회전에 둔감해야 함
  • 스케일 변화 → 멀리서 찍은 사진이든 가까이서 찍은 사진이든 같은 기술자가 나와야 함
  • 밝기 변화 → 조명에 따라 결과가 달라지면 곤란함

SIFT 같은 알고리즘이 이 불변성에 진심인 대표적인 예다.

3. 독립성 (Distinctiveness)

서로 다른 지점끼리는 기술자도 명확하게 달라야 한다. 그래야 두 지점을 비교했을 때 “이건 같아” 혹은 “이건 완전히 달라”를 제대로 판단할 수 있다. 독립성이 부족하면 매칭이 뭉개진다. 진짜 비슷하지도 않은 지점을 자꾸 같은 걸로 판단하게 되니까.

4. 압축성 (Compactness)

기술자가 너무 길고 복잡하면, 계산량이 확 늘어나고, 메모리도 많이 차지한다. 그래서 보통은 짧고 가벼운 기술자가 좋다.
예: ORB는 그냥 256비트짜리 이진 벡터로 표현됨. 빠르고 효율적.

5. 계산 효율성 (Efficiency)

실시간 시스템이나 모바일, 임베디드 환경에서는 느린 알고리즘은 쓸 수가 없다.
빠르게 특징점을 찾고 기술자를 만들 수 있는가는 정말 중요한 요소다. 아무리 정확해도 느리면 탈락.

6. 강건성 (Robustness)

노이즈가 낀다거나, 블러가 좀 있다거나, 압축돼서 화질이 나빠졌다거나 해도 기술자가 흔들리지 않아야 한다.
실제 환경은 언제나 이상적이지 않기 때문에, 웬만한 상황에서도 버틸 수 있는 기술자가 필요하다.

7. 정합성 (Matchability)

기술자끼리 비교했을 때, 유사한 건 가깝고, 다른 건 멀어야 한다. 그래야 거리 기반으로 쉽게 매칭을 잡을 수 있다.
예: 유클리디안 거리, 햄밍 거리 같은 걸로 계산.


요약해보면

조건명의미
반복 가능성 같은 장면에서 항상 같은 특징점 나와야 함
불변성 회전, 스케일, 조명 등 변화에도 끄떡없어야 함
독립성 서로 다른 지점은 다른 기술자로 표현돼야 함
압축성 기술자가 짧고 가볍게 구성돼야 함
계산 효율성 빠르게 만들 수 있어야 함
강건성 노이즈나 블러에도 잘 작동해야 함
정합성 유사하면 가까운 거리, 다르면 먼 거리여야 함

이런 조건들을 고려해서 SIFT, SURF, ORB, BRIEF 같은 알고리즘들이 설계되어 왔다.
어떤 특징 기술자를 쓸지 결정할 땐, "우리 시스템이 뭘 원하지?"를 먼저 생각해보는 게 중요하다. 정확도냐? 속도냐? 메모리냐? 아니면 현실 적응력이냐?를 생각해야 한다.

필요하면 다음 글에서 각 기술자 알고리즘별로 위 조건에 얼마나 잘 부합하는지도 비교해볼 예정.

반응형