IDS peak ICV v1.2.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 void SetExtrinsicParameters(const ExtrinsicParameters& extrinsicParameters);
128
136 PEAK_COMMON_NO_DISCARD std::vector<uint8_t> ToBinary() const;
137
138
139private:
140 friend peak::common::detail::BackendAccessor<CalibrationParameters>;
141 friend class CalibrationResult;
142
143 explicit CalibrationParameters(const peak_icv_calibration_parameters& calibrationParameters);
144 explicit operator peak_icv_calibration_parameters() const;
145 static peak_icv_calibration_parameters LoadFromFile(const std::string& filePath);
146
147 IntrinsicParameters m_intrinsicParameters;
148 ExtrinsicParameters m_extrinsicParameters;
149
150 template <class Container, typename = std::enable_if_t<detail::is_contiguous_container<Container, uint8_t>::value>>
151 static peak_icv_calibration_parameters CreateFromBinary(const Container& binaryData)
152 {
153 bool isValid{};
155 return PEAK_ICV_C_ABI_PREFIX peak_icv_ValidateBinary(binaryData.data(), binaryData.size(), &isValid);
156 });
157
158 if (!isValid)
159 {
160 throw CorruptedException("The given binary data is invalid");
161 }
162
163 peak_icv_calibration_parameters calibration_parameters{};
165 return PEAK_ICV_C_ABI_PREFIX peak_icv_CalibrationParameters_CreateFromBinary(
166 binaryData.data(), binaryData.size(), &calibration_parameters, sizeof(peak_icv_calibration_parameters));
167 });
168
169 return calibration_parameters;
170 }
171};
172
173inline CalibrationParameters::CalibrationParameters(const std::string& filePath)
174 : CalibrationParameters(LoadFromFile(filePath))
175{}
176
177inline CalibrationParameters::CalibrationParameters(const peak_icv_calibration_parameters& calibrationParameters)
178 : m_intrinsicParameters{ peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateInstance(
179 calibrationParameters.intrinsic_parameters) }
180 , m_extrinsicParameters{ peak::common::detail::BackendAccessor<ExtrinsicParameters>::CreateInstance(
181 calibrationParameters.extrinsic_parameters) }
182{}
183
185 const IntrinsicParameters& intrinsicParameters, const ExtrinsicParameters& extrinsicParameters)
186 : m_intrinsicParameters{ intrinsicParameters }
187 , m_extrinsicParameters{ extrinsicParameters }
188{}
189
190inline CalibrationParameters::operator peak_icv_calibration_parameters() const
191{
192 return { peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(m_intrinsicParameters),
193 peak::common::detail::BackendAccessor<ExtrinsicParameters>::CreateCType(m_extrinsicParameters) };
194}
195
197{
198 return m_intrinsicParameters;
199}
200
202{
203 return m_extrinsicParameters;
204}
205
207{
208 m_extrinsicParameters = extrinsicParameters;
209}
210
211inline peak_icv_calibration_parameters CalibrationParameters::LoadFromFile(const std::string& filePath)
212{
213 peak_icv_calibration_parameters parameters{};
214
215 detail::ExecuteAndMapReturnCodes([&parameters, &filePath] {
216 return PEAK_ICV_C_ABI_PREFIX peak_icv_CalibrationParameters_CreateFromFile(&parameters, sizeof(parameters), filePath.c_str());
217 });
218
219 return parameters;
220}
221
222inline std::vector<uint8_t> CalibrationParameters::ToBinary() const
223{
224 peak_icv_calibration_parameters parameters{ peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(
225 m_intrinsicParameters),
226 peak::common::detail::BackendAccessor<ExtrinsicParameters>::CreateCType(m_extrinsicParameters) };
227
228
229 size_t binarySize{};
231 return PEAK_ICV_C_ABI_PREFIX peak_icv_CalibrationParameters_ToBinaryGetSizeInBytes(sizeof(parameters), &binarySize);
232 });
233
234 std::vector<uint8_t> binary(binarySize);
236 return PEAK_ICV_C_ABI_PREFIX peak_icv_CalibrationParameters_ToBinary(parameters, sizeof(parameters), binary.data(), binarySize);
237 });
238
239 return binary;
240}
241
242} /* namespace icv */
243} /* 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.
void SetExtrinsicParameters(const ExtrinsicParameters &extrinsicParameters)
Sets the extrinsic 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)