분류 전체보기

Computer Vision/SLAM

[3D Transform/04] 사원수(Quaternion)를 이용한 3차원 회전

Introduction 앞선 포스트에서는 회전을 직관적으로 표현할 수 있는 Euler Angle과 Axis-Angle Rotation에 대해 다뤘습니다. 하지만 직관적인 대신 Euler angle은 Gimbal lock, Axis-Angle rotation은 높은 연산량으로 인해 실시간이며 높은 정확도를 요구하는 SLAM에서는 실제 적용이 어렵습니다. 이런 문제를 해결하기 위해 벡터의 등장과 함께 거의 사장되었던 사원수(Quaternion)가 재조명되었는데, 이는 벡터의 등장 이전에 3차원을 표현하기 위해 제안된 방식이었습니다. 사원수의 성질 자체는 매우 간단하지만, 회전과 무슨 관계가 있길래 사용하는지 그 원리에 대한 이해는 꽤 어렵습니다. 하지만 이를 모르면 사원수는 단순히 회전을 표현하기 위해 끼워..

Computer Vision/SLAM

[3D Transform/03] Euler Angles, Axis-Angle Rotation

Introduction 앞선 포스트에서는 3차원 공간에 존재하는 어떠한 점(point)이나 벡터(vector)는 어떤 좌표계(coordinate system)에서 보는지에 따라 다른 좌표(coordinate)를 가지고 있음을 살펴보았습니다. 그리고 좌표계간 상관관계를 이용해 변환 행렬을 구해봤는데요. 이를 통해 획득한 $\mathbf{R}$(rotation matrix), $\mathbf{t}$(translation vector), 그리고 $\mathbf{T}$(transformation matrix)는 머리로는 이해되나 가슴으로는 잘 이해가 되지 않을 것입니다. 특히 회전과 관련된 성분들은 최종 결과물만 보고서 도대체 이 행렬은 얼마나 회전시키는 녀석인지, 아니면 이게 회전 행렬은 맞는지 한눈에 알아볼..

Computer Vision/SLAM

[3D Transform/02] 3D Rigid Body Transform (강체 변환)

Introduction 이전 포스트에서 설명한 것처럼, 카메라는 움직임에 따라 크기와 모양이 달라지지 않는 강체(rigid body)입니다. 그래서 SLAM에서의 3D 변환은 회전(rotation)과 평행 이동(translation)만 고려합니다. 여기에 추가로 앞서 좌표계(coordinate system)에 대해서 다뤘습니다. 점(point)이나 벡터(vector)를 어느 좌표계에서 바라보는지에 따라 좌표(coordinate)가 달라지게 됩니다. SLAM에서 필수적으로 다루게 될 World coordinate과 Camera coordinate을 예시로 들어보겠습니다. 벡터 $\mathbf{p}$에 대해 World 좌표계에서 본 $\mathbf{p_w}$와 Camera 좌표계에서 본 $\mathbf{p_..

Computer Vision/SLAM

[3D Transform/01] Points, Vectors, Coordinates; Inner/Outer Product

Introduction 우리가 흔히 보는 2D 영상 이미지에는 많은 변환 방법이 존재합니다. 강체 변환, 닮음 변환, Affine 변환 등 다양한 알고리즘이 존재하는데, 이는 본 포스트에서는 다루지 않을 예정입니다. SLAM에서 궁금한 부분은 3차원 공간에서 내가 어떻게 움직이고 있는지입니다. 즉, 3차원 공간에서 카메라가 어떻게 움직이고 있는지 구하는 게 최종 목표이며, 카메라는 크기가 변하거나 왜곡이 생기지 않습니다. 따라서 카메라를 하나의 강체(Rigid body)로 볼 수 있으며, 3D transform은 3D rigid body transform 문제로 요약됩니다. 이는 다른 말로 euclidean transform이라고 하며, 형태와 크기를 유지한 채로 위치(translation)와 회전(ro..

Programming/Trouble Shooting

[OpenCV] ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope

Issue Computer Vision 분야를 공부할 때 OpenCV는 필수로 사용됩니다. C++/Python 모두 지원하기 때문에 더 효용이 있죠. 여느 날과 같이 SLAM open source 코드를 돌리는 도중 OpenCV에서 아래와 같은 에러가 발생했습니다. triangulation.cpp:44:31: error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope 44 | Mat img_1 = imread(argv[1], CV_LOAD_IMAGE_COLOR); | ^~~~~~~~~~~~~~~~~~~ 다급하게 구글링을 했는데 다행히 꽤나 유명한(?) 이슈로 보였습니다. 많은 글들이 있어 쉽게 해결할 수 있었고, 기록을 위해 포스트를 작성합니다. Solut..

Computer Vision/SLAM

[Epipolar Geometry/03] Triangulation과 Epipolar Geometry의 제약 및 단점

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를 포착했을 ..

Computer Vision/SLAM

[Epipolar Geometry/02] Fundamental Matrix, Essential Matrix

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}$를 구할 수 있습니다...

Computer Vision/SLAM

[Epipolar Geometry/01] Epipolar Constraint

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..

YoungJ
'분류 전체보기' 카테고리의 글 목록 (3 Page)