Toggle Light / Dark / Auto color theme
Toggle table of contents sidebar
Source code for pyvale.sensorsim.cameradata
# ==============================================================================
# pyvale: the python validation engine
# License: MIT
# Copyright (C) 2025 The Computer Aided Validation Team
# ==============================================================================
"""
NOTE: This module is a feature under developement.
"""
from dataclasses import dataclass , field
import numpy as np
from scipy.spatial.transform import Rotation
[docs]
@dataclass ( slots = True )
class CameraData :
pixels_num : np . ndarray
pixels_size : np . ndarray
pos_world : np . ndarray
rot_world : Rotation
roi_cent_world : np . ndarray
focal_length : float | None = 50.0
sub_samp : int = 2
bits : int = 16
back_face_removal : bool = True
k1 : float = 0.0
k2 : float = 0.0
k3 : float = 0.0
p1 : float = 0.0
p2 : float = 0.0
c0 : float | None = None
c1 : float | None = None
fstop : float | None = None
sensor_size : np . ndarray = field ( init = False )
image_dims : np . ndarray = field ( init = False )
image_dist : float = field ( init = False )
cam_to_world_mat : np . ndarray = field ( init = False )
world_to_cam_mat : np . ndarray = field ( init = False )
def __post_init__ ( self ) -> None :
relative_pos = np . subtract ( self . pos_world , self . roi_cent_world )
self . image_dist = np . linalg . norm ( relative_pos )
self . sensor_size = self . pixels_num * self . pixels_size
self . image_dims = ( self . image_dist
* self . sensor_size / self . focal_length )
self . cam_to_world_mat = np . zeros (( 4 , 4 ))
self . cam_to_world_mat [ 0 : 3 , 0 : 3 ] = self . rot_world . as_matrix ()
self . cam_to_world_mat [ - 1 , - 1 ] = 1.0
self . cam_to_world_mat [ 0 : 3 , - 1 ] = self . pos_world
self . world_to_cam_mat = np . linalg . inv ( self . cam_to_world_mat )
if self . c0 is None :
self . c0 = self . pixels_num [ 0 ] / 2
if self . c1 is None :
self . c1 = self . pixels_num [ 1 ] / 2