19#include <peak_icv_c/algorithms/preprocessing/peak_icv_downsampling.h>
54 return "BinningAverage";
64 const auto modeStr = std::to_string(
static_cast<int>(mode));
70 if (mode ==
"BinningAverage")
74 if (mode ==
"BinningSum")
78 if (mode ==
"Decimation")
183 PEAK_COMMON_NO_DISCARD
bool IsEnabled()
const override;
267 PEAK_COMMON_NO_DISCARD
const char*
GetType()
const override;
295 void SetX(uint32_t x);
304 void SetY(uint32_t y);
313 PEAK_COMMON_NO_DISCARD uint32_t
GetX()
const;
322 PEAK_COMMON_NO_DISCARD uint32_t
GetY()
const;
352 static constexpr auto modeKey{
"Mode" };
353 static constexpr auto xKey =
"X";
354 static constexpr auto yKey =
"Y";
355 static constexpr auto defaultModeKey =
"DefaultMode";
357 static constexpr int moduleVersion = 1;
361 peak_icv_downsampling_handle m_handle{};
362 bool m_enabled{
true };
364 std::string m_customType;
372 : m_defaultMode{ defaultMode }
373 , m_customType{ std::move(customName) }
376 return PEAK_ICV_C_ABI_PREFIX peak_icv_Preprocessing_Downsampling_Create(
377 &m_handle, peak_icv_downsampling_factor{ 1, 1 },
static_cast<peak_icv_downsampling_mode
>(m_defaultMode));
383 if (m_handle !=
nullptr)
385 std::ignore = PEAK_ICV_C_ABI_PREFIX peak_icv_Preprocessing_Downsampling_Destroy(m_handle);
391 , m_handle{ std::exchange(other.m_handle,
nullptr) }
392 , m_enabled{ std::exchange(other.m_enabled,
false) }
399 if (m_handle !=
nullptr)
402 return PEAK_ICV_C_ABI_PREFIX peak_icv_Preprocessing_Downsampling_Destroy(m_handle);
406 m_handle = std::exchange(other.m_handle,
nullptr);
407 m_enabled = std::exchange(other.m_enabled,
false);
426 archive.
SetInt(
"Version", moduleVersion);
440 const auto version = archive.
GetInt(
"Version");
445 SetX(
static_cast<uint32_t
>(archive.
GetInt(xKey)));
446 SetY(
static_cast<uint32_t
>(archive.
GetInt(yKey)));
459 auto needsProcessing = [&] {
462 return PEAK_ICV_C_ABI_PREFIX peak_icv_Preprocessing_Downsampling_NeedsProcessing(m_handle, &value);
473 auto*
const inputImageHandle = peak::common::detail::BackendAccessor<peak::icv::Image>::BackendHandle(inputImage);
475 peak_common_size outputImageSize{};
477 return PEAK_ICV_C_ABI_PREFIX peak_icv_Preprocessing_Downsampling_GetOutputImageSize(m_handle, inputImageHandle, &outputImageSize);
480 peak::icv::Image outputImage{ inputImage.GetPixelFormat(), { outputImageSize.width, outputImageSize.height } };
481 auto*
const outputImageHandle = peak::common::detail::BackendAccessor<peak::icv::Image>::BackendHandle(outputImage);
484 return PEAK_ICV_C_ABI_PREFIX peak_icv_Preprocessing_Downsampling_Process(m_handle, inputImageHandle, outputImageHandle);
492 if (!m_customType.empty())
494 return m_customType.c_str();
496 return "Downsampling";
509 return PEAK_ICV_C_ABI_PREFIX peak_icv_Preprocessing_Downsampling_SetFactor(m_handle, peak_icv_downsampling_factor{ x,
GetY() });
516 return PEAK_ICV_C_ABI_PREFIX peak_icv_Preprocessing_Downsampling_SetFactor(m_handle, peak_icv_downsampling_factor{
GetX(), y });
522 peak_icv_downsampling_factor factor{};
525 return PEAK_ICV_C_ABI_PREFIX peak_icv_Preprocessing_Downsampling_GetFactor(m_handle, &factor);
533 peak_icv_downsampling_factor factor{};
536 return PEAK_ICV_C_ABI_PREFIX peak_icv_Preprocessing_Downsampling_GetFactor(m_handle, &factor);
544 peak_common_interval_u cRange{};
547 return PEAK_ICV_C_ABI_PREFIX peak_icv_Preprocessing_Downsampling_GetRange(m_handle, &cRange);
550 return { cRange.minimum, cRange.maximum };
556 return PEAK_ICV_C_ABI_PREFIX peak_icv_Preprocessing_Downsampling_SetMode(
557 m_handle,
static_cast<peak_icv_downsampling_mode
>(mode));
563 peak_icv_downsampling_mode mode{};
566 return PEAK_ICV_C_ABI_PREFIX peak_icv_Preprocessing_Downsampling_GetMode(m_handle, &mode);
A type-erased container for any copyable value.
T & AnyCast()
Casts the stored value to the specified type.
Represents a continuous numeric interval with inclusive lower and upper bounds.
Interface for a hierarchical key-value archive system.
virtual void SetBool(const std::string &key, bool value)=0
Stores a boolean value.
virtual void SetInt(const std::string &key, int64_t value)=0
Stores a 64-bit signed integer.
virtual int64_t GetInt(const std::string &key) const =0
Retrieves a 64-bit signed integer by key.
virtual std::string GetString(const std::string &key) const =0
Retrieves a string value by key.
virtual bool GetBool(const std::string &key) const =0
Retrieves a boolean value by key.
virtual void SetString(const std::string &key, const std::string &value)=0
Stores a UTF-8 string.
For detailed information about the use of ids_peak_icv Image refer to the Image Guide.
Occurs when a requested operation is not implemented or supported (e.g., exporting to an unsupported ...
Downsampling is used to decrease the image size.
uint32_t GetY() const
Returns the current number of rows used for downsampling.
DownsamplingModule(const DownsamplingModule &other)=delete
Copy constructor for class DownsamplingModule is deleted.
const char * GetType() const override
Returns the type of the module for serialization purposes or the custom type, if defined.
DownsamplingModule()
Creates a DownsamplingModule with default values.
void SetCustomType(const std::string &type)
Sets the custom type of the module for serialization purposes.
DownsamplingMode GetMode() const
Returns the current DownsamplingMode.
void SetMode(const DownsamplingMode &mode)
Sets the DownsamplingMode.
void Serialize(peak::common::serialization::IArchive &archive) const override
Serializes the object's internal state into the provided archive.
uint32_t GetX() const
Returns the current number of columns used for downsampling.
peak::icv::Image Process(const peak::icv::Image &input) const
Applies the downsampling factors and mode to the input image and returns a downsampled copy based on ...
void SetEnabled(bool enabled) override
Enables or disables the module.
void SetY(uint32_t y)
Sets the number of rows to downsample.
void SetX(uint32_t x)
Sets the number of columns to downsample.
void Deserialize(const peak::common::serialization::IArchive &archive) override
Restores the object's state from the provided archive.
DownsamplingModule & operator=(const DownsamplingModule &other)=delete
Copy assignment for class DownsamplingModule is deleted.
peak::common::IntervalU GetRange() const
Returns the valid range for downsampling factors x and y.
void ResetToDefault() override
Resets all settings to their default values defined at initialization, i.e. x = 1,...
~DownsamplingModule() override
bool IsEnabled() const override
Gets whether this module is currently enabled.
Interface for a module used within a pipeline.
DownsamplingMode
Mode parameter for the downsampling algorithm.
@ BinningAverage
The averaged pixel values of neighboring rows and/or columns are computed during binning.
@ BinningSum
The pixel values of neighboring rows and/or columns are summed during binning.
@ Decimation
The additional pixel values of neighboring rows and/or columns are skipped during decimation.
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
std::string ToString(const DebayerConversionPolicy &policy)
void ValidateVersion(int64_t version, const std::string &moduleName)
DownsamplingMode ToMode(const std::string &mode)