IDS peak ICV v1.0.0
Loading...
Searching...
No Matches
peak_icv_undistortion.hpp
Go to the documentation of this file.
1
11#pragma once
12
17#include <peak_icv_c/algorithms/transformations/peak_icv_undistortion.h>
18#include <utility>
19
20namespace peak
21{
22namespace icv
23{
24
25namespace experimental
26{
44{
45public:
65 explicit Undistortion(const IntrinsicParameters& intrinsicParameters);
66
84 Undistortion(const IntrinsicParameters& intrinsicParameters, const peak::common::Metadata& metadata);
85
105 explicit Undistortion(const CalibrationParameters& calibrationParameters);
106
124 Undistortion(const CalibrationParameters& calibrationParameters, const peak::common::Metadata& metadata);
125
145 explicit Undistortion(const CalibrationResult& calibrationResult);
146
164 Undistortion(const CalibrationResult& calibrationResult, const peak::common::Metadata& metadata);
165
171 Undistortion(const Undistortion& other);
172
178 Undistortion(Undistortion&& other) noexcept;
179
185 ~Undistortion() override;
186
192 Undistortion& operator=(const Undistortion& other);
193
199 Undistortion& operator=(Undistortion&& other) noexcept;
200
201
233 PEAK_ICV_NO_DISCARD UndistortedImage Process(const Image& image) const;
234
244 PEAK_ICV_NO_DISCARD Interpolation GetInterpolation() const;
245
251 void SetInterpolation(Interpolation interpolation);
252
253private:
254 friend peak::common::detail::BackendAccessor<Undistortion>;
255
256 PEAK_ICV_NO_DISCARD detail::handle_of_t<Undistortion> GetHandle() const override;
257
258 peak_icv_undistortion_handle m_handle{};
259 peak_icv_intrinsic_parameters m_newintrinsicParameters{};
260};
261
262inline Undistortion::Undistortion(const IntrinsicParameters& intrinsicParameters)
263{
265 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Create(&m_handle,
266 peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(intrinsicParameters), &m_newintrinsicParameters);
267 });
268}
269
270inline Undistortion::Undistortion(const IntrinsicParameters& intrinsicParameters, const peak::common::Metadata& metadata)
271{
272
273 auto captureInformation = peak::icv::detail::CreateCCaptureInformationFromMetadata(metadata);
274
276 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Create_With_Image_CaptureInformation(&m_handle,
277 peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(intrinsicParameters), captureInformation,
278 sizeof(peak_icv_capture_information), &m_newintrinsicParameters);
279 });
280}
281
282inline Undistortion::Undistortion(const CalibrationParameters& calibrationParameters)
283{
285 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Create(&m_handle,
286 peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(calibrationParameters.GetIntrinsicParameters()),
287 &m_newintrinsicParameters);
288 });
289}
290
291inline Undistortion::Undistortion(const CalibrationParameters& calibrationParameters, const peak::common::Metadata& metadata)
292{
293
294 auto captureInformation = peak::icv::detail::CreateCCaptureInformationFromMetadata(metadata);
295
297 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Create_With_Image_CaptureInformation(&m_handle,
298 peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(calibrationParameters.GetIntrinsicParameters()),
299 captureInformation, sizeof(peak_icv_capture_information), &m_newintrinsicParameters);
300 });
301}
302
303inline Undistortion::Undistortion(const CalibrationResult& calibrationResult)
304{
306 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Create(&m_handle,
307 peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(
309 &m_newintrinsicParameters);
310 });
311}
312
313inline Undistortion::Undistortion(const CalibrationResult& calibrationResult, const peak::common::Metadata& metadata)
314{
315
316 auto captureInformation = peak::icv::detail::CreateCCaptureInformationFromMetadata(metadata);
317
319 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Create_With_Image_CaptureInformation(&m_handle,
320 peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(
322 captureInformation, sizeof(peak_icv_capture_information), &m_newintrinsicParameters);
323 });
324}
325
327{
328 if (m_handle != other.m_handle)
329 {
331 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_IncreaseUseCount(other.m_handle);
332 });
333 m_handle = other.m_handle;
334 m_newintrinsicParameters = other.m_newintrinsicParameters;
335 }
336}
337
339{
340 if (m_handle != other.m_handle)
341 {
342 m_handle = other.m_handle;
343 other.m_handle = nullptr;
344
345 m_newintrinsicParameters = other.m_newintrinsicParameters;
346 }
347}
348
350{
351 if (m_handle != nullptr)
352 {
353 PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Destroy(m_handle);
354 }
355}
356
358{
359 if (m_handle != other.m_handle)
360 {
361 if (m_handle != nullptr)
362 {
364 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Destroy(m_handle);
365 });
366 }
367
369 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_IncreaseUseCount(other.m_handle);
370 });
371 m_handle = other.m_handle;
372 m_newintrinsicParameters = other.m_newintrinsicParameters;
373 }
374
375 return *this;
376}
377
379{
380 if (m_handle != other.m_handle)
381 {
382 if (m_handle != nullptr)
383 {
385 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Destroy(m_handle);
386 });
387 }
388
389 m_handle = other.m_handle;
390 other.m_handle = nullptr;
391
392 m_newintrinsicParameters = other.m_newintrinsicParameters;
393 }
394
395 return *this;
396}
397
399{
400 auto* const inputImageHandle = peak::common::detail::BackendAccessor<Image>::BackendHandle(image);
401
402 Image outputImage(image.GetPixelFormat(), image.GetSize());
403 auto* const outputImageHandle = peak::common::detail::BackendAccessor<Image>::BackendHandle(outputImage);
404
406 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Process(m_handle, inputImageHandle, outputImageHandle);
407 });
408
409 return { outputImage, peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateInstance(m_newintrinsicParameters) };
410}
411
413{
414 peak_icv_interpolation interpolation;
415
417 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_GetInterpolation(m_handle, &interpolation);
418 });
419
420 return static_cast<Interpolation>(interpolation);
421}
422
424{
426 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_SetInterpolation(
427 m_handle, static_cast<peak_icv_interpolation>(interpolation));
428 });
429}
430
431inline detail::handle_of_t<Undistortion> Undistortion::GetHandle() const
432{
433 return m_handle;
434}
435
436} /* namespace experimental */
437
438} /* namespace icv */
439} /* namespace peak */
Type-safe container for image acquisition metadata.
For detailed information about the use of ids_peak_icv Image refer to the Image Guide.
peak::common::Size GetSize() const
Provides the size of the image.
peak::common::PixelFormat GetPixelFormat() const
Provides the pixel format of the image.
Holds a complete set of camera calibration parameters, including both intrinsic and extrinsic data.
IntrinsicParameters GetIntrinsicParameters() const
Retrieves the intrinsic camera parameters.
Class for holding the results of a camera calibration.
CalibrationParameters GetCalibrationParameters() const
Extract the calibration parameters from a calibration result. The calibration parameters contain only...
The intrinsic parameters contain the necessary information to use the camera calibration.
void SetInterpolation(Interpolation interpolation)
Sets the interpolation method for the undistortion transformation.
Undistortion & operator=(const Undistortion &other)
UndistortedImage Process(const Image &image) const
Applies the undistortion on the given image and returns the undistorted image.
Undistortion(const IntrinsicParameters &intrinsicParameters)
Creates an instance of class undistortion based on the given intrinsicParameters.
Interpolation GetInterpolation() const
Provides the current interpolation algorithm used by the undistortion.
Interpolation
Interpolation method for image transformations.
peak_icv_capture_information CreateCCaptureInformationFromMetadata(const peak::common::Metadata &metadata)
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
peak::common::detail::c_type_of_t< Type > * handle_of_t