diff --git a/modules/photo/src/fast_nlmeans_denoising_invoker.hpp b/modules/photo/src/fast_nlmeans_denoising_invoker.hpp index 2de50a77b9..cbf9d259f1 100644 --- a/modules/photo/src/fast_nlmeans_denoising_invoker.hpp +++ b/modules/photo/src/fast_nlmeans_denoising_invoker.hpp @@ -130,13 +130,12 @@ FastNlMeansDenoisingInvoker::FastNlMeansDenoisingInvoker( const double WEIGHT_THRESHOLD = 0.001; const size_t ALLOC_CHUNK = 65536; - IT max_dist = - (IT)pixelInfo::sampleMax() * (IT)pixelInfo::sampleMax() * (IT)pixelInfo::channels; + IT max_dist = (IT)pixelInfo::sampleMax() * (IT)pixelInfo::channels; size_t almost_max_dist = 0; while (true) { double dist = almost_max_dist * almost_dist2actual_dist_multiplier; - IT weight = (IT)round(fixed_point_mult_ * std::exp(-dist / (h * h * pixelInfo::channels))); + IT weight = (IT)round(fixed_point_mult_ * std::exp(-dist*dist / (h * h * pixelInfo::channels))); if (weight < WEIGHT_THRESHOLD * fixed_point_mult_ || dist > max_dist) break; if (almost_max_dist >= almost_dist2weight_.size()) diff --git a/modules/photo/src/fast_nlmeans_denoising_invoker_commons.hpp b/modules/photo/src/fast_nlmeans_denoising_invoker_commons.hpp index 0a8713b91b..4ca63d652d 100644 --- a/modules/photo/src/fast_nlmeans_denoising_invoker_commons.hpp +++ b/modules/photo/src/fast_nlmeans_denoising_invoker_commons.hpp @@ -85,7 +85,7 @@ template struct calcDist_ { static inline IT f(const T a, const T b) { - return (IT)(a-b) * (IT)(a-b); + return std::abs((IT)(a-b)); } }; @@ -93,7 +93,7 @@ template struct calcDist_, IT> { static inline IT f(const Vec a, const Vec b) { - return (IT)(a[0]-b[0])*(IT)(a[0]-b[0]) + (IT)(a[1]-b[1])*(IT)(a[1]-b[1]); + return std::abs((IT)(a[0]-b[0])) + std::abs((IT)(a[1]-b[1])); } }; @@ -101,10 +101,7 @@ template struct calcDist_, IT> { static inline IT f(const Vec a, const Vec b) { - return - (IT)(a[0]-b[0])*(IT)(a[0]-b[0]) + - (IT)(a[1]-b[1])*(IT)(a[1]-b[1]) + - (IT)(a[2]-b[2])*(IT)(a[2]-b[2]); + return std::abs((IT)(a[0]-b[0])) + std::abs((IT)(a[1]-b[1])) + std::abs((IT)(a[2]-b[2])); } }; @@ -121,31 +118,10 @@ static inline IT calcDist(const Mat& m, int i1, int j1, int i2, int j2) return calcDist(a,b); } -template struct calcUpDownDist_ -{ - static inline IT f(T a_up, T a_down, T b_up, T b_down) - { - IT A = a_down - b_down; - IT B = a_up - b_up; - return (A-B)*(A+B); - } -}; - -template struct calcUpDownDist_, IT> -{ -private: - typedef Vec T; -public: - static inline IT f(T a_up, T a_down, T b_up, T b_down) - { - return calcDist(a_down, b_down) - calcDist(a_up, b_up); - } -}; - template static inline IT calcUpDownDist(T a_up, T a_down, T b_up, T b_down) { - return calcUpDownDist_::f(a_up, a_down, b_up, b_down); + return calcDist(a_down, b_down) - calcDist(a_up, b_up); }; template struct incWithWeight_ diff --git a/modules/photo/src/fast_nlmeans_multi_denoising_invoker.hpp b/modules/photo/src/fast_nlmeans_multi_denoising_invoker.hpp index e0f06c68f9..f12a0ef50d 100644 --- a/modules/photo/src/fast_nlmeans_multi_denoising_invoker.hpp +++ b/modules/photo/src/fast_nlmeans_multi_denoising_invoker.hpp @@ -141,13 +141,12 @@ FastNlMeansMultiDenoisingInvoker::FastNlMeansMultiDenoisingInvoker( const double WEIGHT_THRESHOLD = 0.001; const size_t ALLOC_CHUNK = 65536; - IT max_dist = - (IT)pixelInfo::sampleMax() * (IT)pixelInfo::sampleMax() * (IT)pixelInfo::channels; + IT max_dist = (IT)pixelInfo::sampleMax() * (IT)pixelInfo::channels; size_t almost_max_dist = 0; while (true) { double dist = almost_max_dist * almost_dist2actual_dist_multiplier; - IT weight = (IT)round(fixed_point_mult_ * std::exp(-dist / (h * h * pixelInfo::channels))); + IT weight = (IT)round(fixed_point_mult_ * std::exp(-dist*dist / (h * h * pixelInfo::channels))); if (weight < WEIGHT_THRESHOLD * fixed_point_mult_ || dist > max_dist) break; if (almost_max_dist >= almost_dist2weight.size())