diff --git a/modules/xphoto/src/dct_image_denoising.cpp b/modules/xphoto/src/dct_image_denoising.cpp index e88382700..1b432ea18 100644 --- a/modules/xphoto/src/dct_image_denoising.cpp +++ b/modules/xphoto/src/dct_image_denoising.cpp @@ -61,6 +61,8 @@ namespace cv Mat_ res( src.size(), 0.0f ), num( src.size(), 0.0f ); + double threshold = 2.0*log(psize)*sigma; + for (int i = 0; i <= src.rows - psize; ++i) for (int j = 0; j <= src.cols - psize; ++j) { @@ -69,7 +71,7 @@ namespace cv dct(patch, patch); float * ptr = (float *) patch.data; for (int k = 0; k < psize*psize; ++k) - if (fabs(ptr[k]) < 3.0f*sigma) + if (fabs(ptr[k]) < threshold) ptr[k] = 0.0f; idct(patch, patch); diff --git a/modules/xphoto/test/dct_image_denoising.cpp b/modules/xphoto/test/dct_image_denoising.cpp index 20e21ddef..1c6f86e76 100644 --- a/modules/xphoto/test/dct_image_denoising.cpp +++ b/modules/xphoto/test/dct_image_denoising.cpp @@ -14,13 +14,14 @@ namespace cvtest for (int i = 0; i < nTests; ++i) { cv::String srcName = dir + cv::format( "sources/%02d.png", i + 1); - cv::Mat src = cv::imread( srcName ); + cv::Mat src = cv::imread( srcName, 1 ); cv::String previousResultName = dir + cv::format( "results/%02d.png", i + 1 ); cv::Mat previousResult = cv::imread( previousResultName, 1 ); - cv::Mat currentResult; + cv::Mat currentResult, fastNlMeansResult; cv::dctDenoising(src, currentResult, sigma, psize); + cv::fastNlMeansDenoising(src, fastNlMeansResult); cv::Mat sqrError = ( currentResult - previousResult ) .mul( currentResult - previousResult ); diff --git a/modules/xphoto/test/test_precomp.hpp b/modules/xphoto/test/test_precomp.hpp index a0d96484e..eda7c31a2 100644 --- a/modules/xphoto/test/test_precomp.hpp +++ b/modules/xphoto/test/test_precomp.hpp @@ -13,6 +13,7 @@ #include "opencv2/imgproc.hpp" #include "opencv2/imgproc/types_c.h" #include "opencv2/highgui.hpp" +#include "opencv2/photo.hpp" #include "opencv2/xphoto.hpp" #include "opencv2/ts.hpp" #include