diff --git a/nerfstudio/process_data/record3d_utils.py b/nerfstudio/process_data/record3d_utils.py index 50212c2b2..45867bd48 100644 --- a/nerfstudio/process_data/record3d_utils.py +++ b/nerfstudio/process_data/record3d_utils.py @@ -75,7 +75,6 @@ def record3d_to_json( # Camera intrinsics K = np.array(metadata_dict["K"]).reshape((3, 3)).T - focal_length = K[0, 0] H = metadata_dict["h"] W = metadata_dict["w"] @@ -85,8 +84,8 @@ def record3d_to_json( cx, cy = W / 2, H / 2 out = { - "fl_x": focal_length, - "fl_y": focal_length, + "fl_x": K[0, 0], + "fl_y": K[1, 1], "cx": cx, "cy": cy, "w": W, diff --git a/tests/process_data/test_record3d_intrinsics.py b/tests/process_data/test_record3d_intrinsics.py new file mode 100644 index 000000000..7479e5d42 --- /dev/null +++ b/tests/process_data/test_record3d_intrinsics.py @@ -0,0 +1,17 @@ +import json +from pathlib import Path + +import numpy as np + +from nerfstudio.process_data.record3d_utils import record3d_to_json + + +def test_record3d_preserves_distinct_focal_lengths(tmp_path: Path): + intrinsics = np.array([[500, 0, 320], [0, 525, 240], [0, 0, 1]], dtype=float) + metadata = {"K": intrinsics.T.flatten().tolist(), "h": 480, "w": 640, "poses": [[0, 0, 0, 1, 0, 0, 0]]} + path = tmp_path / "metadata.json" + path.write_text(json.dumps(metadata)) + record3d_to_json([Path("frame.png")], path, tmp_path, np.array([0]), None, None) + + output = json.loads((tmp_path / "transforms.json").read_text()) + assert (output["fl_x"], output["fl_y"]) == (500, 525)