Perspective-n-Points

Perspective-n-Points

  • PnP Problem
  • 2D 데이터와 3D 데이터간의 correspondence가 주어졌을 때 world -> camera transformation을 추론하는 것이 목적
    • 카메라가 3D Map을 바라보고 있을 때, 이미지 feature -> 3D Points 간의 Correspondence를 구했다고 하면, 이 정보를 통해 현재 카메라의 Pose를 추정하는 것이 목적
      • 이때 몇 개의 2D -> 3D Correspondence를 사용하느냐에 따라 n의 숫자가 정해짐
  • 이미지에서 feature을 뽑고, 3d map과 matching함으로써 3d map에서 나의 위치를 찾을 수 있게 함

    • Localization과 직접적으로 관련있는 기술
    • Visual Localization을 구현할 때 PnP 기법이 가장 중요한 부분으로 작용함

Triangulation에서는 2 view 상황에서 3d point x 의 위치를 찾는 법에 대해 알아봄

  • 이때 우리는 3d point x에 연관된 descriptor는 왼쪽 카메라와 오른쪽 카메라에서 보인 descriptor 정보라고 이해할 수 있음

PnP 에서는 3d point x가 담고 있는 descriptor들과 현재 view에서 보이는 descriptor들을 매칭해서 2D -> 3D Correspondence를 구함

  • 그리고 충분한 수의 2D -> 3D Correspondence가 만들어지면 이 데이터를 통해 카메라의 Pose(6 DoF : tx, ty, tz, rx, ry, rz)를 구함

  • 6 자유도의 데이터를 구하기 위해서는 6개의 데이터가 필요함

    • 2D -> 3D Correspondence에서 Image feature인 u1, u2, u3과 그에 해당하는 3D Point p1, p2, p3 총 3쌍(6개 데이터)를 사용하는 p3p가 minimal solver가 됨

    • 하지만 p3p 알고리즘은 노이즈를 전혀 고려하지 않아서 RANSAC과 같은 outlier rejection이 필요해 p3p를 사용할 때는 RANSAC 프레임워크에서 돌리는 경우가 많음

OpenCV 함수

  • PnP의 경우 데이터 자체를 픽셀로 계산하므로 Calibrated Camera인 K Matrix를 아는 경우에서만 사용할 수 있음
  • 최신 VSLAM들이 생성된 Map을 기반으로 Pose tracking을 하기 위해 사용

image

P3P Grunert

P3P

전제 상황

  • World Coordinate 기준으로 3D Point X1, X2, X3의 위치를 알고 있음
  • 카메라 이미지 위의 작은 X’1, X’2, X’3 을 픽셀 위치로 알고 있음
  • Optical Center로부터의 픽셀 위치를 알고 있음
  1. Estimate length of projection rays
  2. Estimate the Orientation

image

  • s_i : ray의 길이
  • k_x_i _s : Object 포인트를 향하고 있는 ray의 방향 벡터
  • R : World -> Camera transformation의 회전값

image image

image image

image

image

image