diff --git a/modules/gpu/include/opencv2/gpu/gpu.hpp b/modules/gpu/include/opencv2/gpu/gpu.hpp
index d02abefabaad480b2e3ce72c52dabd15feb51f88..0cf85cebd160dd2986bb52c8c34292f085dfbcf2 100644
--- a/modules/gpu/include/opencv2/gpu/gpu.hpp
+++ b/modules/gpu/include/opencv2/gpu/gpu.hpp
@@ -1885,11 +1885,6 @@ CV_EXPORTS void createOpticalFlowNeedleMap(const GpuMat& u, const GpuMat& v, Gpu
 
 } // namespace gpu
 
-//! Speckle filtering - filters small connected components on diparity image.
-//! It sets pixel (x,y) to newVal if it coresponds to small CC with size < maxSpeckleSize.
-//! Threshold for border between CC is diffThreshold;
-CV_EXPORTS void filterSpeckles(Mat& img, uchar newVal, int maxSpeckleSize, uchar diffThreshold, Mat& buf);
-
 } // namespace cv
 
 #endif /* __OPENCV_GPU_HPP__ */
diff --git a/modules/gpu/src/speckle_filtering.cpp b/modules/gpu/src/speckle_filtering.cpp
index f714314e589656232a34a1ba35bef77569f72c05..d8a6b5a831b259795bf28b24f4a519e7f754fa4d 100644
--- a/modules/gpu/src/speckle_filtering.cpp
+++ b/modules/gpu/src/speckle_filtering.cpp
@@ -44,6 +44,15 @@
 
 using namespace cv;
 
+namespace cv {
+// TODO: conflicts with calib3d.hpp : filterSpeckles, should be removed ?
+
+//! Speckle filtering - filters small connected components on diparity image.
+//! It sets pixel (x,y) to newVal if it coresponds to small CC with size < maxSpeckleSize.
+//! Threshold for border between CC is diffThreshold;
+  CV_EXPORTS void filterSpeckles(Mat& img, uchar newVal, int maxSpeckleSize, uchar diffThreshold, Mat& buf);
+}
+
 typedef Point_<short> Point2s;
 
 void cv::filterSpeckles( Mat& img, uchar newVal, int maxSpeckleSize, uchar maxDiff, Mat& _buf)