NumCpp  2.7.0
A Templatized Header Only C++ Implementation of the Python NumPy Library
addBoundary2d.hpp
Go to the documentation of this file.
1 #pragma once
29 
32 #include "NumCpp/Core/Types.hpp"
39 #include "NumCpp/NdArray.hpp"
40 
41 #include <string>
42 
43 namespace nc
44 {
45  namespace filter
46  {
47  namespace boundary
48  {
49  //============================================================================
50  // Method Description:
59  template<typename dtype>
60  NdArray<dtype> addBoundary2d(const NdArray<dtype>& inImage, Boundary inBoundaryType, uint32 inKernalSize, dtype inConstantValue = 0)
61  {
63 
64  if (inKernalSize % 2 == 0)
65  {
66  THROW_INVALID_ARGUMENT_ERROR("input kernal size must be an odd value.");
67  }
68 
69  const uint32 boundarySize = inKernalSize / 2; // integer division
70 
71  switch (inBoundaryType)
72  {
73  case Boundary::REFLECT:
74  {
75  return reflect2d(inImage, boundarySize);
76  }
77  case Boundary::CONSTANT:
78  {
79  return constant2d(inImage, boundarySize, inConstantValue);
80  }
81  case Boundary::NEAREST:
82  {
83  return nearest2d(inImage, boundarySize);
84  }
85  case Boundary::MIRROR:
86  {
87  return mirror2d(inImage, boundarySize);
88  }
89  case Boundary::WRAP:
90  {
91  return wrap2d(inImage, boundarySize);
92  }
93  default:
94  {
95  THROW_INVALID_ARGUMENT_ERROR("Unimplemented axis type.");
96  return {}; // get rid of compiler warning
97  }
98  }
99  }
100  } // namespace boundary
101  } // namespace filter
102 } // namespace nc
#define THROW_INVALID_ARGUMENT_ERROR(msg)
Definition: Error.hpp:36
#define STATIC_ASSERT_ARITHMETIC(dtype)
Definition: StaticAsserts.hpp:37
Holds 1D and 2D arrays, the main work horse of the NumCpp library.
Definition: NdArrayCore.hpp:72
NdArray< dtype > constant2d(const NdArray< dtype > &inImage, uint32 inBoundarySize, dtype inConstantValue)
Definition: constant2d.hpp:53
NdArray< dtype > mirror2d(const NdArray< dtype > &inImage, uint32 inBoundarySize)
Definition: mirror2d.hpp:52
NdArray< dtype > addBoundary2d(const NdArray< dtype > &inImage, Boundary inBoundaryType, uint32 inKernalSize, dtype inConstantValue=0)
Definition: addBoundary2d.hpp:60
NdArray< dtype > nearest2d(const NdArray< dtype > &inImage, uint32 inBoundarySize)
Definition: nearest2d.hpp:52
NdArray< dtype > reflect2d(const NdArray< dtype > &inImage, uint32 inBoundarySize)
Definition: reflect2d.hpp:53
NdArray< dtype > wrap2d(const NdArray< dtype > &inImage, uint32 inBoundarySize)
Definition: wrap2d.hpp:52
Boundary
Boundary condition to apply to the image filter.
Definition: Boundary.hpp:37
Definition: Coordinate.hpp:45
std::uint32_t uint32
Definition: Types.hpp:40