1 minute read

[Page]

COLMAP에서 구하는 camera poses에서 R,TR_w2c, T_w2c 입니다.

COLMAP document의 images.txt 설명

The reconstructed pose of an image is specified as the projection from world to the camera coordinate system of an image using a quaternion (QW, QX, QY, QZ) and a translation vector (TX, TY, TZ).

The quaternion is defined using the Hamilton convention, which is, for example, also used by the Eigen library.

The coordinates of the projection/camera center are given by -R^t * T, where R^t is the inverse/transpose of the 3x3 rotation matrix composed from the quaternion and T is the translation vector.

The local camera coordinate system of an image is defined in a way that the X axis points to the right, the Y axis to the bottom, and the Z axis to the front as seen from the image.

image

실전 예제 (3D Gaussian Splatting –> dataset_reader.py)

image

  • COLMAP에서 직접 불러온 w2cR,T이든,
  • NeRF(=Blender dataset)에서 불러온 c2wR,T이든

먼저 R,T를 w2c기준으로 맞춰줍니다.

  • COLMAP은 그대로 w2c기준인 R,T 사용합니다.
  • NeRF는 c2w의 역행렬을 구하여 w2c기준의 R,T를 구합니다.
  • 위 코드에서 transpose는 inverse해서 역행렬을 구하는게 아니라, cuda 코드에서 연산을 위해 취해준 작업입니다.

최종적으로 코드에서 불러와서 사용하는 R,TR_w2c, T_w2c 형태입니다.

주의! R,T를 다루기전 NeRF(‘transform_matrix’)의 축방향은 COLMAP(OpenCV)의 축방향으로 설정합니다.

  • WCS: World Coordinate System
  • CCS: Camera Coordinate System

COLMAP, OpenCV (Right, Down, Forward)

image

NeRF, Blender (Right, Up, Back)

image

dataset_readers.py => ["transform_matrix"] –> COLMAP(OpenCV)

image

["transform_matrix"]에서 축방향을 COLMAP(OpenCV)로 조작한 후, R.transpose를 취합니다.

Leave a comment