Priceless
[VSLAM]Epipolar Geometry 본문
2개 이상의 이미지가 필요한 이유
2D -> 3D mapping
3D를 2D로 매핑하는 과정은 사영을 통해 구현할 수 있다
하지만 3D로 매핑할 경우를 Depth 값을 고려해야 한다
새로운 차원(깊이)에 대한 정보가 필요하기 때문에 이미지가 한 장이 아닌 두 장이 필요하다
핵심 문제
Visual SLAM을 위해서 이미지 프레임마다 카메라가 얼마나 이동했는지 알아야 한다
이미지부터 이미지 사이에 얼마나 이동했는지 카메라 프레임의 rigid body motion, 즉 pose 이동을 구해야 한다
모션 정보가 있으면 알 수 있지만 VSLAM에서는 정보가 없기 때문에
영상정보로부터 모션 정보를 추론해야 한다
두 개의 이미지로부터 모션 정보를 추론하기 위해 두 이미지 간의 기하학적 상관 관계를 유추해야 한다
Epipolar Geometry
2 view geometry
Epipolar Geometry
바라보는 시점이 다르지만 동일한 3d point를 바라보는 경우를 일컫는다
왼쪽 이미지는 과거의 timestamp를 받고 오른쪽은 현재의 timestamp를 받거나(monocular)
왼쪽 오른쪽 등으로 구성할 수 있다(strereo)
이를 구현하는 기하를 Epipolar geometry이다
Epipolar Line
왼쪽 카메라에서 생긴 ray를 오른쪽 카메라에서 볼 때
오른쪽 카메라에도 투영된다
이를 re-projection이라 하는데
원래 3d를 2d로 한 ray를 다시 투영하기 때문이다
이렇게 재사영되어 오른쪽 카메라 화면에 찍힌 ray를 epipolar line이라 하다
epipolar line이 없으면 반대쪽 카메라에 어떻게 나타나게 될지 모르기에
무조건 epipolar 위에 점이 있어야 한다
Epipole
왼쪽 카메라가 3개의 point를 보고 세 개의 ray가 있을 때
이 ray들을 오른쪽 카메라에 재투영할 때
세 ray가 한 점에서 만날 때 이 점을 epipole이라 한다
epipole은 반대편 카메라의 optical center를 나타낸다
Epipole placement의 특별한 상황
Stereo camera configuration
아래 같은 경우 서로의 epipole을 알 수 없다
epipolar line이 평행하게 생성되기 때문에 교점이 만들어지지 않는다
대신 epipolar line이 가로로 나타난다
이 후 각 라인에 대한 row에 epipole이 존재하기 때문에 그 위치에서 찾을 수 있다
Monocular camera forward motion
하나의 이미지가 회전되지 않고 직진만 된 상황
이 경우 epipole 1 과 2가 직선에 있다
서로 보이진 않지만 epipole은 같은 선에 있다
Epipolar plane
두 이미지에서 얻은 ray와 optical center을 연결하여 하나의 평면을 구성한다
이를 epipolar plane이라 한다
epipolar plane은 epipolar line과 epipole의 정보를 가지고 있다
이 plane이 있으면 geometry 정보가 완성된다
Baseline
좌측 우측 이미지의 optical center를 연결했을 때 생기는 직선을 의미한다
두 카메라간의 거리를 의미한다
거리가 크면 클 수록 삼각 측량의 정확도가 높아진다
baseline이 image plane을 통과하면 만나는 점이 epipole이다
epipole이 직선 위에 올라있기도 하다
모든 epipolar plane은 baseline을 갖고 있다
하나의 이미지에서 여러 3d point를 측정하고 그 위치가 있을 때
그 위치를 바꾸면 회전하는 경우로 인식할 수 있다
correspondence가 있기 위한 세 가지 조건(epipolar constraint)
- 3d point는 epipolar plane 위에 있어야 한다
- 모든 epipolar line들은 epipole과 교차해야 한다
- 모든 baseline은 epipole과 교차해야 하며 모든 epipolar plane은 epipole을 포함해야 한다
Essential Matrix / Fundamental Matrix
Fundamental matrix
epipolar constraint encoding
correspondence를 정확히 구해야 epipolar constraint를 알 수 있다
두 image plane을 E 행렬이 묶어줌으로 구할 수 있다
이 삼각형으로 constraint를 만들고 두 카메라 간의 회전과 이동에 대한 정보를 가지고 있다
Essential 행렬을 행렬 분해로 통해 역으로 나눈다
Instrinsic matrix(K)와 Essential matrix
normalized image plane에서 pixel location으로 바꿔주는 정보가 필요하다
이것을 K 행렬이라 한다
스테레오 이미지에서는 좌우가 다른 K를 가지고 있다
각 카메라 마다 다른 K를 적용한다
Line 찾기
Fundamental 행렬을 통해
한 쪽 이미지의 포인트와 다른 이미지의 line과의 관계를 설명한다
F 행렬에 이미지 포인트 x를 곱하면 line을 의미한다
반대편에 대한 line을 나타낸다
line과 point의 교점에서 내적하는 경우 반드시 0이므로
이 점을 활용하여 빠르게 구할 수 있다
E/F 행렬 알고리즘
5 point 알고리즘
E 행렬을 구할 수 있다
t(x,y,z) 와 r(x,y,z)에 대한 DOF가 있다
스케일 값을 구할수 없으므로 하나를 빼서 구한다
8 point 알고리즘
F 행렬을 구할 수 있다
7 자유도를 가지고 있다
t(x,y,z) 와 r(x,y,z) focal length와 center point에 대한 DOF가 있다
스케일 값을 구할수 없으므로 하나를 빼서 구한다
ax = 0를 풀어야 하는데
노이즈가 있는 경우에는 0이 아닐 수 있다
OpenCV에서 사용
feature 정보들 간의 match 정보인 correspondence를 매칭할 때 사용할 수 있다
'SLAM > Visual SLAM' 카테고리의 다른 글
[VSLAM]Triangulation (1) | 2023.12.02 |
---|---|
[VSLAM]RANSAC (1) | 2023.11.28 |
[VSLAM]특징점 기술의 역사 (1) | 2023.11.25 |
[VSLAM]카메라 센서의 구조 (0) | 2023.11.24 |
[VSLAM]핀홀카메라 투영 (1) | 2023.11.23 |