Home | History | Annotate | Download | only in opencv2
      1 /*M///////////////////////////////////////////////////////////////////////////////////////
      2 //
      3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
      4 //
      5 //  By downloading, copying, installing or using the software you agree to this license.
      6 //  If you do not agree to this license, do not download, install,
      7 //  copy or use the software.
      8 //
      9 //
     10 //                           License Agreement
     11 //                For Open Source Computer Vision Library
     12 //
     13 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
     14 // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
     15 // Third party copyrights are property of their respective owners.
     16 //
     17 // Redistribution and use in source and binary forms, with or without modification,
     18 // are permitted provided that the following conditions are met:
     19 //
     20 //   * Redistribution's of source code must retain the above copyright notice,
     21 //     this list of conditions and the following disclaimer.
     22 //
     23 //   * Redistribution's in binary form must reproduce the above copyright notice,
     24 //     this list of conditions and the following disclaimer in the documentation
     25 //     and/or other materials provided with the distribution.
     26 //
     27 //   * The name of the copyright holders may not be used to endorse or promote products
     28 //     derived from this software without specific prior written permission.
     29 //
     30 // This software is provided by the copyright holders and contributors "as is" and
     31 // any express or implied warranties, including, but not limited to, the implied
     32 // warranties of merchantability and fitness for a particular purpose are disclaimed.
     33 // In no event shall the Intel Corporation or contributors be liable for any direct,
     34 // indirect, incidental, special, exemplary, or consequential damages
     35 // (including, but not limited to, procurement of substitute goods or services;
     36 // loss of use, data, or profits; or business interruption) however caused
     37 // and on any theory of liability, whether in contract, strict liability,
     38 // or tort (including negligence or otherwise) arising in any way out of
     39 // the use of this software, even if advised of the possibility of such damage.
     40 //
     41 //M*/
     42 
     43 #ifndef __OPENCV_CUDAFILTERS_HPP__
     44 #define __OPENCV_CUDAFILTERS_HPP__
     45 
     46 #ifndef __cplusplus
     47 #  error cudafilters.hpp header must be compiled as C++
     48 #endif
     49 
     50 #include "opencv2/core/cuda.hpp"
     51 #include "opencv2/imgproc.hpp"
     52 
     53 /**
     54   @addtogroup cuda
     55   @{
     56     @defgroup cudafilters Image Filtering
     57 
     58 Functions and classes described in this section are used to perform various linear or non-linear
     59 filtering operations on 2D images.
     60 
     61 @note
     62    -   An example containing all basic morphology operators like erode and dilate can be found at
     63         opencv_source_code/samples/gpu/morphology.cpp
     64 
     65   @}
     66  */
     67 
     68 namespace cv { namespace cuda {
     69 
     70 //! @addtogroup cudafilters
     71 //! @{
     72 
     73 /** @brief Common interface for all CUDA filters :
     74  */
     75 class CV_EXPORTS Filter : public Algorithm
     76 {
     77 public:
     78     /** @brief Applies the specified filter to the image.
     79 
     80     @param src Input image.
     81     @param dst Output image.
     82     @param stream Stream for the asynchronous version.
     83      */
     84     virtual void apply(InputArray src, OutputArray dst, Stream& stream = Stream::Null()) = 0;
     85 };
     86 
     87 ////////////////////////////////////////////////////////////////////////////////////////////////////
     88 // Box Filter
     89 
     90 /** @brief Creates a normalized 2D box filter.
     91 
     92 @param srcType Input image type. Only CV_8UC1 and CV_8UC4 are supported for now.
     93 @param dstType Output image type. Only the same type as src is supported for now.
     94 @param ksize Kernel size.
     95 @param anchor Anchor point. The default value Point(-1, -1) means that the anchor is at the kernel
     96 center.
     97 @param borderMode Pixel extrapolation method. For details, see borderInterpolate .
     98 @param borderVal Default border value.
     99 
    100 @sa boxFilter
    101  */
    102 CV_EXPORTS Ptr<Filter> createBoxFilter(int srcType, int dstType, Size ksize, Point anchor = Point(-1,-1),
    103                                        int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
    104 
    105 ////////////////////////////////////////////////////////////////////////////////////////////////////
    106 // Linear Filter
    107 
    108 /** @brief Creates a non-separable linear 2D filter.
    109 
    110 @param srcType Input image type. Supports CV_8U , CV_16U and CV_32F one and four channel image.
    111 @param dstType Output image type. Only the same type as src is supported for now.
    112 @param kernel 2D array of filter coefficients.
    113 @param anchor Anchor point. The default value Point(-1, -1) means that the anchor is at the kernel
    114 center.
    115 @param borderMode Pixel extrapolation method. For details, see borderInterpolate .
    116 @param borderVal Default border value.
    117 
    118 @sa filter2D
    119  */
    120 CV_EXPORTS Ptr<Filter> createLinearFilter(int srcType, int dstType, InputArray kernel, Point anchor = Point(-1,-1),
    121                                           int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
    122 
    123 ////////////////////////////////////////////////////////////////////////////////////////////////////
    124 // Laplacian Filter
    125 
    126 /** @brief Creates a Laplacian operator.
    127 
    128 @param srcType Input image type. Supports CV_8U , CV_16U and CV_32F one and four channel image.
    129 @param dstType Output image type. Only the same type as src is supported for now.
    130 @param ksize Aperture size used to compute the second-derivative filters (see getDerivKernels). It
    131 must be positive and odd. Only ksize = 1 and ksize = 3 are supported.
    132 @param scale Optional scale factor for the computed Laplacian values. By default, no scaling is
    133 applied (see getDerivKernels ).
    134 @param borderMode Pixel extrapolation method. For details, see borderInterpolate .
    135 @param borderVal Default border value.
    136 
    137 @sa Laplacian
    138  */
    139 CV_EXPORTS Ptr<Filter> createLaplacianFilter(int srcType, int dstType, int ksize = 1, double scale = 1,
    140                                              int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
    141 
    142 ////////////////////////////////////////////////////////////////////////////////////////////////////
    143 // Separable Linear Filter
    144 
    145 /** @brief Creates a separable linear filter.
    146 
    147 @param srcType Source array type.
    148 @param dstType Destination array type.
    149 @param rowKernel Horizontal filter coefficients. Support kernels with size \<= 32 .
    150 @param columnKernel Vertical filter coefficients. Support kernels with size \<= 32 .
    151 @param anchor Anchor position within the kernel. Negative values mean that anchor is positioned at
    152 the aperture center.
    153 @param rowBorderMode Pixel extrapolation method in the vertical direction For details, see
    154 borderInterpolate.
    155 @param columnBorderMode Pixel extrapolation method in the horizontal direction.
    156 
    157 @sa sepFilter2D
    158  */
    159 CV_EXPORTS Ptr<Filter> createSeparableLinearFilter(int srcType, int dstType, InputArray rowKernel, InputArray columnKernel,
    160                                                    Point anchor = Point(-1,-1), int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
    161 
    162 ////////////////////////////////////////////////////////////////////////////////////////////////////
    163 // Deriv Filter
    164 
    165 /** @brief Creates a generalized Deriv operator.
    166 
    167 @param srcType Source image type.
    168 @param dstType Destination array type.
    169 @param dx Derivative order in respect of x.
    170 @param dy Derivative order in respect of y.
    171 @param ksize Aperture size. See getDerivKernels for details.
    172 @param normalize Flag indicating whether to normalize (scale down) the filter coefficients or not.
    173 See getDerivKernels for details.
    174 @param scale Optional scale factor for the computed derivative values. By default, no scaling is
    175 applied. For details, see getDerivKernels .
    176 @param rowBorderMode Pixel extrapolation method in the vertical direction. For details, see
    177 borderInterpolate.
    178 @param columnBorderMode Pixel extrapolation method in the horizontal direction.
    179  */
    180 CV_EXPORTS Ptr<Filter> createDerivFilter(int srcType, int dstType, int dx, int dy,
    181                                          int ksize, bool normalize = false, double scale = 1,
    182                                          int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
    183 
    184 /** @brief Creates a Sobel operator.
    185 
    186 @param srcType Source image type.
    187 @param dstType Destination array type.
    188 @param dx Derivative order in respect of x.
    189 @param dy Derivative order in respect of y.
    190 @param ksize Size of the extended Sobel kernel. Possible values are 1, 3, 5 or 7.
    191 @param scale Optional scale factor for the computed derivative values. By default, no scaling is
    192 applied. For details, see getDerivKernels .
    193 @param rowBorderMode Pixel extrapolation method in the vertical direction. For details, see
    194 borderInterpolate.
    195 @param columnBorderMode Pixel extrapolation method in the horizontal direction.
    196 
    197 @sa Sobel
    198  */
    199 CV_EXPORTS Ptr<Filter> createSobelFilter(int srcType, int dstType, int dx, int dy, int ksize = 3,
    200                                          double scale = 1, int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
    201 
    202 /** @brief Creates a vertical or horizontal Scharr operator.
    203 
    204 @param srcType Source image type.
    205 @param dstType Destination array type.
    206 @param dx Order of the derivative x.
    207 @param dy Order of the derivative y.
    208 @param scale Optional scale factor for the computed derivative values. By default, no scaling is
    209 applied. See getDerivKernels for details.
    210 @param rowBorderMode Pixel extrapolation method in the vertical direction. For details, see
    211 borderInterpolate.
    212 @param columnBorderMode Pixel extrapolation method in the horizontal direction.
    213 
    214 @sa Scharr
    215  */
    216 CV_EXPORTS Ptr<Filter> createScharrFilter(int srcType, int dstType, int dx, int dy,
    217                                           double scale = 1, int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
    218 
    219 ////////////////////////////////////////////////////////////////////////////////////////////////////
    220 // Gaussian Filter
    221 
    222 /** @brief Creates a Gaussian filter.
    223 
    224 @param srcType Source image type.
    225 @param dstType Destination array type.
    226 @param ksize Aperture size. See getGaussianKernel for details.
    227 @param sigma1 Gaussian sigma in the horizontal direction. See getGaussianKernel for details.
    228 @param sigma2 Gaussian sigma in the vertical direction. If 0, then
    229 \f$\texttt{sigma2}\leftarrow\texttt{sigma1}\f$ .
    230 @param rowBorderMode Pixel extrapolation method in the vertical direction. For details, see
    231 borderInterpolate.
    232 @param columnBorderMode Pixel extrapolation method in the horizontal direction.
    233 
    234 @sa GaussianBlur
    235  */
    236 CV_EXPORTS Ptr<Filter> createGaussianFilter(int srcType, int dstType, Size ksize,
    237                                             double sigma1, double sigma2 = 0,
    238                                             int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
    239 
    240 ////////////////////////////////////////////////////////////////////////////////////////////////////
    241 // Morphology Filter
    242 
    243 /** @brief Creates a 2D morphological filter.
    244 
    245 @param op Type of morphological operation. The following types are possible:
    246 -   **MORPH_ERODE** erode
    247 -   **MORPH_DILATE** dilate
    248 -   **MORPH_OPEN** opening
    249 -   **MORPH_CLOSE** closing
    250 -   **MORPH_GRADIENT** morphological gradient
    251 -   **MORPH_TOPHAT** "top hat"
    252 -   **MORPH_BLACKHAT** "black hat"
    253 @param srcType Input/output image type. Only CV_8UC1 and CV_8UC4 are supported.
    254 @param kernel 2D 8-bit structuring element for the morphological operation.
    255 @param anchor Anchor position within the structuring element. Negative values mean that the anchor
    256 is at the center.
    257 @param iterations Number of times erosion and dilation to be applied.
    258 
    259 @sa morphologyEx
    260  */
    261 CV_EXPORTS Ptr<Filter> createMorphologyFilter(int op, int srcType, InputArray kernel, Point anchor = Point(-1, -1), int iterations = 1);
    262 
    263 ////////////////////////////////////////////////////////////////////////////////////////////////////
    264 // Image Rank Filter
    265 
    266 /** @brief Creates the maximum filter.
    267 
    268 @param srcType Input/output image type. Only CV_8UC1 and CV_8UC4 are supported.
    269 @param ksize Kernel size.
    270 @param anchor Anchor point. The default value (-1) means that the anchor is at the kernel center.
    271 @param borderMode Pixel extrapolation method. For details, see borderInterpolate .
    272 @param borderVal Default border value.
    273  */
    274 CV_EXPORTS Ptr<Filter> createBoxMaxFilter(int srcType, Size ksize,
    275                                           Point anchor = Point(-1, -1),
    276                                           int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
    277 
    278 /** @brief Creates the minimum filter.
    279 
    280 @param srcType Input/output image type. Only CV_8UC1 and CV_8UC4 are supported.
    281 @param ksize Kernel size.
    282 @param anchor Anchor point. The default value (-1) means that the anchor is at the kernel center.
    283 @param borderMode Pixel extrapolation method. For details, see borderInterpolate .
    284 @param borderVal Default border value.
    285  */
    286 CV_EXPORTS Ptr<Filter> createBoxMinFilter(int srcType, Size ksize,
    287                                           Point anchor = Point(-1, -1),
    288                                           int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
    289 
    290 ////////////////////////////////////////////////////////////////////////////////////////////////////
    291 // 1D Sum Filter
    292 
    293 /** @brief Creates a horizontal 1D box filter.
    294 
    295 @param srcType Input image type. Only CV_8UC1 type is supported for now.
    296 @param dstType Output image type. Only CV_32FC1 type is supported for now.
    297 @param ksize Kernel size.
    298 @param anchor Anchor point. The default value (-1) means that the anchor is at the kernel center.
    299 @param borderMode Pixel extrapolation method. For details, see borderInterpolate .
    300 @param borderVal Default border value.
    301  */
    302 CV_EXPORTS Ptr<Filter> createRowSumFilter(int srcType, int dstType, int ksize, int anchor = -1, int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
    303 
    304 /** @brief Creates a vertical 1D box filter.
    305 
    306 @param srcType Input image type. Only CV_8UC1 type is supported for now.
    307 @param dstType Output image type. Only CV_32FC1 type is supported for now.
    308 @param ksize Kernel size.
    309 @param anchor Anchor point. The default value (-1) means that the anchor is at the kernel center.
    310 @param borderMode Pixel extrapolation method. For details, see borderInterpolate .
    311 @param borderVal Default border value.
    312  */
    313 CV_EXPORTS Ptr<Filter> createColumnSumFilter(int srcType, int dstType, int ksize, int anchor = -1, int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
    314 
    315 //! @}
    316 
    317 }} // namespace cv { namespace cuda {
    318 
    319 #endif /* __OPENCV_CUDAFILTERS_HPP__ */
    320