[3D CV] COLMAP Coordinate system w2c
[Page]
- COLMAP에서 world coordinate system은 첫번째 이미지 frame을 기준으로 합니다.
COLMAP에서 구하는 camera poses에서 R,T
는 R_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.
실전 예제 (3D Gaussian Splatting –> dataset_reader.py
)
- COLMAP에서 직접 불러온
w2c
의R,T
이든, - NeRF(=Blender dataset)에서 불러온
c2w
의R,T
이든
먼저 R,T를 w2c기준으로 맞춰줍니다.
- COLMAP은 그대로
w2c
기준인R,T
사용합니다. - NeRF는
c2w
의 역행렬을 구하여w2c
기준의R,T
를 구합니다. - 위 코드에서 transpose는 inverse해서 역행렬을 구하는게 아니라, cuda 코드에서 연산을 위해 취해준 작업입니다.
최종적으로 코드에서 불러와서 사용하는 R,T
는 R_w2c, T_w2c 형태입니다.
주의! R,T
를 다루기전 NeRF(‘transform_matrix’)의 축방향은 COLMAP(OpenCV)의 축방향으로 설정합니다.
- WCS: World Coordinate System
- CCS: Camera Coordinate System
COLMAP, OpenCV (Right, Down, Forward)
NeRF, Blender (Right, Up, Back)
dataset_readers.py
=> ["transform_matrix"]
–> COLMAP(OpenCV)
["transform_matrix"]
에서 축방향을 COLMAP(OpenCV)로 조작한 후, R.transpose
를 취합니다.
Leave a comment