본문 바로가기

Fundamental

[SLAM] Feature-based와 Direct method VO 개념 비교

본 포스트는 공부 목적으로 작성하였습니다.

혹시 보시는 도중 잘못된 부분이나 개선할 부분이 있다면 댓글이나 메일주시면 확인 후 수정하도록 하겠습니다.

해당 포스트는 앞서 pdf 파일로 정리했던 자료를 포스팅한 글입니다. 

자세한 내용은 다음 링크를 통해 확인해주세요.

https://www.facebook.com/groups/slamkr/permalink/1043277826031861/

indirect_direct_method.pdf
0.30MB

 

 

해당 포스트는 visual odometry 알고리즘에서 포즈를 계산하는 대표적인 두가지 방법인 feature-based와 direct method의 차이점에 대해 설명한다. feature-based는 ORB SLAM2 코드를 참조하여 작성하였고 direct method는 DSO 코드를 참조하여 작성하였다.

 

두 방법 모두 처음 SLAM 알고리즘을 작동시킬 때는 초기 두 프레임 간 3차원 map point depth 값을 초기화하는 과정을 거친다. 이를 Initialization이라고 하며 해당 과정이 완료되면 2D-3D matching 알고리즘을 사용하여 카메라의 포즈를 계산한다. 본 포스트에서는 Local Bundle Adjustment (LBA), Global Bundle Adjustment (GBA), Pose Graph Optimization (PGO)의 내용은 다루지 않고 단순한 sequential odometry 계산 방법만을 다룬다.

 

Feature-based method

Feature-based method는 이미지 상에서 특징점을 추출한 후 카메라가 이동함에 따라 변하는 특징점의 위치를 추적하여 카메라의 포즈를 계산하는 방법이다. 예를 들어, 핀홀카메라가 위와 같이 차량을 보고 있다고 가정해보자.

 

feature-based method는 영상 내에서 특징점을 추출하는 다양한 알고리즘(FAST, SIFT, SURF, ORB,...)를 사용하여 키포인트를 추출하고 이 키포인트에 고유한 ID를 부여하기 위해 다양한 descriptor 알고리즘 (BRIEF, BRISK, ORB,...)를 사용한다. ORB SLAM2 알고리즘의 경우 키포인트와 descriptor 모두 ORB를 사용한다.

 

해당 키포인트에 해당하는 3차원 맵포인트 $\mathbf{P}$를 다양한 깊이 추정 알고리즘 방법을 (e.g. Triangulation) 사용하여 공간 상의 위치를 추정한다.

 

다음 카메라 $\{C_{2}\}$의 이미지가 들어온 경우, 3차원 공간 상의 점 $\mathbf{P}$를 $\{C_{2}\}$의 이미지 좌표계 $[u,v]$로 프로젝션한다. 프로젝션하는 순간에는 $\{C_{2}\}$의 위치를 모르는 상태이므로 $\{C_{1}\}$과 동일한 위치에 있다고 가정한다. 

 

$\{C_{2}\}$는 $\{C_{1}\}$과 다른 이미지이므로 일반적으로 프로젝션한 위치에 키포인트가 존재하지 않는다. 따라서 특정 크기의 윈도우를 생성하여 해당 윈도우 내에서 가장 descriptor가 유사한 키포인트 $p_{2}$를 찾는다. $p_{2}$를 찾으면 프로젝션한 $p_{1}$을 기준으로 몇 픽셀이 떨어져 있는지 계산한다.

 

$p_{1}$과 $p_{2}$의 픽셀 변화만큼 3차원 공간 상의 카메라의 위치를 업데이트한다. 이를 이미지 내에서 발견한 모든 키포인트들에 대해 반복하여 최적의 카메라 포즈를 계산한다.

 

Direct method

Direct method는 카메라가 이동함에 따라 변하는 픽셀의 밝기 변화를 추적하여 카메라의 포즈를 계산하는 방법이다. 예를 들어, 핀홀카메라가 위와 같이 차량을 보고 있다고 가정해보자.

 

 

두 번째 카메라 $\{C_{2}\}$에서 본 차량은 $\{C_{1}\}$에서 본 차량과 정확히 동일한 픽셀 위에 있지 않는다. 

 

이러한 픽셀의 밝기 변화를 추적하여 카메라의 포즈를 계산한다. feature-based 방법과 달리 키포인트와 descriptor를 사용하지 않고 바로 카메라의 포즈를 계산하므로 direct method라고 불린다.

 

 

디테일한 설명을 위해 위와 같이 하나의 픽셀 밝기 변화만을 설명한다.

 

feature-based와 동일하게 해당 포인트에 해당하는 3차원 맵포인트 $\mathbf{P}$를 다양한 깊이 추정 알고리즘 방법을 (e.g. Triangulation) 사용하여 공간 상의 위치를 추정한다. 해당 포인트는 키포인트가 아니므로 descriptor가 없는 일반 포인트 $[u,v]$이다. 이러한 포인트를 얼마나 많이 추출하는가에 따라 sparse, semi-dense, dense direct method로 구분된다.

 

다음 카메라 $\{C_{2}\}$의 이미지가 들어온 경우, 3차원 공간 상의 점 $\mathbf{P}$를 $\{C_{2}\}$의 이미지 좌표계 $[u,v]$로 프로젝션한다. 프로젝션하는 순간에는 $\{C_{2}\}$의 포즈를 모르므로 $\{C_{1}\}$과 동일한 위치에 있다고 가정한다.

 

$\{C_{2}\}$는 일반적으로 $\{C_{1}\}$과 다른 이미지이므로 프로젝션한 위치에 정확히 같은 포인트의 밝기 값이 존재하지 않는다. 따라서 카메라의 밝기 오차가 생기게 되고 이러한 밝기 오차 (photometric error)가 최소가 되는 카메라의 포즈를 계산한다. 밝기가 다른 점을 계산할 때 feature-based method와 마찬가지로 윈도우를 설정하여 그 안에서 밝기 오차가 최소가 되는 지점을 계산한다. 이 때 pyramid 스케일 이미지를 사용하여 큰 윈도우부터 작은 윈도우 순서로 여러 번 pose를 계산하는 방법을 coarse to fine scheme이라고 한다. 

 

밝기 오차가 있는 모든 포인트에 대해서 오차를 최소화하는 최적의 카메라 포즈를 계산한다. 앞서 말했듯이 이러한 포인트를 얼마나 많이 사용하느냐에 따라서 sparse, semi-dense, dense direct method로 구분된다.