Introduction 지난 포스트에서는 Essential Matrix와 Fundamental Matrix를 이용해 Epipolar Geometry에서 카메라의 Pose ($\mathbf{R,t}$)를 추정해 봤습니다. 이제 다음 단계로 추정된 Motion을 토대로 Feature들의 3D 공간 상에서의 위치를 추정하고자 합니다. 이를 위해서는 Object의 Depth 정보가 필요한데요. 문제는 Epipolar Geometry를 사용하는 Monocular 카메라는 depth 정보를 얻을 수 없습니다. 2D 영상만으로 해당 정보를 얻기 위해서 triangulation (삼각측량법)을 사용합니다. Triangulation Triangulation (삼각측량법)은 다른 위치에서 같은 landmark를 포착했을 ..
Introduction 지난 포스트에서는 Epipolar Geometry에서 Feature Matching을 통해 얻은 두 매칭쌍에서 항상 성립하는 Epipolar Constraint를 유도했습니다. $$\mathbf{x_2^T[t]_x R x_1=0}$$ 위 식에서 $\mathbf{x_1, x_2}$의 관계식(변환식) $\mathbf{[t]_x R}$을 Essential Matrix, 이 관계식을 Pixel Coordinate로 가져온 식을 Fundamental Matrix라고 합니다. 이렇게 나름 힘들게 구한 식을 가지고 우리는 무엇을 할 수 있을까요? Feature Matching 된 매칭쌍의 관계식을 어떠한 방법으로 구할 수 있다면, 우리는 역으로 $\mathbf{R, t}$를 구할 수 있습니다...
Introduction 이전 게시물들을 통해 Image에서 Feature를 추출하는 방법을 알아봤습니다. Map을 만들기 위해서 연속된 Frame들에서 특징점을 추출한 후, Feature Matching (Tracking) 과정을 거쳐 특징점들의 변화를 추적합니다. 이번 포스트에서는 앞서 획득한 Feature들을 통해 Camera Pose Estimation을 수행하려 합니다. Camera Pose Estimation 과정은 가지고 있는 Feature의 특징 (차원)에 따라 차별점이 있는데요. 크게 아래 세 종류가 있으며, 이번 시리즈에서는 2D Image만 있을 때 사용 가능한 Epipolar Geometry에 대해서 알아보도록 하겠습니다. Epipolar Geometry: 2D 영상 데이터(2D, 2..
세 줄 요약: - ORB는 key point detector로 FAST, descriptor로 BRIEF를 각각 개선해 적용했다. - FAST에서 Rotation & Scale invariance, Multi-scale 개선을 통해 Robustness를 증가시켰다. - BRIEF의 경우 uncorrelated and high variant 한 pair selection을 통해 feature 품질을 향상했으며, 회전에 대한 보정을 주어 rotation invariance를 개선했다. Introduction 이전 게시물들을 통해 SLAM Frontend(Visual Odometry)가 무엇인지 다뤘습니다 (이전 게시물들은 Visual Odometry 태그 검색이나, [SLAM/VO] 제목 검색을 통해 보실 ..
Introduction 이전 게시물에서 SLAM Frontend(Visual Odometry) 중 대세인 Feature based VO 기법에 대해 소개하였습니다. 짧게 기억을 되살려보면, 우리는 이미지의 feature로서 corner를 선정했으며, 단순히 위치 정보로는 어려움이 있기 때문에 descriptor라는 녀석을 사용한다고 했습니다. 이번 시간에는 이를 모두 포함한 feature point의 개념을 소개하고, key point와 descriptor의 차이점을 알아보도록 하겠습니다. Feature Point Feature Point는 Key Point와 Descriptor로 이루어져 있습니다. 둘을 가장 쉽게 구분하는 방법은 key point는 단순히 feature의 위치 정보만을 담고 있고, d..
Introduction SLAM Framework을 다룬 앞선 게시물에서 SLAM은 크게 Frontend와 Backend로 나뉨을 설명했습니다. Frontend는 다른 말로 Visual Odometry라고도 하는데요. 오늘은 이 Visual Odometry(VO), 그중에서도 Feature based VO에 대해서 알아보도록 하겠습니다. Visual Odometry 우리의 친구 Wikipedia에서는 VO에 대해 아래와 같이 설명하고 있습니다. In robotics and computer vision, visual odometry is the process of determining the position and orientation of a robot by analyzing the associated ..
한 줄 요약 겁나 복잡하고 어렵다 Introduction 지난 포스트에서는 DSO의 Photometric Energy Term, 즉 Residual을 구하는 이론적 접근을 다뤘습니다. 이번 포스트에서는 이론을 실전으로 옮겨보도록 하겠습니다. 과연 어떻게 코드에서는 구현되어 있을까요? 일단 어디에 구현되어 있는지부터 봅시다. 일단 해당 내용은 CoarseInitializer.cc의 calcResAndGS() 함수에 구현되어 있습니다. 이는 DSO 초기화를 담당하는 구현부인데요. 초기화 영역 말고 실행 중에도 Residual은 계속 호출이 될 것입니다. 이는 CoarseTracker.cc의 calcRes() 함수에 구현되어 있으나, 이번 포스팅에서는 초기화 부분만 우선 살펴보도록 하겠습니다. 변수 초기화 우..
세줄 요약 DSO/LDSO는 Photometric Energy Term을 Residual function으로 사용한다. 이는 두 프레임 $\textbf{I}_i, \textbf{I}_j$에서의 포인트 $\textbf{p}$에 대한 밝기 차이를 의미한다. 여기에 Huber norm과 Gradient에 대한 가중치를 주어 Robust 한 모델을 만들었다. Introduction Direct Approach를 사용하는 DSO/LDSO는 그에 걸맞게 Photometric Energy Term을 Residual Function으로 사용합니다. Model 생성 과정을 자세히 살펴보기 위해서는 LDSO보다는 DSO 논문을 추천합니다. 사실 LDSO Residual Function은 DSO와 같으며, 해당 내용에 대한..