IDS peak ICV v1.1.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
58{
59public:
67 explicit Undistortion(const IntrinsicParameters& intrinsicParameters);
68
77 Undistortion(const IntrinsicParameters& intrinsicParameters, const peak::common::Metadata& metadata);
78
86 explicit Undistortion(const CalibrationParameters& calibrationParameters);
87
96 Undistortion(const CalibrationParameters& calibrationParameters, const peak::common::Metadata& metadata);
97
105 explicit Undistortion(const CalibrationResult& calibrationResult);
106
115 Undistortion(const CalibrationResult& calibrationResult, const peak::common::Metadata& metadata);
116
117 Undistortion(const Undistortion& other);
118
119 Undistortion(Undistortion&& other) noexcept;
120
121 ~Undistortion() override;
122
123 Undistortion& operator=(const Undistortion& other);
124
125 Undistortion& operator=(Undistortion&& other) noexcept;
126
155 PEAK_COMMON_NO_DISCARD UndistortedImage Process(const Image& image) const;
156
162 PEAK_COMMON_NO_DISCARD Interpolation GetInterpolation() const;
163
171 void SetInterpolation(Interpolation interpolation);
172
173private:
174 friend peak::common::detail::BackendAccessor<Undistortion>;
175
176 PEAK_COMMON_NO_DISCARD detail::handle_of_t<Undistortion> GetHandle() const override;
177
178 peak_icv_undistortion_handle m_handle{};
179 peak_icv_intrinsic_parameters m_newintrinsicParameters{};
180};
181
182inline Undistortion::Undistortion(const IntrinsicParameters& intrinsicParameters)
183{
185 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Create(&m_handle,
186 peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(intrinsicParameters),
187 sizeof(peak_icv_intrinsic_parameters), &m_newintrinsicParameters);
188 });
189}
190
191inline Undistortion::Undistortion(const IntrinsicParameters& intrinsicParameters, const peak::common::Metadata& metadata)
192{
193 auto captureInformation = peak::icv::detail::CreateCCaptureInformationFromMetadata(metadata);
194
196 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Create_With_Image_CaptureInformation(&m_handle,
197 peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(intrinsicParameters),
198 sizeof(peak_icv_intrinsic_parameters), captureInformation, sizeof(peak_icv_capture_information), &m_newintrinsicParameters);
199 });
200}
201
202inline Undistortion::Undistortion(const CalibrationParameters& calibrationParameters)
203{
205 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Create(&m_handle,
206 peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(calibrationParameters.GetIntrinsicParameters()),
207 sizeof(peak_icv_intrinsic_parameters), &m_newintrinsicParameters);
208 });
209}
210
211inline Undistortion::Undistortion(const CalibrationParameters& calibrationParameters, const peak::common::Metadata& metadata)
212{
213 auto captureInformation = peak::icv::detail::CreateCCaptureInformationFromMetadata(metadata);
214
216 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Create_With_Image_CaptureInformation(&m_handle,
217 peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(calibrationParameters.GetIntrinsicParameters()),
218 sizeof(peak_icv_intrinsic_parameters), captureInformation, sizeof(peak_icv_capture_information), &m_newintrinsicParameters);
219 });
220}
221
222inline Undistortion::Undistortion(const CalibrationResult& calibrationResult)
223{
225 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Create(&m_handle,
226 peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(
228 sizeof(peak_icv_intrinsic_parameters), &m_newintrinsicParameters);
229 });
230}
232inline Undistortion::Undistortion(const CalibrationResult& calibrationResult, const peak::common::Metadata& metadata)
233{
234 auto captureInformation = peak::icv::detail::CreateCCaptureInformationFromMetadata(metadata);
235
237 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Create_With_Image_CaptureInformation(&m_handle,
238 peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateCType(
240 sizeof(peak_icv_intrinsic_parameters), captureInformation, sizeof(peak_icv_capture_information), &m_newintrinsicParameters);
241 });
243
244inline Undistortion::Undistortion(const Undistortion& other)
245{
246 if (m_handle != other.m_handle)
247 {
249 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_IncreaseUseCount(other.m_handle);
250 });
251 m_handle = other.m_handle;
252 m_newintrinsicParameters = other.m_newintrinsicParameters;
253 }
254}
255
256inline Undistortion::Undistortion(Undistortion&& other) noexcept
257{
258 if (m_handle != other.m_handle)
259 {
260 m_handle = other.m_handle;
261 other.m_handle = nullptr;
262
263 m_newintrinsicParameters = other.m_newintrinsicParameters;
265}
266
268{
269 if (m_handle != nullptr)
270 {
271 std::ignore = PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Destroy(m_handle);
272 }
273}
274
275inline Undistortion& Undistortion::operator=(const Undistortion& other)
277 if (m_handle != other.m_handle)
278 {
279 if (m_handle != nullptr)
280 {
282 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Destroy(m_handle);
283 });
284 }
285
287 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_IncreaseUseCount(other.m_handle);
288 });
289 m_handle = other.m_handle;
290 m_newintrinsicParameters = other.m_newintrinsicParameters;
291 }
292
293 return *this;
294}
296inline Undistortion& Undistortion::operator=(Undistortion&& other) noexcept
297{
298 if (m_handle != other.m_handle)
299 {
300 if (m_handle != nullptr)
301 {
303 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Destroy(m_handle);
304 });
305 }
306
307 m_handle = other.m_handle;
308 other.m_handle = nullptr;
309
310 m_newintrinsicParameters = other.m_newintrinsicParameters;
311 }
312
313 return *this;
314}
315
317{
318 auto* const inputImageHandle = peak::common::detail::BackendAccessor<Image>::BackendHandle(image);
319
320 Image outputImage(image.GetPixelFormat(), image.GetSize());
321 auto* const outputImageHandle = peak::common::detail::BackendAccessor<Image>::BackendHandle(outputImage);
322
324 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_Process(m_handle, inputImageHandle, outputImageHandle);
325 });
326
327 return { outputImage, peak::common::detail::BackendAccessor<IntrinsicParameters>::CreateInstance(m_newintrinsicParameters) };
328}
329
331{
332 peak_icv_interpolation interpolation;
333
335 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_GetInterpolation(m_handle, &interpolation);
336 });
337
338 return static_cast<Interpolation>(interpolation);
339}
340
341inline void Undistortion::SetInterpolation(Interpolation interpolation)
342{
344 return PEAK_ICV_C_ABI_PREFIX peak_icv_Transform_Undistortion_SetInterpolation(
345 m_handle, static_cast<peak_icv_interpolation>(interpolation));
346 });
347}
348
349inline detail::handle_of_t<Undistortion> Undistortion::GetHandle() const
351 return m_handle;
352}
353
354} /* namespace icv */
355} /* namespace peak */
Type-safe container for image acquisition metadata.
Holds a complete set of camera calibration parameters, including both intrinsic and extrinsic data.
IntrinsicParameters GetIntrinsicParameters() const
Retrieves the intrinsic camera parameters.
Holds the results of a camera calibration.
CalibrationParameters GetCalibrationParameters() const
Extracts the calibration parameters from a calibration result.
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 in pixels.
peak::common::PixelFormat GetPixelFormat() const
Provides the pixel format of the image.
The intrinsic parameters contain the necessary information to use the camera calibration.
Represents an image that has undergone undistortion.
Represents an undistortion transformation for images.
void SetInterpolation(Interpolation interpolation)
Sets the Interpolation method used for undistortion.
Undistortion & operator=(const Undistortion &other)
UndistortedImage Process(const Image &image) const
Applies undistortion to the specified image.
Undistortion(const IntrinsicParameters &intrinsicParameters)
Constructs an undistortion using intrinsic parameters.
Interpolation GetInterpolation() const
Interpolation
Enumeration of interpolation methods used in 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