IDS peak ICV v1.1.0
Loading...
Searching...
No Matches
peak_icv_calibration_parameters.hpp
Go to the documentation of this file.
1
11#pragma once
12
14#include <peak_common_c/detail/peak_common_defines.h>
20#include <peak_icv_c/algorithms/calibration/peak_icv_calibration_parameters.h>
21#include <peak_icv_c/binary/peak_icv_binary_validator.h>
22
23namespace peak
24{
25namespace icv
26{
27
41{
42public:
68 explicit CalibrationParameters(const std::string& filePath);
69
79 CalibrationParameters(const IntrinsicParameters& intrinsicParameters, const ExtrinsicParameters& extrinsicParameters);
80
92 template <class Container
94 ,
95 typename = std::enable_if_t<detail::is_contiguous_container<Container, uint8_t>::value>
97 >
98 explicit CalibrationParameters(const Container& binaryData)
99 : CalibrationParameters{ CreateFromBinary(binaryData) }
100 {}
101
109 PEAK_COMMON_NO_DISCARD IntrinsicParameters GetIntrinsicParameters() const;
110
118 PEAK_COMMON_NO_DISCARD ExtrinsicParameters GetExtrinsicParameters() const;
119
127 PEAK_COMMON_NO_DISCARD std::vector<uint8_t> ToBinary() const;
128
129
130private:
131 friend peak::common::detail::BackendAccessor<CalibrationParameters>;
132 friend class CalibrationResult;
133
134 explicit CalibrationParameters(const peak_icv_calibration_parameters& calibrationParameters);
135 explicit operator peak_icv_calibration_parameters() const;
136 static peak_icv_calibration_parameters LoadFromFile(const std::string& filePath);
137
138 IntrinsicParameters m_intrinsicParameters;
139 ExtrinsicParameters m_extrinsicParameters;
140
141 template <class Container, typename = std::enable_if_t<detail::is_contiguous_container<Container, uint8_t>::value>>
142 static peak_icv_calibration_parameters CreateFromBinary(const Container& binaryData)
143 {
144 bool isValid{};
146 return PEAK_ICV_C_ABI_PREFIX peak_icv_ValidateBinary(binaryData.data(), binaryData.size(), &isValid);
147 });
148
149 if (!isValid)
150 {
151 throw CorruptedException("The given binary data is invalid");
152 }
153
154 peak_icv_calibration_parameters calibration_parameters{};
156 return PEAK_ICV_C_ABI_PREFIX peak_icv_CalibrationParameters_CreateFromBinary(
157 binaryData.data(), binaryData.size(), &calibration_parameters, sizeof(peak_icv_calibration_parameters));
158 });
159
160 return calibration_parameters;
161 }
162};
163
164inline CalibrationParameters::CalibrationParameters(const std::string& filePath)
165 : CalibrationParameters(LoadFromFile(filePath))
166{}
167
168inline CalibrationParameters::CalibrationParameters(const peak_icv_calibration_parameters& calibrationParameters)
169 : m_intrinsicParameters{ peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateInstance(
170 calibrationParameters.intrinsic_parameters) }
171 , m_extrinsicParameters{ peak::common::detail::BackendAccessor<ExtrinsicParameters>::CreateInstance(
172 calibrationParameters.extrinsic_parameters) }
173{}
174
176 const IntrinsicParameters& intrinsicParameters, const ExtrinsicParameters& extrinsicParameters)
177 : m_intrinsicParameters{ intrinsicParameters }
178 , m_extrinsicParameters{ extrinsicParameters }
179{}
180
181inline CalibrationParameters::operator peak_icv_calibration_parameters() const
182{
183 return { peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(m_intrinsicParameters),
184 peak::common::detail::BackendAccessor<ExtrinsicParameters>::CreateCType(m_extrinsicParameters) };
185}
186
188{
189 return m_intrinsicParameters;
190}
191
193{
194 return m_extrinsicParameters;
195}
196
197inline peak_icv_calibration_parameters CalibrationParameters::LoadFromFile(const std::string& filePath)
198{
199 peak_icv_calibration_parameters parameters{};
200
201 detail::ExecuteAndMapReturnCodes([&parameters, &filePath] {
202 return PEAK_ICV_C_ABI_PREFIX peak_icv_CalibrationParameters_CreateFromFile(&parameters, sizeof(parameters), filePath.c_str());
203 });
204
205 return parameters;
206}
207
208inline std::vector<uint8_t> CalibrationParameters::ToBinary() const
209{
210 peak_icv_calibration_parameters parameters{ peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(
211 m_intrinsicParameters),
212 peak::common::detail::BackendAccessor<ExtrinsicParameters>::CreateCType(m_extrinsicParameters) };
213
214
215 size_t binarySize{};
217 return PEAK_ICV_C_ABI_PREFIX peak_icv_CalibrationParameters_ToBinaryGetSizeInBytes(sizeof(parameters), &binarySize);
218 });
219
220 std::vector<uint8_t> binary(binarySize);
222 return PEAK_ICV_C_ABI_PREFIX peak_icv_CalibrationParameters_ToBinary(parameters, sizeof(parameters), binary.data(), binarySize);
223 });
224
225 return binary;
226}
227
228} /* namespace icv */
229} /* namespace peak */
Holds a complete set of camera calibration parameters, including both intrinsic and extrinsic data.
CalibrationParameters(const Container &binaryData)
Constructs a CalibrationParameters instance from binary data that have been read from the camera memo...
std::vector< uint8_t > ToBinary() const
Converts CalibrationParameters to binary data that can be written to the camera memory.
IntrinsicParameters GetIntrinsicParameters() const
Retrieves the intrinsic camera parameters.
CalibrationParameters(const std::string &filePath)
Constructs a CalibrationParameters instance by loading data from a JSON file.
ExtrinsicParameters GetExtrinsicParameters() const
Retrieves the extrinsic camera parameters.
Holds the results of a camera calibration.
This class stores and provides access to the extrinsic parameters, which include the translation,...
The intrinsic parameters contain the necessary information to use the camera calibration.
void ExecuteAndMapReturnCodes(const CallableType &callableObject)