IDS peak ICV v1.1.0
Loading...
Searching...
No Matches
calibration_parameters.py
Go to the documentation of this file.
1from __future__ import annotations
2
3import ctypes
4from typing import Any, cast
5
6import numpy as np
7
8from ids_peak_icv import lib_loader
9from ids_peak_icv.backend.datatypes import peak_icv_calibration_parameters
10from ids_peak_icv.backend.utils import execute_and_map_return_codes
11from ids_peak_icv.exceptions import NotPossibleException, CorruptedException, MismatchException
12from ids_peak_icv.calibration.intrinsic_parameters import IntrinsicParameters
13from ids_peak_icv.calibration.extrinsic_parameters import ExtrinsicParameters
14
15
17 """!
18 @brief
19 Represents the calibration parameters, which include intrinsic and extrinsic
20 parameters.
21
22 @ingroup ids_peak_icv_python_calibration
23 @since ids_peak_icv 1.1
24 """
25
26 def __init__(self, *args: Any, **kwargs: Any) -> None:
27 """!
28 @brief
29 In order to create CalibrationParameters, please refer to the classmethods.
30
31 @since ids_peak_icv 1.1
32 """
33 try:
34 if "_parameters" in kwargs:
35 parameters = kwargs["_parameters"]
36 self._intrinsic_parameters = IntrinsicParameters(_parameters=parameters.intrinsic_parameters)
37 self._extrinsic_parameters = ExtrinsicParameters(_parameters=parameters.extrinsic_parameters)
38 elif "_extrinsic_parameters" in kwargs and "_intrinsic_parameters" in kwargs:
39 self._intrinsic_parameters = kwargs["_intrinsic_parameters"]
40 self._extrinsic_parameters = kwargs["_extrinsic_parameters"]
41 else:
42 raise KeyError
43 except KeyError:
45 f"{self.__class__.__name__} shall not be initialized directly. Use class methods."
46 )
47
48 @classmethod
49 def create_from_file(cls, file_path: str) -> CalibrationParameters:
50 """!
51 @brief
52 Creates an instance of CalibrationParameters from a file.
53
54 @param file_path: An existing file path to a JSON file containing the calibration parameters.
55
56 @exception IOException: If the given file_path does not exist, or the permissions are not sufficient
57 to read it.
58 @exception CorruptedException: If the file content is corrupted.
59
60 @return A new instance of CalibrationParameters
61
62 @since ids_peak_icv 1.1
63 """
64 c_file_path = file_path.encode('utf-8')
66
67 execute_and_map_return_codes(
68 lib_loader.dll().peak_icv_CalibrationParameters_CreateFromFile,
69 ctypes.pointer(parameters), ctypes.sizeof(parameters),
70 ctypes.c_char_p(c_file_path)
71 )
72
73 return CalibrationParameters(_parameters=parameters)
74
75 @classmethod
76 def create_from_parameters(cls, intrinsic_parameters: IntrinsicParameters,
77 extrinsic_parameters: ExtrinsicParameters) -> CalibrationParameters:
78 """!
79 @brief
80 Creates an instance of CalibrationParameters using intrinsic and extrinsic parameters.
81
82 @param intrinsic_parameters: The intrinsic camera parameters.
83 @param extrinsic_parameters: The extrinsic camera parameters.
84
85 @return A new instance of CalibrationParameters
86
87 @since ids_peak_icv 1.1
88 """
90 _intrinsic_parameters=intrinsic_parameters,
91 _extrinsic_parameters=extrinsic_parameters
92 )
93
94 @classmethod
95 def create_from_binary(cls, binary: np.ndarray) -> CalibrationParameters:
96 """!
97 @brief
98 Creates an instance of CalibrationParameters from binary data.
99
100 @param binary: A NumPy array containing the binary representation of calibration parameters.
101
102 @return A new instance of CalibrationParameters
103
104 @exception CorruptedException: If the binary calibration parameters are corrupted.
105
106 @since ids_peak_icv 1.1
107 """
108 if binary.dtype != np.uint8:
109 # todo test this
110 raise MismatchException("Data type of the numpy array must be uint8")
111
112 is_valid = ctypes.c_bool(False)
113 size = len(binary)
114
115 execute_and_map_return_codes(
116 lib_loader.dll().peak_icv_ValidateBinary,
117 binary.ctypes.data_as(ctypes.POINTER(ctypes.c_uint8)), size,
118 ctypes.pointer(is_valid)
119 )
120
121 if not is_valid.value:
122 raise CorruptedException("The given binary data is invalid")
123
124 calibration_parameters = peak_icv_calibration_parameters()
125 execute_and_map_return_codes(
126 lib_loader.dll().peak_icv_CalibrationParameters_CreateFromBinary,
127 binary.ctypes.data_as(ctypes.POINTER(ctypes.c_uint8)), size,
128 ctypes.pointer(calibration_parameters), ctypes.sizeof(calibration_parameters)
129 )
130
131 return CalibrationParameters(_parameters=calibration_parameters)
132
133 def to_binary(self) -> np.ndarray:
134 """!
135 @brief
136 Converts the CalibrationParameters instance to a binary representation.
137
138 @return A NumPy array containing the binary data.
139
140 @since ids_peak_icv 1.1
141 """
142
143 calibration_parameters = peak_icv_calibration_parameters(
144 intrinsic_parameters=self._intrinsic_parameters._parameters,
145 extrinsic_parameters=self._extrinsic_parameters._parameters
146 )
147
148 binary_size = ctypes.c_size_t()
149 execute_and_map_return_codes(
150 lib_loader.dll().peak_icv_CalibrationParameters_ToBinaryGetSizeInBytes,
151 ctypes.sizeof(calibration_parameters), ctypes.pointer(binary_size)
152 )
153 data = np.zeros(binary_size.value, dtype=np.uint8)
154
155 execute_and_map_return_codes(
156 lib_loader.dll().peak_icv_CalibrationParameters_ToBinary,
157 calibration_parameters, ctypes.sizeof(calibration_parameters),
158 data.ctypes.data_as(ctypes.POINTER(ctypes.c_uint8)), binary_size
159 )
160
161 return data
162
163 @property
164 def intrinsic_parameters(self) -> IntrinsicParameters:
165 """!
166 @brief
167 Retrieves the intrinsic parameters of the calibration.
168
169 @return The intrinsic camera parameters.
170
171 @since ids_peak_icv 1.1
172 """
173 return self._intrinsic_parameters
174
175 @property
176 def extrinsic_parameters(self) -> ExtrinsicParameters:
177 """!
178 @brief
179 Retrieves the extrinsic parameters of the calibration.
180
181 @return The extrinsic camera parameters.
182
183 @since ids_peak_icv 1.1
184 """
185 return self._extrinsic_parameters
186
187 def save(self, file_path: str) -> None:
188 """!
189 @brief
190 Saves the calibration parameters to a file.
191
192 @param file_path: The path where the parameters should be saved.
193
194 @exception IOException: If the file cannot be saved or permissions are insufficient.
195
196 @since ids_peak_icv 1.1
197 """
198 c_file_path = file_path.encode('utf-8')
199
201 intrinsic_parameters=self._intrinsic_parameters._parameters,
202 extrinsic_parameters=self._extrinsic_parameters._parameters
203 )
204
205 execute_and_map_return_codes(
206 lib_loader.dll().peak_icv_CalibrationParameters_SaveToFile,
207 parameters, ctypes.sizeof(parameters),
208 ctypes.c_char_p(c_file_path)
209 )
210
211 def __eq__(self, other: object) -> bool:
212 """!
213 @brief
214 Compares two CalibrationParameters instances for equality.
215
216 @param other: Another instance to compare.
217
218 @return True if both instances are equal, False otherwise.
219
220 @since ids_peak_icv 1.1
221 """
222
223 if not isinstance(other, CalibrationParameters):
224 return False
225
226 return (self.intrinsic_parametersintrinsic_parameters == other.intrinsic_parameters and
227 self.extrinsic_parametersextrinsic_parameters == other.extrinsic_parameters)
Represents the calibration parameters, which include intrinsic and extrinsic parameters.
CalibrationParameters create_from_parameters(cls, IntrinsicParameters intrinsic_parameters, ExtrinsicParameters extrinsic_parameters)
Creates an instance of CalibrationParameters using intrinsic and extrinsic parameters.
None __init__(self, *Any args, **Any kwargs)
In order to create CalibrationParameters, please refer to the classmethods.
None save(self, str file_path)
Saves the calibration parameters to a file.
bool __eq__(self, object other)
Compares two CalibrationParameters instances for equality.
CalibrationParameters create_from_file(cls, str file_path)
Creates an instance of CalibrationParameters from a file.
IntrinsicParameters intrinsic_parameters(self)
Retrieves the intrinsic parameters of the calibration.
ExtrinsicParameters extrinsic_parameters(self)
Retrieves the extrinsic parameters of the calibration.
CalibrationParameters create_from_binary(cls, np.ndarray binary)
Creates an instance of CalibrationParameters from binary data.
np.ndarray to_binary(self)
Converts the CalibrationParameters instance to a binary representation.
Class for handling extrinsic parameters related to camera calibration.
Thrown when input data or a file is malformed, unreadable, or otherwise corrupted.
Thrown when input parameters do not match the expected conditions.
Definition exceptions.py:54
Thrown when an operation cannot be performed due to logical constraints.
Definition exceptions.py:85