Priceless
[VSLAM]특징점 기술의 역사 본문
feature-based SLAM을 공부하기 위해서는 특징점에 대해 잘 알아야 한다
Computer vision
핵심 문제
특징점을 어떻게 잘 찾느냐
당시의 효율성을 가진 컴퓨터를 가지고
Lines Detector
Sobel operator
Hough transform
Canny edge detection
Line detection research
라인을 검출할 수록 물체의 의미를 추론할 수 있는 단서가 생겼다
라인을 검출한 사진들의 시차, 각도가 크게 다를 때 어떻게 같은 객체인지 알 수 있을까
Feature Detector
Point feature
Keypoint detector
keypoint는 관심을 가지는 지점이다
Descriptor extractor(특징 기술자)
descriptor는 우리가 keypoint에서 뽑은 특징이다
point feature의 특징을 기술할 때는 해당 키포인트 주변 픽셀들을 분석해 descriptor라는 객체를 만든다
Correspondence matcher
두 point feature의 descriptor가 얼마나 유사한지 비교하여 같은 경우 같은 곳을 나타낸다고 판단한다
Local feature
이미지의 국소적인 스케일로 이미지를 나타내는 방법
Corner detection
Moravec
픽셀의 기점으로 4방향의 그레디언트를 분석하여 코너인지 검사하는 방법을 제안했다
Harris Corner
4방향 대신 x 방향과 y방향의 그레디언트만 계산하고
이 정보를 토대로 코너의 방향성을 구하는 행렬
eigen 값을 통해 코너인지 여부를 판단한다
이 알고리즘을 통해 안정적으로 코너를 감지할 수 있다
SIFT
딥러닝이 나오기 전까지 가장 정확한 알고리즘 중 하나
scale의 변화와 회전의 변화에도 잘 검출한다
작은 스케일과 큰 스케일에도 동일한 위치에서 키 포인트가 감지된다면 scale invariant
우선 이미지를 여러 scale로 조절한 복사본(이미지 피라미드)을 만든다
이미지 피라미드의 층마다 여러 단계의 가우시안 블러 이미지를 만든다
그리고 가우시안 이미지들의 차이인 DOG(difference of Gaussian)을 만든다
가우시안 블러를 통해 스케일 인베리언트한 코너를 추출할 수 있다는 점을 활용한 알고리즘이다
SIFT에 대한 Descriptor로
추출한 키포인트를 16 x 16 패치로 만든 후
패치 내의 그레디언트를 계산하고 히스토그램을 구해 descriptor를 생성한다
연산량이 상당하고 메모리를 많이 차지한다
하지만 조명과 밝기 등 이미지가 크게 달라도 유사한 영역을 많이 찾아낸다
FAST
매우 빠른 속도를 가지고 있다
찾고자 하는 픽셀의 주변 픽셀 16개의 밝기를 비교한다
이 중 10개 이상의 연속된 픽셀 값이 나머지 6개 이하의 픽셀보다 어둡거나 밝다면
이를 코너로 지정한다
굉장히 간단하지만 정확히 감지할 수 있다
BRIEF descriptor
SIFT와 궁합이 잘 맞는 descriptor로
descriptor를 표현하는 값이 binary 방식으로 표현된다
더 빠르고 메모리를 적게 사용한다
FLANN Library
내가 뽑은 descriptor와 가장 비슷한 descriptor을 찾아서 매칭하는 라이브러리다
데이터베이스 내의 많은 고차원의 descriptor 중 가까운지를 찾는 과정이 쉽지 않다
이 외의 복잡한 descriptor를 클러스터링 하는 것이 어려웠다
이러한 기술 중 데이터셋의 크기 등 다양한 항목에 따라 비교하여
항목에 따라 결과가 달라질 수 있다는 점을 인지하고
데이터셋에 따라 descriptor를 자동으로 골라주는 기능을 가장 잘 구현한 라이브러리다
ORB
SIFT와 유사한 정확도와 실시간으로 반응하는 처리 속도를 목표로 만들어진 알고리즘이다
FAST를 사용하여 키포인트를 추출하고 BRIEF를 이용하여 descriptor를 추출하던 방식의 문제점인
scale invariant하지 않고 rotation invariant하지 않은 점을 해결해야 했다
이 문제들을 해결하여 SIFT를 실시간으로 구현하는 성능을 나타냈다
FAST를 할 때 이미지 피라미드에서 추출하는 방식을 사용하여 scale invariant를 해결하고
FAST를 할 때 키포인트 주변에 그레디언트를 이용해서 코너의 방향성을 찾아내고
그 방향에 맞춰 BRIEF를 뽑아내어 코너의 방향에 맞춰 descriptor를 뽑아내어
rotation invariant를 해결할 수 있었다
VSLAM과 같이 실시간으로 반응해야 할 때 ORB를 사용하는 것이 효과적이다
ORB를 다른 알고리즘과 벤치마크 한다
AKAZE
SIFT의 정확도와 ORB의 속도를 통합한 방식이다
양쪽을 타협하여 중간 성능을 낸다
적당히 빠르지만 성능을 원하는 경우 ORB대신 AKAZE를 쓸 수 있다
딥러닝 Local feature
대표적으로
SuperPoint, KeyNet, HardNet이 있다
이외에도 다양한 알고리즘이 연구되고 있다
아래의 영상을 참고하면 좋다
'SLAM > Visual SLAM' 카테고리의 다른 글
[VSLAM]RANSAC (1) | 2023.11.28 |
---|---|
[VSLAM]Epipolar Geometry (1) | 2023.11.27 |
[VSLAM]카메라 센서의 구조 (0) | 2023.11.24 |
[VSLAM]핀홀카메라 투영 (1) | 2023.11.23 |
[VSLAM] 동차좌표계(Homogeneous Coordinates) (1) | 2023.11.23 |