Files
gps-denied-onboard/test_h01_camera_model.py
T
Denys Zaitsev d7e1066c60 Initial commit
2026-04-03 23:25:54 +03:00

43 lines
1.5 KiB
Python

import pytest
import numpy as np
from h01_camera_model import CameraModel
from f02_1_flight_lifecycle_manager import CameraParameters
@pytest.fixture
def camera_model():
return CameraModel()
@pytest.fixture
def camera_params():
return CameraParameters(
focal_length_mm=25.0,
sensor_width_mm=36.0,
resolution={"width": 640, "height": 480}
)
class TestCameraModel:
def test_intrinsic_matrix_structure(self, camera_model, camera_params):
K = camera_model._get_intrinsics(camera_params)
# fx = 25 * 640 / 36 = 444.444
assert np.isclose(K[0, 0], 444.444, atol=1e-3)
assert np.isclose(K[0, 2], 320.0)
def test_pixel_to_ray_principal_point(self, camera_model, camera_params):
ray = camera_model.unproject((320.0, 240.0), 1.0, camera_params)
np.testing.assert_allclose(ray, np.array([0.0, 0.0, 1.0]))
def test_project_to_pixel(self, camera_model, camera_params):
point_3d = np.array([0.0, 0.0, 10.0])
u, v = camera_model.project(point_3d, camera_params)
assert u == 320.0
assert v == 240.0
def test_projection_unprojection_cycle(self, camera_model, camera_params):
original_u, original_v = 150.0, 400.0
ray = camera_model.unproject((original_u, original_v), 50.0, camera_params)
projected_u, projected_v = camera_model.project(ray, camera_params)
assert np.isclose(original_u, projected_u)
assert np.isclose(original_v, projected_v)