Fix conversion from Blender to COLMAP coords in NeRF camera import. (#111)

Co-authored-by: Jakub Červený <jakub.cerveny@melowntech.com>
This commit is contained in:
Jakub Červený 2023-08-24 17:38:48 +02:00 committed by GitHub
parent 073775efbd
commit 0f125cbd5f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -187,10 +187,15 @@ def readCamerasFromTransforms(path, transformsfile, white_background, extension=
for idx, frame in enumerate(frames): for idx, frame in enumerate(frames):
cam_name = os.path.join(path, frame["file_path"] + extension) cam_name = os.path.join(path, frame["file_path"] + extension)
matrix = np.linalg.inv(np.array(frame["transform_matrix"])) # NeRF 'transform_matrix' is a camera-to-world transform
R = -np.transpose(matrix[:3,:3]) c2w = np.array(frame["transform_matrix"])
R[:,0] = -R[:,0] # change from OpenGL/Blender camera axes (Y up, Z back) to COLMAP (Y down, Z forward)
T = -matrix[:3, 3] c2w[:3, 1:3] *= -1
# get the world-to-camera transform and set R, T
w2c = np.linalg.inv(c2w)
R = np.transpose(w2c[:3,:3]) # R is stored transposed due to 'glm' in CUDA code
T = w2c[:3, 3]
image_path = os.path.join(path, cam_name) image_path = os.path.join(path, cam_name)
image_name = Path(cam_name).stem image_name = Path(cam_name).stem