IDS peak IPL  v1.6.0
peak_ipl_hotpixel_correction.hpp
Go to the documentation of this file.
1 
11 #pragma once
12 
14 
15 #include <cstdint>
16 #include <vector>
17 
18 namespace peak
19 {
20 namespace ipl
21 {
22 
23 class Image;
24 
25 
26 
36 class HotpixelCorrection final
37 {
38 public:
45  enum class SensitivityLevel
46  {
47  Invalid,
50  SensitivityLevel3, // default
53  };
54 
57  HotpixelCorrection(const HotpixelCorrection& other) = delete;
58  HotpixelCorrection& operator=(const HotpixelCorrection& other) = delete;
59  HotpixelCorrection(HotpixelCorrection&& other) noexcept;
61 
72 
83 
93  void SetGainFactorPercent(uint32_t gainFactorPercent = 100);
94 
104  uint32_t GainFactorPercent() const;
105 
106 
122  std::vector<Point2D> Detect(const Image& inputImage) const;
123 
143  Image Correct(const Image& inputImage, const std::vector<Point2D>& hotpixels) const;
144 
163  Image CorrectAdaptive(const Image& inputImage);
164 
165 private:
167 };
168 
169 } /* namespace ipl */
170 } /* namespace peak */
171 
173 
174 namespace peak
175 {
176 namespace ipl
177 {
178 
180 {
182  [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_AdaptiveHotpixelCorrector_Construct(&m_backendHandle); });
183 
184  // make sure default params are set
185  SetSensitivity();
187 }
188 
190 {
192 }
193 
195 {
196  *this = std::move(other);
197 }
198 
200 {
201  if (this != &other)
202  {
204  m_backendHandle = other.m_backendHandle;
205  other.m_backendHandle = nullptr;
206  }
207 
208  return *this;
209 }
210 
212 {
215  m_backendHandle, static_cast<PEAK_IPL_HOTPIXELCORRECTION_SENSITIVITY>(sensitivityLevel));
216  });
217 }
218 
220 {
224  m_backendHandle, &sensitivityLevel);
225  });
226 
227  return static_cast<SensitivityLevel>(sensitivityLevel);
228 }
229 
230 inline void HotpixelCorrection::SetGainFactorPercent(uint32_t gainFactorPercent)
231 {
234  m_backendHandle, gainFactorPercent);
235  });
236 }
237 
239 {
240  uint32_t gainFactorPercent;
243  m_backendHandle, &gainFactorPercent);
244  });
245 
246  return gainFactorPercent;
247 }
248 
249 inline std::vector<Point2D> HotpixelCorrection::Detect(const Image& inputImage) const
250 {
253  m_backendHandle, ImageBackendAccessor::BackendHandle(inputImage));
254  });
255 
256  size_t size = 0;
258  return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_AdaptiveHotpixelCorrector_GetHotpixels(m_backendHandle, nullptr, &size);
259  });
260  std::vector<Point2D> hotpixels(size);
263  m_backendHandle, reinterpret_cast<PEAK_IPL_POINT_2D*>(hotpixels.data()), &size);
264  });
265 
266  return hotpixels;
267 }
268 
269 inline Image HotpixelCorrection::Correct(const Image& inputImage, const std::vector<Point2D>& hotpixels) const
270 {
271  PEAK_IPL_IMAGE_HANDLE outputImageHandle = nullptr;
274  ImageBackendAccessor::BackendHandle(inputImage),
275  reinterpret_cast<const PEAK_IPL_POINT_2D*>(hotpixels.data()), hotpixels.size(), &outputImageHandle);
276  });
277 
278  return ImageBackendAccessor::CreateImage(outputImageHandle);
279 }
280 
282 {
283  PEAK_IPL_IMAGE_HANDLE outputImageHandle = nullptr;
286  m_backendHandle, ImageBackendAccessor::BackendHandle(inputImage), &outputImageHandle);
287  });
288 
289  return ImageBackendAccessor::CreateImage(outputImageHandle);
290 }
291 
292 
293 } /* namespace ipl */
294 } /* namespace peak */
PEAK_IPL_C_API PEAK_IPL_AdaptiveHotpixelCorrector_Detect(PEAK_IPL_ADAPTIVE_HOTPIXEL_CORRECTOR_HANDLE adaptiveHotpixelCorrectorHandle, PEAK_IPL_IMAGE_HANDLE inputImageHandle)
Detects hotpixels in the given image.
Image CorrectAdaptive(const Image &inputImage)
Corrects the given image adaptively.
Definition: peak_ipl_hotpixel_correction.hpp:281
PEAK_IPL_C_API PEAK_IPL_AdaptiveHotpixelCorrector_GetSensitivity(PEAK_IPL_ADAPTIVE_HOTPIXEL_CORRECTOR_HANDLE adaptiveHotpixelCorrectorHandle, PEAK_IPL_HOTPIXELCORRECTION_SENSITIVITY *sensitivityLevel)
Queries the given adaptive hotpixel corrector algorithm&#39;s current sensitivity.
PEAK_IPL_C_API PEAK_IPL_AdaptiveHotpixelCorrector_SetGainFactorPercent(PEAK_IPL_ADAPTIVE_HOTPIXEL_CORRECTOR_HANDLE adaptiveHotpixelCorrectorHandle, uint32_t gainFactorPercent)
Sets the given adaptive hotpixel corrector algorithm&#39;s gain factor in percent.
#define PEAK_IPL_C_ABI_PREFIX
Definition: peak_ipl_dll_defines.h:16
The "peak::ipl" namespace contains the whole image processing library.
Definition: peak_ipl_binning.hpp:16
PEAK_IPL_C_API PEAK_IPL_AdaptiveHotpixelCorrector_Correct(PEAK_IPL_ADAPTIVE_HOTPIXEL_CORRECTOR_HANDLE adaptiveHotpixelCorrectorHandle, PEAK_IPL_IMAGE_HANDLE inputImageHandle, const PEAK_IPL_POINT_2D *hotpixels, size_t hotpixelsSize, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Corrects the given hotpixels in the given image.
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
Definition: peak_ipl_exception.hpp:182
Algorithm for (adaptive) hotpixel detection and correction.
Definition: peak_ipl_hotpixel_correction.hpp:36
PEAK_IPL_C_API PEAK_IPL_AdaptiveHotpixelCorrector_CorrectAdaptive(PEAK_IPL_ADAPTIVE_HOTPIXEL_CORRECTOR_HANDLE adaptiveHotpixelCorrectorHandle, PEAK_IPL_IMAGE_HANDLE inputImageHandle, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Detects and corrects hotpixels in the given image.
~HotpixelCorrection()
Definition: peak_ipl_hotpixel_correction.hpp:189
Image Correct(const Image &inputImage, const std::vector< Point2D > &hotpixels) const
Corrects the given hotpixels in the given image.
Definition: peak_ipl_hotpixel_correction.hpp:269
Stores the pixel format, width and height of an image and the pointer to the image buffer...
Definition: peak_ipl_image.hpp:37
SensitivityLevel Sensitivity() const
Returns the current sensitivity.
Definition: peak_ipl_hotpixel_correction.hpp:219
PEAK_IPL_C_API PEAK_IPL_AdaptiveHotpixelCorrector_Construct(PEAK_IPL_ADAPTIVE_HOTPIXEL_CORRECTOR_HANDLE *adaptiveHotpixelCorrectorHandle)
Creates an adaptive hotpixel corrector algorithm.
SensitivityLevel
SensitivityLevel parameter for the HotpixelCorrection algorithm.
Definition: peak_ipl_hotpixel_correction.hpp:45
struct PEAK_IPL_IMAGE * PEAK_IPL_IMAGE_HANDLE
Definition: peak_ipl_backend.h:307
uint32_t GainFactorPercent() const
Returns the current gain factor in percent.
Definition: peak_ipl_hotpixel_correction.hpp:238
PEAK_IPL_C_API PEAK_IPL_AdaptiveHotpixelCorrector_GetGainFactorPercent(PEAK_IPL_ADAPTIVE_HOTPIXEL_CORRECTOR_HANDLE adaptiveHotpixelCorrectorHandle, uint32_t *gainFactorPercent)
Queries the given adaptive hotpixel corrector algorithm&#39;s current gain factor in percent.
void SetSensitivity(SensitivityLevel sensitivityLevel=SensitivityLevel::SensitivityLevel3)
Sets the sensitivity of the hotpixel detection.
Definition: peak_ipl_hotpixel_correction.hpp:211
int32_t PEAK_IPL_HOTPIXELCORRECTION_SENSITIVITY
Definition: peak_ipl_backend.h:186
HotpixelCorrection & operator=(const HotpixelCorrection &other)=delete
std::vector< Point2D > Detect(const Image &inputImage) const
Detects hotpixels in the given image.
Definition: peak_ipl_hotpixel_correction.hpp:249
HotpixelCorrection()
Definition: peak_ipl_hotpixel_correction.hpp:179
void SetGainFactorPercent(uint32_t gainFactorPercent=100)
Sets the gain factor in percent.
Definition: peak_ipl_hotpixel_correction.hpp:230
PEAK_IPL_C_API PEAK_IPL_AdaptiveHotpixelCorrector_GetHotpixels(PEAK_IPL_ADAPTIVE_HOTPIXEL_CORRECTOR_HANDLE adaptiveHotpixelCorrectorHandle, PEAK_IPL_POINT_2D *hotpixels, size_t *hotpixelsSize)
Queries previously detected hotpixels.
PEAK_IPL_C_API PEAK_IPL_AdaptiveHotpixelCorrector_SetSensitivity(PEAK_IPL_ADAPTIVE_HOTPIXEL_CORRECTOR_HANDLE adaptiveHotpixelCorrectorHandle, PEAK_IPL_HOTPIXELCORRECTION_SENSITIVITY sensitivityLevel)
Sets the given adaptive hotpixel corrector algorithm&#39;s sensitivity.
PEAK_IPL_C_API PEAK_IPL_AdaptiveHotpixelCorrector_Destruct(PEAK_IPL_ADAPTIVE_HOTPIXEL_CORRECTOR_HANDLE adaptiveHotpixelCorrectorHandle)
Destroys the adaptive hotpixel corrector algorithm associated with the given handle.
struct PEAK_IPL_ADAPTIVE_HOTPIXEL_CORRECTOR * PEAK_IPL_ADAPTIVE_HOTPIXEL_CORRECTOR_HANDLE
Definition: peak_ipl_backend.h:283