Compute Library
 21.02
NESobel5x5Kernel.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016-2020 Arm Limited.
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to
8  * deal in the Software without restriction, including without limitation the
9  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10  * sell copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in all
14  * copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 #ifndef ARM_COMPUTE_NESOBEL5x5KERNEL_H
25 #define ARM_COMPUTE_NESOBEL5x5KERNEL_H
26 
28 
29 namespace arm_compute
30 {
31 class ITensor;
32 
33 /** Interface for the kernel to run the horizontal pass of 5x5 Sobel filter on a tensor.
34  *
35  */
37 {
38 public:
39  const char *name() const override
40  {
41  return "NESobel5x5HorKernel";
42  }
43  /** Default constructor */
45  /** Prevent instances of this class from being copied (As this class contains pointers) */
46  NESobel5x5HorKernel(const NESobel5x5HorKernel &) = delete;
47  /** Prevent instances of this class from being copied (As this class contains pointers) */
49  /** Allow instances of this class to be moved */
51  /** Allow instances of this class to be moved */
53  /** Default destructor */
54  ~NESobel5x5HorKernel() = default;
55 
56  /** Initialise the kernel's source, destination and border mode.
57  *
58  * @note At least one of output_x or output_y must be set
59  *
60  * @param[in] input Source tensor. Data type supported: U8.
61  * @param[out] output_x (Optional) Destination tensor for the X gradient. Data type supported: S16.
62  * @param[out] output_y (Optional) Destination tensor for the Y gradient. Data type supported: S16.
63  * @param[in] border_undefined True if the border mode is undefined. False if it's replicate or constant.
64  */
65  void configure(const ITensor *input, ITensor *output_x, ITensor *output_y, bool border_undefined);
66 
67  // Inherited methods overridden:
68  void run(const Window &window, const ThreadInfo &info) override;
69  BorderSize border_size() const override;
70 
71 private:
72  const ITensor *_input; /**< Input tensor */
73  ITensor *_output_x; /**< X output of horizontal pass */
74  ITensor *_output_y; /**< Y output of horizontal pass */
75  bool _run_sobel_x; /**< Do we need to run Sobel X? */
76  bool _run_sobel_y; /**< Do we need to run Sobel Y? */
77  BorderSize _border_size; /**< Border size */
78 };
79 
80 /** Interface for the kernel to run the vertical pass of 5x5 Sobel Y filter on a tensor.
81  *
82 */
84 {
85 public:
86  const char *name() const override
87  {
88  return "NESobel5x5VertKernel";
89  }
90  /** Default constructor */
92  /** Prevent instances of this class from being copied (As this class contains pointers) */
94  /** Prevent instances of this class from being copied (As this class contains pointers) */
96  /** Allow instances of this class to be moved */
98  /** Allow instances of this class to be moved */
100  /** Default destructor */
101  ~NESobel5x5VertKernel() = default;
102 
103  /** Initialise the kernel's source, destination and border mode.
104  *
105  * @param[in] input_x Input for X (X output of hor pass). Data type supported: S16.
106  * @param[in] input_y Input for Y (Y output of hor pass). Data type supported: S16.
107  * @param[out] output_x Destination tensor for the X gradient. Data type supported: S16.
108  * @param[out] output_y Destination tensor for the Y gradient. Data type supported: S16.
109  * @param[in] border_undefined True if the border mode is undefined. False if it's replicate or constant.
110  */
111  void configure(ITensor *input_x, ITensor *input_y, ITensor *output_x, ITensor *output_y, bool border_undefined);
112 
113  // Inherited methods overridden:
114  void run(const Window &window, const ThreadInfo &info) override;
115  BorderSize border_size() const override;
116 
117 private:
118  ITensor *_input_x; /**< X input (X output of the hor pass) */
119  ITensor *_input_y; /**< Y input (Y output of the hor pass) */
120  ITensor *_output_x; /**< X output of sobel */
121  ITensor *_output_y; /**< Y output of sobel */
122  bool _run_sobel_x; /**< Do we need to run sobel X? */
123  bool _run_sobel_y; /**< Do we need to run sobel Y? */
124 };
125 } // namespace arm_compute
126 #endif /*ARM_COMPUTE_NESOBEL5x5KERNEL_H */
~NESobel5x5HorKernel()=default
Default destructor.
const Window & window() const
The maximum window the kernel can be executed on.
Definition: IKernel.cpp:28
Container for 2D border size.
Definition: Types.h:273
Common interface for all kernels implemented in C++.
Definition: ICPPKernel.h:38
void configure(const ITensor *input, ITensor *output_x, ITensor *output_y, bool border_undefined)
Initialise the kernel&#39;s source, destination and border mode.
Interface for Neon tensor.
Definition: ITensor.h:36
Copyright (c) 2017-2021 Arm Limited.
NESobel5x5HorKernel()
Default constructor.
Interface for the kernel to run the vertical pass of 5x5 Sobel Y filter on a tensor.
NESobel5x5HorKernel & operator=(const NESobel5x5HorKernel &)=delete
Prevent instances of this class from being copied (As this class contains pointers) ...
Interface for the kernel to run the horizontal pass of 5x5 Sobel filter on a tensor.
ScaleKernelInfo info(interpolation_policy, default_border_mode, PixelValue(), sampling_policy, false)
Information about executing thread and CPU.
Definition: CPPTypes.h:235
void run(const Window &window, const ThreadInfo &info) override
Execute the kernel on the passed window.
const char * name() const override
Name of the kernel.
BorderSize border_size() const override
The size of the border for that kernel.
Describe a multidimensional execution window.
Definition: Window.h:39
const char * name() const override
Name of the kernel.