[2023-07-12] 1. 특징점 기술
특징점 기술
Pre-1980
-
2D 이미지로 3D의 세상을 이해하기 위함
- 이미지 속의 객체를 찾는 Object Detection, 영역과 의미를 찾는 Segmentation 등 컴퓨터 비전의 목적이 동일했음
- 이미지 속에서 어떤 정보를 추출해야 가장 3D 세상을 잘 표현할 수 있을까에 대한 고민을 많이함
-
Conditions
- Noisy Images가 많으므로 객체를 찾기 위해서는 작은 영역을 추출하는 것 보다 이미지 전체에서 컬러 패턴을 찾아 정보를 추출했음
- 객체를 구분할 때는 여러가지 다양한 색들을 표현하는 공간의 경계(Line)이 중요한 지표가 됨
- Noisy Images가 많으므로 객체를 찾기 위해서는 작은 영역을 추출하는 것 보다 이미지 전체에서 컬러 패턴을 찾아 정보를 추출했음
-
이 때 가장 활발하게 진행한 연구는 Line을 찾기 위한 연구
Gradient Operator
- 특정 픽셀에서 x방향과 y방향의 밝기 값을 계산하여 Gradinet를 계산하는 방법
Sobel Operator
- Gradient Operator의 아이디어를 기반으로 만들어진 기법
- 당시의 컴퓨터는 메모리에 빠르게 이동하는 것이 쉽지 않아 메모리에 이어져 있지 않았던 이미지들을 순회하는 작업 (Row와 Column값을 자유롭게 넘나드는 작업) 을 수행하기 어려웠음
- 계산을 해도 적절한 Threshold를 선정해서 Line인지 아닌지 구분해야 했음
- 적절한 Threshold를 계산하는 것이 어려웠음
- Edge를 편하게 찾는 방법을 위한 연구가 진행되었는데 Convolution을 사용해서 간편하게 계산할 수 있고 쉬운 Threshold로 적절하게 라인을 구분하게 할 수 있는 Sobel Operator가 인기를 끌게 됨 (비슷한 Roberts, Prewitt Operator도 같이)
Hough Transform
- Sobel Operator에 추가적인 작업을 거쳐 안정적으로 라인을 찾는 방법
- Sobel Operator로 뽑아낸 Edge들을 Parameter Space에 표현하여 찾음
- GPU가 없는 상황에서 라인을 찾을 때 사용하는 유명한 기법
Canny Edge Detection
1980년대까지는 Line을 찾기 위한 연구들이 활발하게 이루어졌고 실제로 Hough Transfrom과 Canny Edge Detection으로 라인을 잘 찾을 수 있었음
하지만 라인 연구가 진행되면서 의문점이 발생함.
- 멀리 떨어진 시점에서 2개의 사진에서 어떻게 이 2가지의 물체가 같은 같은 것임을 인식하는가?
- 시점의 변화가 작은 경우에는 Gradient 방향을 분석해서 연관성을 알 수 있었음
- 하지만 시점의 변화가 크면, 각각의 이미지에서 라인을 추출했을 때 라인들간의 연관성을 알 수 없었음
- 그래서 라인이 아닌 다른 기하적인 표현 방법을 찾기 시작함
- Line과 Line의 dot Product인 Point를 찾아서 Feature을 찾기
- 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를 추출할 수 있음
- 여러 스케일들로 변환한 복사본을 만듬(이미지 피라미드)
- descriptor도 함께 제안함
- 추출한 Keypoint 주변으로 16 x 16 patch를 만들어 탐색을 함
- patch에 있는 pixel들 마다 gradient를 계산하고 gradient를 모아서 히스토그램으로 만들어 descriptor을 생성
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