Triangulation

Epipolar geometry를 통해서 Essential Matrix와 Fundamental Matrix를 구하는 방법을 배움

RANSAC을 통해 돌리면, 안정적인 E Matrix나 F Matrix를 구할 수 있는 것도 배움

Essential Matrix를 SVD(Singular Value Decomposition)으로 분해를 하면 2개의 View간의 상대적인 Rotation과 Translation을 구할 수 있는 것도 배움

VSLAM = Localization + Mapping

  • Localization(위치추정) : E Matrix, F Matrix는 2개의 이미지 간의 상대적인 이동치를 추정하는 것
  • 그렇다면 3D 구조를 복원해주는 Mapping에도 알고리즘이 존재하는데 Mapping의 첫 단추가 Triangulation

Triangulation

  • 2D 이미지 데이터에서 3D 공간으로 Mapping

  • 2개의 이미지 사이에서 상대적인 회전값을 알고 있고 Feature들 간의 Correspondence를 알고 있을 때 이 Feature들이 의미하는 3D Point X의 위치(x, y, z)를 복원하는 과정
  • 서로 매칭이 된 feature끼리 ray를 그리면 하나의 3D Point x에서 만나게 됨
    • 그림에서는 2쌍의 correspondence를 triangulation을 통해서 3d point x 2개를 구함
    • 3d point 2개간의 거리도 추정할 수 있음
    • 모든 correspondence간의 관계에 적용하면 3D 구조에 대해 깊게 이해할 수 있음

image

Triangulation 과정을 수학적으로 설명

  • 카메라 P와 Q가 있고 각각의 카메라는 3D Point를 보는 ray를 갖고 있음
    • ray는 optical center로 부터 2d feature의 상이 맺힌 곳을 뚫고 지나감
  • 하지만 3차원의 세상에서는 feature keypoint 위치에 노이즈가 있으므로 완벽하게 3D Point x에 만나서 교차하지 않고 ray 끼리 조금의 간격을 두고 떨어져있음(아래 2D 그림으로는 교차하는 것 처럼 보이지만 교차하지 않고 있음)
  • 따라서 교차점을 설정해야 함
    • 교차점을 설정하는 가장 쉬운 방법으로 두 ray가 만날 수 있는 가장 가까운 점을 구함
      • F와 G를 찾고 P의 ray와 Q의 ray가 같은 정도의 노이즈 값을 갖고 있다는 전제로 두 점의 중간 지점인 H점을 교차점으로 인식

image

P, Q의 ray를 표현한 식
  • 방향 벡터 : r, s (방향성을 갖고 있는 unit vector)
    • 구할 수 있는 값
  • 거리 값 : 람다, 뮤
    • 미지수
  • 시작 위치 : p, q
    • 이미 알고 있는 값

image

방향 벡터
  • k x’ 은 calibration이 된 왼쪽 카메라의 feature 위치(2D 이미지의 pixel 위치) / k x’’ 은 calibration이 된 오른쪽 카메라의 feature 위치(2D 이미지의 pixel 위치)
    • (x’, y’, c) 값을 갖고 있는데 x’, y’ 은 이미지 픽셀의 위치 값이고, c 는 camera constants(focal length, 초점거리)
  • Rotation Matrix(World Coordinate -> Camera Coordinate, 3D 세상 속의 카메라의 위치)
    • SO(3)의 Transpose는 Inverse이므로, Rotation Matrix(World Coordinate -> Camera Coordinate)의 Inverse니깐 Camera Coordinate -> World Coordinate인 매트릭스가 됨
  • Inverse Rotation Matrix를 2D feature 위치에 곱하게 되면, camera coordinate에 있는 feature이 world coordinate에서는 3D Ray가 되서 r, s가 됨
  • r, s 모두 world coordinate에서 표현한 direction vector가 됨

image

하지만 2 수식으로는 교차점 H를 구할 수 없음 -> 2개의 3D Ray는 Intersection 하지 않으므로

F와 G가 되는 위치는 2개의 ray가 가장 가깝게 거리를 갖는 지점이 되는 기하학적인 성질을 이용

  • FG에 라인을 그린다고하면, P와 Q에대한 ray와 Otrhogonal
Otrhogonal Projection
  • Orthogonal한 2개의 line 벡터끼리 dot product를 하면 0이 나옴(cos 90도 : 0)
  • 아래 2개의 수식으로 2개의 미지수 람다와 뮤를 구할 수 있음
  • 그리고 나온 람다와 뮤를 이용해서 F와 G의 위치를 구할 수 있고 H의 위치도 구할 수 있음

image

p, q가 아닌 실질적인 카메라의 위치로 표현하면?

  • Xo’ : 왼쪽 카메라의 센터
  • Xo’’ : 오른쪽 카메라의 센터

image

image

  • 여기서는 H의 값을 중간으로 설정하여 F와 G의 영향도를 각각 0.5로 설정했음

  • 실제로 고도화된 알고리즘에서는 P와 Q의 위치를 수정할 때 나타나는 확률을 기반으로 각각의 Uncertainty(불확실성)를 구할 수 있고 이에 따라 F와 G의 신뢰도가 달라지고 그에 맞춰서 weight값이 바뀜

    e.g P가 더 믿을만하고 Q가 덜 믿을만하다면 -> F에는 0.7을 곱하고 G에는 0.3을 곱하여 70%는 F를 믿고 30%는 G를 믿게 설정할 수 있음

Stereo Triangulation

  • 좌, 우 카메라가 전방을 바라보고 있고 같은 Plane에 놓여 있음
  • 둘 간의 baseline(B), 각각 이미지에 맺히는 상인 X’, X’‘의 위치와 두 개 이미지에 올라가 있는 feature 위치의 차이(parallex, disparity)를 알고 있음

image

Top view

image

  • Z (depth) 값을 다음과 같이 구할 수 있음

image

  • X나 Y 값도 구할 수 있음

image

image