Resize Supersampling
Resize Supersampling#
Changes an image size using the super sampling interpolation method.
Description
This function changes an image size using the super sampling interpolation method. This method only reduces the image size. The interpolation algorithm applied uses only pixels of the source image origin that are inside of the image boundaries. This function can operate with ROI (see Image Regions of Interest).
Before using the resize_supersampling
function, implementation must initialize
the resize_supersampling_spec
.
Headers
oneapi/ipl/transform/resize_supersampling.hpp
Syntax
-
template<typename ComputeT = float, typename SrcImageT, typename DstImageT>
sycl::event oneapi::ipl::resize_supersampling(sycl::queue &queue, SrcImageT &src, DstImageT &dst, const resize_supersampling_spec<ComputeT> &spec = {}, const std::vector<sycl::event> &dependencies = {})# Resize supersampling.
- Template Parameters
ComputeT – type to perform calculations
SrcImageT – Source image type
DstImageT – Destination image type
- Parameters
queue – SYCL queue
src – source image
dst – destination image
spec – algorithmic specification
dependencies – dependencies
- Returns
SYCL event
Supported values for ComputeT:
float |
double |
half |
---|---|---|
v |
v |
x |
Supported combinations for DataT/Layouts:
DataT/Layouts |
plane |
channel3 |
channel4 |
plane3 |
---|---|---|---|---|
std::uint8_t |
v |
v |
v |
x |
std::int8_t |
v |
v |
v |
x |
std::uint16_t |
v |
v |
v |
x |
std::int16_t |
v |
v |
v |
x |
std::uint32_t |
v |
v |
v |
x |
std::int32_t |
v |
v |
v |
x |
float |
v |
v |
v |
x |
double |
v |
v |
v |
x |
Supported values for subsampled layout (only for DataT = std::uint8_t
):
sub420 |
sub420i |
---|---|
x |
x |
Parameters
-
template<typename ComputeT = float>
class resize_supersampling_spec# Resize supersampling parameters.
- Template Parameters
ComputeT – the type for computations
Public Functions
-
constexpr resize_supersampling_spec() noexcept = default#
Construct resize supersampling specification.
-
explicit constexpr resize_supersampling_spec(ComputeT x_shift, ComputeT y_shift, bool smooth_edge = false) noexcept#
Construct resize supersampling specification.
- Parameters
x_shift – subpixel shift in x direction
y_shift – subpixel shift in y direction
smooth_edge – edge smoothing parameter
-
constexpr ComputeT get_shift_x() const noexcept#
Returns the x component of the subpixel shift.
- Returns
the x component of the subpixel shift
-
constexpr ComputeT get_shift_y() const noexcept#
Returns the y component of the shift.
- Returns
the y component of the shift
-
constexpr bool is_smooth_edge() const noexcept#
Returns the flag of edge smoothing.
- Returns
the flag of edge smoothing
Errors
compile-time layout check |
Indicates an error when image layout is not supported. |
compile-time data type check |
Indicates an error when image data type is not supported. |
compile-time compute data type check |
Indicates an error when compute data type is not supported. |
|
Indicates an error when the destination image ROI size is greater than the source image ROI size. |
|
Indicates an error when one of the pitch values is not divisible by size of component data type in bytes. |
The code example below demonstrates how shall be called
oneapi::ipl::resize_supersampling
:
using namespace oneapi;
sycl::queue queue;
ipl::shared_usm_allocator_t allocator{ queue };
const sycl::range<2> image_size{ height, width };
// Source 4-channel image data
ipl::image<ipl::layouts::channel4, std::uint8_t> src_image{ queue, p_image_data, image_size, allocator };
// Destination 4-channel image data with 2x smaller size
ipl::image<ipl::layouts::channel4, std::uint8_t> dst_image{ image_size / 2, allocator };
const ipl::resize_supersampling_spec spec{ 0.1f, 0.1f, true };
// Resize supersampling with {0.1, 0.1} shift and edge smoothing enabled
auto event = ipl::resize_supersampling(queue, src_image, dst_image, spec);