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) 2008-2012, 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_PHOTO_CUDA_HPP__
44#define __OPENCV_PHOTO_CUDA_HPP__
45
46#include "opencv2/core/cuda.hpp"
47
48namespace cv { namespace cuda {
49
50//! @addtogroup photo_denoise
51//! @{
52
53/** @brief Performs pure non local means denoising without any simplification, and thus it is not fast.
54
55@param src Source image. Supports only CV_8UC1, CV_8UC2 and CV_8UC3.
56@param dst Destination image.
57@param h Filter sigma regulating filter strength for color.
58@param search_window Size of search window.
59@param block_size Size of block used for computing weights.
60@param borderMode Border type. See borderInterpolate for details. BORDER_REFLECT101 ,
61BORDER_REPLICATE , BORDER_CONSTANT , BORDER_REFLECT and BORDER_WRAP are supported for now.
62@param stream Stream for the asynchronous version.
63
64@sa
65   fastNlMeansDenoising
66 */
67CV_EXPORTS void nonLocalMeans(InputArray src, OutputArray dst,
68                              float h,
69                              int search_window = 21,
70                              int block_size = 7,
71                              int borderMode = BORDER_DEFAULT,
72                              Stream& stream = Stream::Null());
73
74/** @brief Perform image denoising using Non-local Means Denoising algorithm
75<http://www.ipol.im/pub/algo/bcm_non_local_means_denoising> with several computational
76optimizations. Noise expected to be a gaussian white noise
77
78@param src Input 8-bit 1-channel, 2-channel or 3-channel image.
79@param dst Output image with the same size and type as src .
80@param h Parameter regulating filter strength. Big h value perfectly removes noise but also
81removes image details, smaller h value preserves details but also preserves some noise
82@param search_window Size in pixels of the window that is used to compute weighted average for
83given pixel. Should be odd. Affect performance linearly: greater search_window - greater
84denoising time. Recommended value 21 pixels
85@param block_size Size in pixels of the template patch that is used to compute weights. Should be
86odd. Recommended value 7 pixels
87@param stream Stream for the asynchronous invocations.
88
89This function expected to be applied to grayscale images. For colored images look at
90FastNonLocalMeansDenoising::labMethod.
91
92@sa
93   fastNlMeansDenoising
94 */
95CV_EXPORTS void fastNlMeansDenoising(InputArray src, OutputArray dst,
96                                     float h,
97                                     int search_window = 21,
98                                     int block_size = 7,
99                                     Stream& stream = Stream::Null());
100
101/** @brief Modification of fastNlMeansDenoising function for colored images
102
103@param src Input 8-bit 3-channel image.
104@param dst Output image with the same size and type as src .
105@param h_luminance Parameter regulating filter strength. Big h value perfectly removes noise but
106also removes image details, smaller h value preserves details but also preserves some noise
107@param photo_render float The same as h but for color components. For most images value equals 10 will be
108enough to remove colored noise and do not distort colors
109@param search_window Size in pixels of the window that is used to compute weighted average for
110given pixel. Should be odd. Affect performance linearly: greater search_window - greater
111denoising time. Recommended value 21 pixels
112@param block_size Size in pixels of the template patch that is used to compute weights. Should be
113odd. Recommended value 7 pixels
114@param stream Stream for the asynchronous invocations.
115
116The function converts image to CIELAB colorspace and then separately denoise L and AB components
117with given h parameters using FastNonLocalMeansDenoising::simpleMethod function.
118
119@sa
120   fastNlMeansDenoisingColored
121 */
122CV_EXPORTS void fastNlMeansDenoisingColored(InputArray src, OutputArray dst,
123                                            float h_luminance, float photo_render,
124                                            int search_window = 21,
125                                            int block_size = 7,
126                                            Stream& stream = Stream::Null());
127
128//! @} photo
129
130}} // namespace cv { namespace cuda {
131
132#endif /* __OPENCV_PHOTO_CUDA_HPP__ */
133