IDS peak ICV v1.0.0
Loading...
Searching...
No Matches
peak_icv_calibration_parameters.hpp
Go to the documentation of this file.
1
11#pragma once
12
19#include <peak_icv_c/binary/peak_icv_binary_validator.h>
20#include <peak_icv_c/binary/peak_icv_calibration_parameters_binary.h>
21
22namespace peak
23{
24namespace icv
25{
26namespace experimental
27{
28
42{
43public:
69 explicit CalibrationParameters(const std::string& filePath);
70
80 CalibrationParameters(const IntrinsicParameters& intrinsicParameters, const ExtrinsicParameters& extrinsicParameters);
81
92 explicit CalibrationParameters(const peak_icv_calibration_parameters_binary& calibrationParametersBinary);
93
101 PEAK_ICV_NO_DISCARD IntrinsicParameters GetIntrinsicParameters() const;
102
110 PEAK_ICV_NO_DISCARD ExtrinsicParameters GetExtrinsicParameters() const;
111
119 PEAK_ICV_NO_DISCARD peak_icv_calibration_parameters_binary ToBinary() const;
120
121
122private:
123 friend peak::common::detail::BackendAccessor<CalibrationParameters>;
124 friend class CalibrationResult;
125
126 explicit CalibrationParameters(const peak_icv_calibration_parameters& calibrationParameters);
127 explicit operator peak_icv_calibration_parameters() const;
128 static peak_icv_calibration_parameters LoadFromFile(const std::string& filePath);
129
130 IntrinsicParameters m_intrinsic;
131 ExtrinsicParameters m_extrinsic;
132};
133
134inline CalibrationParameters::CalibrationParameters(const std::string& filePath)
135 : CalibrationParameters(LoadFromFile(filePath))
136{}
137
138inline CalibrationParameters::CalibrationParameters(const peak_icv_calibration_parameters& calibrationParameters)
139 : m_intrinsic{ peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateInstance(
140 calibrationParameters.intrinsic_parameters) }
141 , m_extrinsic{ peak::common::detail::BackendAccessor<ExtrinsicParameters>::CreateInstance(
142 calibrationParameters.extrinsic_parameters) }
143{}
144
146 const IntrinsicParameters& intrinsicParameters, const ExtrinsicParameters& extrinsicParameters)
147 : m_intrinsic{ intrinsicParameters }
148 , m_extrinsic{ extrinsicParameters }
149{}
150
151inline CalibrationParameters::CalibrationParameters(const peak_icv_calibration_parameters_binary& calibrationParametersBinary)
152 : CalibrationParameters{ calibrationParametersBinary.calibration_parameters }
153{
154 bool isValid{};
156 return PEAK_ICV_C_ABI_PREFIX peak_icv_ValidateBinary(
157 reinterpret_cast<const void*>(&calibrationParametersBinary), sizeof(calibrationParametersBinary), &isValid);
158 });
159
160 if (!isValid)
161 {
162 throw CorruptedException("The given binary data is invalid");
163 }
164}
165
166inline CalibrationParameters::operator peak_icv_calibration_parameters() const
167{
168
169 return { peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(m_intrinsic),
170 peak::common::detail::BackendAccessor<ExtrinsicParameters>::CreateCType(m_extrinsic) };
171}
172
174{
175 return m_intrinsic;
176}
177
179{
180 return m_extrinsic;
181}
182
183inline peak_icv_calibration_parameters CalibrationParameters::LoadFromFile(const std::string& filePath)
184{
185 peak_icv_calibration_parameters parameters{};
186
187 detail::ExecuteAndMapReturnCodes([&parameters, &filePath] {
188 return PEAK_ICV_C_ABI_PREFIX peak_icv_CalibrationParameters_CreateFromFile(&parameters, sizeof(parameters), filePath.c_str());
189 });
190
191 return parameters;
192}
193
194inline peak_icv_calibration_parameters_binary CalibrationParameters::ToBinary() const
195{
196
197 peak_icv_calibration_parameters parameters{ peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(m_intrinsic),
198 peak::common::detail::BackendAccessor<ExtrinsicParameters>::CreateCType(m_extrinsic) };
199
200 peak_icv_calibration_parameters_binary binary{};
201
203 return PEAK_ICV_C_ABI_PREFIX peak_icv_CalibrationParameters_ToBinary(parameters, sizeof(parameters), &binary, sizeof(binary));
204 });
205
206 return binary;
207}
208
209} /* namespace experimental */
210} /* namespace icv */
211} /* namespace peak */
Thrown when input data or a file is malformed, unreadable, or otherwise corrupted.
Holds a complete set of camera calibration parameters, including both intrinsic and extrinsic data.
peak_icv_calibration_parameters_binary ToBinary() const
Converts CalibrationParameters to binary calibration parameters that can be written to the camera mem...
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.
Class for holding 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)