CVB++ 15.0
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 namespace Metric
29 {
30
32
40 class CalibrationConfiguration final
41 {
42 struct PrivateTag
43 {
44 };
45
46 public:
48
80 {
82 None = CExports::CVMETM_None,
84
87 AffineMatrix = CExports::CVMETM_AffineTransformation,
89
93 SpecificTransformationParameters = CExports::CVMETM_SpecificTransformationParameters
94 };
95
96 CalibrationConfiguration(HandleGuard<CalibrationConfiguration> &&guard, PrivateTag) noexcept
97 : handle_(std::move(guard))
98 {
99 }
100
101 private:
102 HandleGuard<CalibrationConfiguration> handle_;
103
104 public:
106
116 {
117 auto calConfig = Internal::DoResCallObjectOut<CalibrationConfiguration>([&](void *&handle) {
118 return CVB_CALL_CAPI(CVMAQS12CreateInstrinsicCalConfig(
119 reinterpret_cast<const CExports::CVC3DPointD *>(aqs12.Points().data()), aqs12.TopBasePlaneDistance(),
120 handle));
121 });
122
123 // recommended default model
124 calConfig->SetExtrinsicCalibrationModel(ExtrinsicCalibrationModel::SpecificTransformationParameters);
125 calConfig->SetEstimateEncoderStep(true);
126 return calConfig;
127 }
128
130
140 {
141 auto calConfig = Internal::DoResCallObjectOut<CalibrationConfiguration>([&](void *&handle) {
142 return CVB_CALL_CAPI(
143 CVMAQS12CreateExtrinsicCalConfig(reinterpret_cast<const CExports::CVC3DPointD *>(aqs12.Points().data()),
144 aqs12.TopBasePlaneDistance(), handle));
145 });
146
147 // recommended default model
148 calConfig->SetExtrinsicCalibrationModel(ExtrinsicCalibrationModel::SpecificTransformationParameters);
149 calConfig->SetEstimateEncoderStep(true);
150 return calConfig;
151 }
152
154
157 AQS12Piece Aqs12Piece() const noexcept
158 {
159 CExports::CVC3DPointD points[12] = {0}; // NOLINT(cppcoreguidelines-avoid-c-arrays)
160 double topBasePlaneDistance = 0.0;
161 CVB_CALL_CAPI(
162 CVMAQS12CalConfigGetPointsAndTopBasePlaneDistance(handle_.Handle(), points, topBasePlaneDistance));
163
164 std::array<Point3D<double>, 12> pointsAqs12;
165 auto from = reinterpret_cast<const CExports::CVC3DVector *>(points);
166 std::copy(from, from + 12, std::begin(pointsAqs12));
167
168 return AQS12Piece(pointsAqs12, topBasePlaneDistance);
169 }
170
172
178 void SetHomographyCalculated(bool flag) noexcept
179 {
180 CVB_CALL_CAPI(
181 CVMAQS12CalConfigSetCalculateHomography(handle_.Handle(), static_cast<CExports::cvbbool_t>(flag)));
182 }
183
185
188 bool IsHomographyCalculated() const noexcept
189 {
190 return Internal::DoResCallValueOut<CExports::cvbbool_t>([&](CExports::cvbbool_t &flag) {
191 return CVB_CALL_CAPI(CVMAQS12CalConfigGetCalculateHomography(handle_.Handle(), flag));
192 })
193 ? true
194 : false;
195 }
196
198
220
222
226 {
228 return false;
229 else
230 return true;
231 }
232
234
238 {
239 Internal::DoResCall([&]() {
240 return CVB_CALL_CAPI(CVMAQS12CalConfigSetExtrinsicTransformationModel(
241 handle_.Handle(), static_cast<CExports::CVMExtrinsicTransformationModel>(model)));
242 });
243 }
244
246
250 {
251 CExports::CVMExtrinsicTransformationModel model = CExports::CVMETM_None;
252 Internal::DoResCall([&]() {
253 return CVB_CALL_CAPI(CVMAQS12CalConfigGetExtrinsicTransformationModel(handle_.Handle(), model));
254 });
255
256 return static_cast<ExtrinsicCalibrationModel>(model);
257 }
258
260
272 {
273 Internal::DoResCall([&]() {
274 return CVB_CALL_CAPI(
275 CVMAQS12CalConfigSetCalculateEncoderStep(handle_.Handle(), static_cast<CExports::cvbbool_t>(flag)));
276 });
277 }
278
280
283 bool IsEncoderStepEstimated() const noexcept
284 {
285 CExports::cvbbool_t flag = static_cast<CExports::cvbbool_t>(true);
286 Internal::DoResCall(
287 [&]() { return CVB_CALL_CAPI(CVMAQS12CalConfigGetCalculateEncoderStep(handle_.Handle(), flag)); });
288
289 return static_cast<bool>(flag);
290 }
291
293
301 static std::unique_ptr<CalibrationConfiguration> FromHandle(HandleGuard<CalibrationConfiguration> &&guard)
302 {
303 if (!guard.Handle())
304 throw std::runtime_error("handle must not be null");
305
306 return std::make_unique<CalibrationConfiguration>(std::move(guard), PrivateTag{});
307 }
308
310
313 void *Handle() const noexcept
314 {
315 return handle_.Handle();
316 }
317
319 CalibrationConfiguration &operator=(const CalibrationConfiguration &other) = delete;
320 CalibrationConfiguration(CalibrationConfiguration &&other) noexcept = default;
321 CalibrationConfiguration &operator=(CalibrationConfiguration &&other) noexcept = default;
322 ~CalibrationConfiguration() = default;
323 };
324
325 } // namespace Metric
326 using namespace Metric;
327 } // namespace Foundation
328
329 CVB_END_INLINE_NS
330} // namespace Cvb
T begin(T... args)
Object to collect all input parameters for the AQS12 calibration piece.
Definition decl_metric_aqs12_calibration_piece.hpp:22
double TopBasePlaneDistance() const noexcept
Gets the distance between the top and base plane.
Definition decl_metric_aqs12_calibration_piece.hpp:50
const std::array< Point3D< double >, 12 > & Points() const noexcept
Gets array with AQS12 points.
Definition decl_metric_aqs12_calibration_piece.hpp:40
Calibration configuration object.
Definition decl_metric_calibration_configuration.hpp:41
ExtrinsicCalibrationModel
Enum for extrinsic calibration model.
Definition decl_metric_calibration_configuration.hpp:80
@ SpecificTransformationParameters
Transformation parameters like rotation, scale and shear are estimated (recommended).
Definition decl_metric_calibration_configuration.hpp:93
@ AffineMatrix
Elements of affine matrix m11,..., m33 are estimated.
Definition decl_metric_calibration_configuration.hpp:87
@ None
Extrinsic transformation will not be estimated.
Definition decl_metric_calibration_configuration.hpp:82
bool IsCorrectionOfLaserPlaneInclinationCalculated() const noexcept
Gets the flag for the calculation of the correction for the laser plane inclination.
Definition decl_metric_calibration_configuration.hpp:225
AQS12Piece Aqs12Piece() const noexcept
Gets the AQS12 piece.
Definition decl_metric_calibration_configuration.hpp:157
bool IsEncoderStepEstimated() const noexcept
Gets the flag for the estimation of the encoder step (scale in Y).
Definition decl_metric_calibration_configuration.hpp:283
bool IsHomographyCalculated() const noexcept
Gets the calculate homography flag.
Definition decl_metric_calibration_configuration.hpp:188
static std::unique_ptr< CalibrationConfiguration > Create(const AQS12Piece &aqs12)
Creates a calibration configuration object.
Definition decl_metric_calibration_configuration.hpp:115
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:208
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:301
ExtrinsicCalibrationModel GetExtrinsicCalibrationModel() const noexcept
Gets the extrinsic calibration model.
Definition decl_metric_calibration_configuration.hpp:249
void SetEstimateEncoderStep(bool flag)
Sets the flag for the estimation of the encoder step (scale in Y).
Definition decl_metric_calibration_configuration.hpp:271
void SetExtrinsicCalibrationModel(ExtrinsicCalibrationModel model) noexcept
Sets the extrinsic calibration model.
Definition decl_metric_calibration_configuration.hpp:237
void SetHomographyCalculated(bool flag) noexcept
Sets the calculate homography flag.
Definition decl_metric_calibration_configuration.hpp:178
static std::unique_ptr< CalibrationConfiguration > CreateExtrinsic(const AQS12Piece &aqs12)
Creates an extrinsic calibration configuration object.
Definition decl_metric_calibration_configuration.hpp:139
void * Handle() const noexcept
Returns C-API style handle to Node Object.
Definition decl_metric_calibration_configuration.hpp:313
T copy(T... args)
cvbbool_t ReleaseObject(OBJ &Object)
T move(T... args)
Namespace for metric calibration.
Definition decl_metric_aqs12_calibration_piece.hpp:13
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