IDS peak ICV v1.2.0
Loading...
Searching...
No Matches
workspace_calibration.py
Go to the documentation of this file.
1# @package WorkspaceCalibration
2
3from __future__ import annotations
4import ctypes
5from typing import Union, Any
6
7from ids_peak_icv import lib_loader
8from ids_peak_icv.exceptions import NotPossibleException, NotSupportedException
9from ids_peak_icv.calibration.calibration_parameters import CalibrationParameters
10from ids_peak_icv.calibration.intrinsic_parameters import IntrinsicParameters
11from ids_peak_icv.calibration.calibration_result import CalibrationResult
12from ids_peak_icv.calibration.calibration_plate import CalibrationPlate
13from ids_peak_icv.backend.utils import execute_and_map_return_codes
14from ids_peak_icv.datatypes.image import Image, _check_and_get_icv_image
15from ids_peak_ipl import ids_peak_ipl
16
17
19 """!
20 @brief
21 Class for calibrating a workspace.
22
23 The WorkspaceCalibration calculates the extrinsic parameters based on a single image.
24
25 @ingroup ids_peak_icv_python_calibration
26 @since ids_peak_icv 1.1
27 """
28
29 @classmethod
30 def create_from_intrinsics_and_plate(cls, intrinsic_parameters: IntrinsicParameters,
31 calibration_plate: CalibrationPlate) -> WorkspaceCalibration:
32 """!
33 @brief
34 Creates an instance of class WorkspaceCalibration.
35
36 In order to perform a workspace calibration, intrinsic parameters and a calibration plate must be provided.
37
38 @param intrinsic_parameters: Can be obtained using e.g. CameraCalibration.process() or
39 CalibrationParameters.create_from_file().
40 @param calibration_plate: A calibration plate.
41
42 @since ids_peak_icv 1.1
43 """
44
45 return cls(_intrinsic_parameters=intrinsic_parameters, _calibration_plate=calibration_plate)
46
47 def __init__(self, *args: Any, **kwargs: Any) -> None:
48 """!
49 @brief
50 In order to create a WorkspaceCalibration, please refer to the classmethods.
51
52 @since ids_peak_icv 1.1
53 """
54 try:
55 self._intrinsic_parameters = kwargs["_intrinsic_parameters"]
56 self._calibration_plate = kwargs["_calibration_plate"]
57 except KeyError:
59 "Cannot initialize {} with __init__. Please use a classmethod.".format(self.__class__.__name__))
60
61 def process(self, image: Union[Image, ids_peak_ipl.Image]) -> CalibrationResult:
62 """!
63 @brief
64 Applies the workspace calibration and calculates the extrinsic camera parameters based on a single view of a
65 calibration pattern.
66 Furthermore, it computes the mean reprojection error.
67
68 @note This operation disregards any specified image regions. It processes the entire image.
69
70 @param image: An image containing a single calibration plate.
71
72 @exception NotPossibleException: If no image is provided.
73 @exception NotSupportedException: If the image format is not supported.
74 @exception MismatchException: If the sizes of the image is different to the one given
75 in the intrinsic parameters.
76 @exception TargetNotFoundException: If the images does not contain any calibration plate.
77
78 @since ids_peak_icv 1.1
79 """
80 if not isinstance(image, (Image, ids_peak_ipl.Image)):
82 "The given parameter type is not supported, only Images are supported.")
83
84 _image = _check_and_get_icv_image(image)
85
86 calibration_result = CalibrationResult._create_empty()
87
88 execute_and_map_return_codes(lib_loader.dll().peak_icv_WorkspaceCalibration_Process,
89 self._calibration_plate._handle,
90 self._intrinsic_parameters._parameters,
91 ctypes.sizeof(self._intrinsic_parameters._parameters),
92 _image._handle, ctypes.pointer(calibration_result._handle))
93
94 return calibration_result
None __init__(self, *Any args, **Any kwargs)
In order to create a WorkspaceCalibration, please refer to the classmethods.
WorkspaceCalibration create_from_intrinsics_and_plate(cls, IntrinsicParameters intrinsic_parameters, CalibrationPlate calibration_plate)
Creates an instance of class WorkspaceCalibration.
CalibrationResult process(self, Union[Image, ids_peak_ipl.Image] image)
Applies the workspace calibration and calculates the extrinsic camera parameters based on a single vi...
Thrown when an operation cannot be performed due to logical constraints.
Definition exceptions.py:85
Thrown when a requested operation is not implemented or supported.
Definition exceptions.py:71