IDS peak ICV v1.3.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 raise MismatchException("Data type of the numpy array must be uint8")
110
111 is_valid = ctypes.c_bool(False)
112 size = len(binary)
113
114 execute_and_map_return_codes(
115 lib_loader.dll().peak_icv_ValidateBinary,
116 binary.ctypes.data_as(ctypes.POINTER(ctypes.c_uint8)), size,
117 ctypes.pointer(is_valid)
118 )
119
120 if not is_valid.value:
121 raise CorruptedException("The given binary data is invalid")
122
123 calibration_parameters = peak_icv_calibration_parameters()
124 execute_and_map_return_codes(
125 lib_loader.dll().peak_icv_CalibrationParameters_CreateFromBinary,
126 binary.ctypes.data_as(ctypes.POINTER(ctypes.c_uint8)), size,
127 ctypes.pointer(calibration_parameters), ctypes.sizeof(calibration_parameters)
128 )
129
130 return CalibrationParameters(_parameters=calibration_parameters)
131
132 def to_binary(self) -> np.ndarray:
133 """!
134 @brief
135 Converts the CalibrationParameters instance to a binary representation.
136
137 @return A NumPy array containing the binary data.
138
139 @since ids_peak_icv 1.1
140 """
141
142 calibration_parameters = peak_icv_calibration_parameters(
143 intrinsic_parameters=self._intrinsic_parameters._parameters,
144 extrinsic_parameters=self._extrinsic_parameters._parameters
145 )
146
147 binary_size = ctypes.c_size_t()
148 execute_and_map_return_codes(
149 lib_loader.dll().peak_icv_CalibrationParameters_ToBinaryGetSizeInBytes,
150 ctypes.sizeof(calibration_parameters), ctypes.pointer(binary_size)
151 )
152 data = np.zeros(binary_size.value, dtype=np.uint8)
153
154 execute_and_map_return_codes(
155 lib_loader.dll().peak_icv_CalibrationParameters_ToBinary,
156 calibration_parameters, ctypes.sizeof(calibration_parameters),
157 data.ctypes.data_as(ctypes.POINTER(ctypes.c_uint8)), binary_size
158 )
159
160 return data
161
162 @property
163 def intrinsic_parameters(self) -> IntrinsicParameters:
164 """!
165 @brief
166 Retrieves the intrinsic parameters of the calibration.
167
168 @return The intrinsic camera parameters.
169
170 @since ids_peak_icv 1.1
171 """
172 return self._intrinsic_parameters
173
174 @property
175 def extrinsic_parameters(self) -> ExtrinsicParameters:
176 """!
177 @brief
178 Retrieves the extrinsic parameters of the calibration.
179
180 @return The extrinsic camera parameters.
181
182 @since ids_peak_icv 1.1
183 """
184 return self._extrinsic_parameters
185
186 @extrinsic_parameters.setter
187 def extrinsic_parameters(self, extrinsic_parameters: ExtrinsicParameters) -> None:
188 """!
189 @brief
190 Sets the extrinsic parameters of the calibration.
191
192 @param extrinsic_parameters: The extrinsic camera parameters.
193
194 @since ids_peak_icv 1.2
195 """
196 self._extrinsic_parameters = extrinsic_parameters
197
198 def save(self, file_path: str) -> None:
199 """!
200 @brief
201 Saves the calibration parameters to a file.
202
203 @param file_path: The path where the parameters should be saved.
204
205 @exception IOException: If the file cannot be saved or permissions are insufficient.
206
207 @since ids_peak_icv 1.1
208 """
209 c_file_path = file_path.encode('utf-8')
210
212 intrinsic_parameters=self._intrinsic_parameters._parameters,
213 extrinsic_parameters=self._extrinsic_parameters._parameters
214 )
215
216 execute_and_map_return_codes(
217 lib_loader.dll().peak_icv_CalibrationParameters_SaveToFile,
218 parameters, ctypes.sizeof(parameters),
219 ctypes.c_char_p(c_file_path)
220 )
221
222 def __eq__(self, other: object) -> bool:
223 """!
224 @brief
225 Compares two CalibrationParameters instances for equality.
226
227 @param other: Another instance to compare.
228
229 @return True if both instances are equal, False otherwise.
230
231 @since ids_peak_icv 1.1
232 """
233
234 if not isinstance(other, CalibrationParameters):
235 return False
236
237 return (self.intrinsic_parametersintrinsic_parameters == other.intrinsic_parameters and
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 extrinsic_parameters(self, ExtrinsicParameters extrinsic_parameters)
Sets the extrinsic parameters of the calibration.
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.
Occurs when reading from a file or stream that is incomplete, damaged, or in an unexpected format.
Occurs when input parameters do not match expected conditions (e.g., two input images have different ...
Definition exceptions.py:45
Occurs when an operation cannot be performed due to logical constraints (e.g., camera calibration wit...
Definition exceptions.py:72