CVB++ 15.0
Loading...
Searching...
No Matches
decl_metric_calibration_configuration.hpp
1#pragma once
2
3#include "../../_cexports/c_metric.h"
4
5#include "decl_metric_aqs12_calibration_piece.hpp"
6
7namespace Cvb
8{
9 CVB_BEGIN_INLINE_NS
10
11 namespace Foundation
12 {
13 namespace Metric
14 {
16 }
17 } // namespace Foundation
18
19 template <>
20 inline HandleGuard<Foundation::Metric::CalibrationConfiguration>::HandleGuard(void *handle) noexcept
21 : HandleGuard<Foundation::Metric::CalibrationConfiguration>(
22 handle, [](void *handle) { CVB_CALL_CAPI(ReleaseObject(handle)); })
23 {
24 }
25
26 namespace Foundation
27 {
28
30
34 namespace Metric
35 {
36
38
46 class CalibrationConfiguration final
47 {
48 struct PrivateTag
49 {
50 };
51
52 public:
54
86 {
88 None = CExports::CVMETM_None,
90
93 AffineMatrix = CExports::CVMETM_AffineTransformation,
95
99 SpecificTransformationParameters = CExports::CVMETM_SpecificTransformationParameters
100 };
101
102 CalibrationConfiguration(HandleGuard<CalibrationConfiguration> &&guard, PrivateTag) noexcept
103 : handle_(std::move(guard))
104 {
105 }
106
107 private:
108 HandleGuard<CalibrationConfiguration> handle_;
109
110 public:
112
122 {
123 auto calConfig = Internal::DoResCallObjectOut<CalibrationConfiguration>([&](void *&handle) {
124 return CVB_CALL_CAPI(CVMAQS12CreateInstrinsicCalConfig(
125 reinterpret_cast<const CExports::CVC3DPointD *>(aqs12.Points().data()), aqs12.TopBasePlaneDistance(),
126 handle));
127 });
128
129 // recommended default model
130 calConfig->SetExtrinsicCalibrationModel(ExtrinsicCalibrationModel::SpecificTransformationParameters);
131 calConfig->SetEstimateEncoderStep(true);
132 return calConfig;
133 }
134
136
146 {
147 auto calConfig = Internal::DoResCallObjectOut<CalibrationConfiguration>([&](void *&handle) {
148 return CVB_CALL_CAPI(
149 CVMAQS12CreateExtrinsicCalConfig(reinterpret_cast<const CExports::CVC3DPointD *>(aqs12.Points().data()),
150 aqs12.TopBasePlaneDistance(), handle));
151 });
152
153 // recommended default model
154 calConfig->SetExtrinsicCalibrationModel(ExtrinsicCalibrationModel::SpecificTransformationParameters);
155 calConfig->SetEstimateEncoderStep(true);
156 return calConfig;
157 }
158
160
163 AQS12Piece Aqs12Piece() const noexcept
164 {
165 CExports::CVC3DPointD points[12] = {0}; // NOLINT(cppcoreguidelines-avoid-c-arrays)
166 double topBasePlaneDistance = 0.0;
167 CVB_CALL_CAPI(
168 CVMAQS12CalConfigGetPointsAndTopBasePlaneDistance(handle_.Handle(), points, topBasePlaneDistance));
169
170 std::array<Point3D<double>, 12> pointsAqs12;
171 auto from = reinterpret_cast<const CExports::CVC3DVector *>(points);
172 std::copy(from, from + 12, std::begin(pointsAqs12));
173
174 return AQS12Piece(pointsAqs12, topBasePlaneDistance);
175 }
176
178
184 void SetHomographyCalculated(bool flag) noexcept
185 {
186 CVB_CALL_CAPI(
187 CVMAQS12CalConfigSetCalculateHomography(handle_.Handle(), static_cast<CExports::cvbbool_t>(flag)));
188 }
189
191
194 bool IsHomographyCalculated() const noexcept
195 {
196 return Internal::DoResCallValueOut<CExports::cvbbool_t>([&](CExports::cvbbool_t &flag) {
197 return CVB_CALL_CAPI(CVMAQS12CalConfigGetCalculateHomography(handle_.Handle(), flag));
198 })
199 ? true
200 : false;
201 }
202
204
226
228
232 {
234 return false;
235 else
236 return true;
237 }
238
240
244 {
245 Internal::DoResCall([&]() {
246 return CVB_CALL_CAPI(CVMAQS12CalConfigSetExtrinsicTransformationModel(
247 handle_.Handle(), static_cast<CExports::CVMExtrinsicTransformationModel>(model)));
248 });
249 }
250
252
256 {
257 CExports::CVMExtrinsicTransformationModel model = CExports::CVMETM_None;
258 Internal::DoResCall([&]() {
259 return CVB_CALL_CAPI(CVMAQS12CalConfigGetExtrinsicTransformationModel(handle_.Handle(), model));
260 });
261
262 return static_cast<ExtrinsicCalibrationModel>(model);
263 }
264
266
278 {
279 Internal::DoResCall([&]() {
280 return CVB_CALL_CAPI(
281 CVMAQS12CalConfigSetCalculateEncoderStep(handle_.Handle(), static_cast<CExports::cvbbool_t>(flag)));
282 });
283 }
284
286
289 bool IsEncoderStepEstimated() const noexcept
290 {
291 CExports::cvbbool_t flag = static_cast<CExports::cvbbool_t>(true);
292 Internal::DoResCall(
293 [&]() { return CVB_CALL_CAPI(CVMAQS12CalConfigGetCalculateEncoderStep(handle_.Handle(), flag)); });
294
295 return static_cast<bool>(flag);
296 }
297
299
307 static std::unique_ptr<CalibrationConfiguration> FromHandle(HandleGuard<CalibrationConfiguration> &&guard)
308 {
309 if (!guard.Handle())
310 throw std::runtime_error("handle must not be null");
311
312 return std::make_unique<CalibrationConfiguration>(std::move(guard), PrivateTag{});
313 }
314
316
319 void *Handle() const noexcept
320 {
321 return handle_.Handle();
322 }
323
325 CalibrationConfiguration &operator=(const CalibrationConfiguration &other) = delete;
326 CalibrationConfiguration(CalibrationConfiguration &&other) noexcept = default;
327 CalibrationConfiguration &operator=(CalibrationConfiguration &&other) noexcept = default;
328 ~CalibrationConfiguration() = default;
329 };
330
331 } // namespace Metric
332 using namespace Metric;
333 } // namespace Foundation
334
335 CVB_END_INLINE_NS
336} // namespace Cvb
T begin(T... args)
Object to collect all input parameters for the AQS12 calibration piece.
Definition decl_metric_aqs12_calibration_piece.hpp:28
double TopBasePlaneDistance() const noexcept
Gets the distance between the top and base plane.
Definition decl_metric_aqs12_calibration_piece.hpp:56
const std::array< Point3D< double >, 12 > & Points() const noexcept
Gets array with AQS12 points.
Definition decl_metric_aqs12_calibration_piece.hpp:46
Calibration configuration object.
Definition decl_metric_calibration_configuration.hpp:47
ExtrinsicCalibrationModel
Enum for extrinsic calibration model.
Definition decl_metric_calibration_configuration.hpp:86
@ SpecificTransformationParameters
Transformation parameters like rotation, scale and shear are estimated (recommended).
Definition decl_metric_calibration_configuration.hpp:99
@ AffineMatrix
Elements of affine matrix m11,..., m33 are estimated.
Definition decl_metric_calibration_configuration.hpp:93
@ None
Extrinsic transformation will not be estimated.
Definition decl_metric_calibration_configuration.hpp:88
bool IsCorrectionOfLaserPlaneInclinationCalculated() const noexcept
Gets the flag for the calculation of the correction for the laser plane inclination.
Definition decl_metric_calibration_configuration.hpp:231
AQS12Piece Aqs12Piece() const noexcept
Gets the AQS12 piece.
Definition decl_metric_calibration_configuration.hpp:163
bool IsEncoderStepEstimated() const noexcept
Gets the flag for the estimation of the encoder step (scale in Y).
Definition decl_metric_calibration_configuration.hpp:289
bool IsHomographyCalculated() const noexcept
Gets the calculate homography flag.
Definition decl_metric_calibration_configuration.hpp:194
static std::unique_ptr< CalibrationConfiguration > Create(const AQS12Piece &aqs12)
Creates a calibration configuration object.
Definition decl_metric_calibration_configuration.hpp:121
void SetCorrectionOfLaserPlaneInclinationCalculated(bool flag) noexcept
Sets the flag for the calculation of the correction for the laser plane inclination.
Definition decl_metric_calibration_configuration.hpp:214
static std::unique_ptr< CalibrationConfiguration > FromHandle(HandleGuard< CalibrationConfiguration > &&guard)
Creates a calibration configuration object from a classic API handle.
Definition decl_metric_calibration_configuration.hpp:307
ExtrinsicCalibrationModel GetExtrinsicCalibrationModel() const noexcept
Gets the extrinsic calibration model.
Definition decl_metric_calibration_configuration.hpp:255
void SetEstimateEncoderStep(bool flag)
Sets the flag for the estimation of the encoder step (scale in Y).
Definition decl_metric_calibration_configuration.hpp:277
void SetExtrinsicCalibrationModel(ExtrinsicCalibrationModel model) noexcept
Sets the extrinsic calibration model.
Definition decl_metric_calibration_configuration.hpp:243
void SetHomographyCalculated(bool flag) noexcept
Sets the calculate homography flag.
Definition decl_metric_calibration_configuration.hpp:184
static std::unique_ptr< CalibrationConfiguration > CreateExtrinsic(const AQS12Piece &aqs12)
Creates an extrinsic calibration configuration object.
Definition decl_metric_calibration_configuration.hpp:145
void * Handle() const noexcept
Returns C-API style handle to Node Object.
Definition decl_metric_calibration_configuration.hpp:319
T copy(T... args)
cvbbool_t ReleaseObject(OBJ &Object)
T move(T... args)
Namespace for metric calibration.
Definition decl_metric_aqs12_calibration_piece.hpp:19
Namespace for the Foundation package.
Definition decl_metric_aqs12_calibration_piece.hpp:11
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17