From d82f3479645e1ebaf615aee7633f320a744adc97 Mon Sep 17 00:00:00 2001 From: tianrking <10758833+tianrking@users.noreply.github.com> Date: Mon, 10 Aug 2026 04:02:11 +0800 Subject: [PATCH] Fix Metashape tangential distortion import. --- nerfstudio/process_data/metashape_utils.py | 5 +- tests/process_data/test_metashape_utils.py | 54 ++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 tests/process_data/test_metashape_utils.py diff --git a/nerfstudio/process_data/metashape_utils.py b/nerfstudio/process_data/metashape_utils.py index cfce125568..62f806e9a6 100644 --- a/nerfstudio/process_data/metashape_utils.py +++ b/nerfstudio/process_data/metashape_utils.py @@ -110,8 +110,9 @@ def metashape_to_json( s["k2"] = _find_param(calib, "k2") s["k3"] = _find_param(calib, "k3") s["k4"] = _find_param(calib, "k4") - s["p1"] = _find_param(calib, "p1") - s["p2"] = _find_param(calib, "p2") + # Metashape and OpenCV reverse the p1 and p2 names for the same tangential terms. + s["p1"] = _find_param(calib, "p2") + s["p2"] = _find_param(calib, "p1") sensor_dict[sensor.get("id")] = s diff --git a/tests/process_data/test_metashape_utils.py b/tests/process_data/test_metashape_utils.py new file mode 100644 index 0000000000..051046c5d5 --- /dev/null +++ b/tests/process_data/test_metashape_utils.py @@ -0,0 +1,54 @@ +# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for importing Metashape camera data.""" + +import json +from pathlib import Path + +from nerfstudio.process_data.metashape_utils import metashape_to_json + + +def test_metashape_tangential_distortion_conversion(tmp_path: Path): + xml_path = tmp_path / "cameras.xml" + xml_path.write_text( + """ + + + + + + + 500 + 0.001 + -0.002 + + + + + + 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 + + + + +""", + encoding="utf-8", + ) + + metashape_to_json({"image": Path("images/image.jpg")}, xml_path, tmp_path) + + transforms = json.loads((tmp_path / "transforms.json").read_text(encoding="utf-8")) + assert transforms["frames"][0]["p1"] == -0.002 + assert transforms["frames"][0]["p2"] == 0.001