특징점 기술

Pre-1980

  • 2D 이미지로 3D의 세상을 이해하기 위함

    • 이미지 속의 객체를 찾는 Object Detection, 영역과 의미를 찾는 Segmentation 등 컴퓨터 비전의 목적이 동일했음
    • 이미지 속에서 어떤 정보를 추출해야 가장 3D 세상을 잘 표현할 수 있을까에 대한 고민을 많이함
  • Conditions

    • Noisy Images가 많으므로 객체를 찾기 위해서는 작은 영역을 추출하는 것 보다 이미지 전체에서 컬러 패턴을 찾아 정보를 추출했음
      • 객체를 구분할 때는 여러가지 다양한 색들을 표현하는 공간의 경계(Line)이 중요한 지표가 됨
  • 이 때 가장 활발하게 진행한 연구는 Line을 찾기 위한 연구

Gradient Operator

  • 특정 픽셀에서 x방향과 y방향의 밝기 값을 계산하여 Gradinet를 계산하는 방법

image

Sobel Operator

  • Gradient Operator의 아이디어를 기반으로 만들어진 기법
  • 당시의 컴퓨터는 메모리에 빠르게 이동하는 것이 쉽지 않아 메모리에 이어져 있지 않았던 이미지들을 순회하는 작업 (Row와 Column값을 자유롭게 넘나드는 작업) 을 수행하기 어려웠음
  • 계산을 해도 적절한 Threshold를 선정해서 Line인지 아닌지 구분해야 했음
    • 적절한 Threshold를 계산하는 것이 어려웠음
  • Edge를 편하게 찾는 방법을 위한 연구가 진행되었는데 Convolution을 사용해서 간편하게 계산할 수 있고 쉬운 Threshold로 적절하게 라인을 구분하게 할 수 있는 Sobel Operator가 인기를 끌게 됨 (비슷한 Roberts, Prewitt Operator도 같이)

image

Hough Transform

  • Sobel Operator에 추가적인 작업을 거쳐 안정적으로 라인을 찾는 방법
  • Sobel Operator로 뽑아낸 Edge들을 Parameter Space에 표현하여 찾음
  • GPU가 없는 상황에서 라인을 찾을 때 사용하는 유명한 기법

image

Canny Edge Detection

image

1980년대까지는 Line을 찾기 위한 연구들이 활발하게 이루어졌고 실제로 Hough Transfrom과 Canny Edge Detection으로 라인을 잘 찾을 수 있었음

하지만 라인 연구가 진행되면서 의문점이 발생함.

  • 멀리 떨어진 시점에서 2개의 사진에서 어떻게 이 2가지의 물체가 같은 같은 것임을 인식하는가?
    • 시점의 변화가 작은 경우에는 Gradient 방향을 분석해서 연관성을 알 수 있었음
    • 하지만 시점의 변화가 크면, 각각의 이미지에서 라인을 추출했을 때 라인들간의 연관성을 알 수 없었음
  • 그래서 라인이 아닌 다른 기하적인 표현 방법을 찾기 시작함
  1. Line과 Line의 dot Product인 Point를 찾아서 Feature을 찾기
  2. Line과 Line의 Cross Prouduct인 Plane을 찾아서 Feature 찾기

Feature Detector

Taxonomy(분류)

Keypoint Detector
  • 뽑은 Point feature의 픽셀 위치
Descriptor Detector
  • 뽑은 feature의 특징

  • 해당 keypoint 주변의 픽셀들을 분석해서 descriptor이라는 객체를 만듬

    e.g. feature의 keypoint 주변에 10x10 픽셀들의 patch를 따서 그 픽셀들의 밝기 값을 분석해서 히스토그램으로 표현

Correspondence Matcher
  • 2개의 point feature가 실제로 같은 객체를 의미하는지에 대한 매칭 정보
  • 각각의 point feature의 특징인 descriptor 정보를 가져와서 비교
    • 이 때 2개의 descriptor 정보가 비슷하면, 동일한 공간에서 추출된 point feature로 인식하여 correspondence가 생겼다고 판단
Local Feature
  • local scale로 이미지를 표현할 수 있는 방법
  • Point Feature와 Line Feature가 있음

Point Feature

Corner Detection - Moravec(1980)
Harris Corner - Harris Stephenson(1988)
  • 안정적으로 이미지 속의 코너를 추출할 수 있음
SIFT
  • 딥러닝 방식의 local feature 방식이 나오기 전까지 가장 정확한 Point Feature
  • Scale-invariant : scale이 변해도 같은 물체를 잘 검출
  • Rotation-invariant : rotation이 변해도 같은 물체를 잘 검출

  • 작동원리
    • 여러 스케일들로 변환한 복사본을 만듬(이미지 피라미드)
      • 각각의 스케일 마다 여러 가우시안 이미지를 만듬
      • 그리고 가우시안 이미지들의 차이인 Differnce of Gaussian(DOG)를 만듬
      • DOG를 분석하면 미세한 스케일 변화와 큰 스케일 변화에서도 그대로 유지되는 Scale-invariant한 Keypoint를 추출할 수 있음

image

  • descriptor도 함께 제안함
    • 추출한 Keypoint 주변으로 16 x 16 patch를 만들어 탐색을 함
    • patch에 있는 pixel들 마다 gradient를 계산하고 gradient를 모아서 히스토그램으로 만들어 descriptor을 생성

image

FAST
  • 빠르게 코너를 찾는 Keypoint Detector
    • Harris Corner의 17배 속도
    • SIFT의 42배 속도
  • SIFT와 다르게 Descriptor가 없음
  • Scale-Invariant 하지 않음
  • 작동 원리
    • 찾으려는 픽셀의 중점으로 16개의 주변 픽셀의 밝기를 탐지함
    • 16개의 주변 픽셀 중 10개의 연속된 픽셀 값이 나머지 6개 보다 밝거나 어둡다면 Corner로 검출함
BRIEF
  • Floating Point(소수점) 값이 아닌 Binary(0,1) 데이터로만 descriptor을 만들어 더 빠르고 효율적인 descriptor 탄생
  • Rotation-Invariant 하지 않음
FLANN Library
  • 수 많은 descriptor들이 모여있는 데이터베이스에서 방금 추출한 decriptor와 비슷한 것이 있는지 매칭해주는 기능

ORB

  • Oriented Fast + Rotated BRIEF
  • Scale Invariance
  • Rotation Invariance
  • SIFT와 비슷한 기능을 가지면서 속도와 메모리 효율이 더 좋음
  • 현업에서도 웬만하면 가장 먼저 ORB를 사용함

AKAZE

  • ORB와 SIFT의 중간
    • ORB는 속도 최적화
    • SIFT는 정확도 최적화
    • AKAZE는 둘의 중간

딥러닝 방식의 local feature

  • SuperPoint
  • KeyNet
  • Hardnet