Priceless

[VSLAM]특징점 기술의 역사 본문

SLAM/Visual SLAM

[VSLAM]특징점 기술의 역사

Hyun__ 2023. 11. 25. 00:21

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