From 2d4fe00aa3bb669d7d71ab59f2e8f386d2320d45 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sun, 23 Aug 2015 21:45:34 +0200 Subject: [PATCH] Speedup for DeHaze (Function MSR) --- rtengine/ipdehaz.cc | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/rtengine/ipdehaz.cc b/rtengine/ipdehaz.cc index f659a21eb..802528780 100644 --- a/rtengine/ipdehaz.cc +++ b/rtengine/ipdehaz.cc @@ -37,6 +37,7 @@ #include "gauss.h" #include "rawimagesource.h" #include "improcfun.h" +#include "StopWatch.h" #define MAX_DEHAZE_SCALES 6 #define clipdehaz( val, minv, maxv ) (( val = (val < minv ? minv : val ) ) > maxv ? maxv : val ) @@ -86,6 +87,7 @@ void mean_stddv( float **dst, float &mean, float &stddv, int W_L, int H_L ) vsquared = 0.0f; mean = 0.0f; +// #pragma omp parallel for reduction(+:mean,vsquared) // will enable this later, because naturally it leads to differences for (int i = 0; i (out, out, *pBuffer,W_L, H_L, DehazeScales[scale]); delete pBuffer; } +#ifdef _OPENMP +#pragma omp parallel for +#endif for ( int i=0; i < H_L; i++) for (int j=0; j < W_L; j++) { - dst[i][j] += pond * (float)( log(src[i][j] + eps) - log(out[i][j]) ); + dst[i][j] += pond * ( xlogf((in[i][j])/out[i][j]) ); } } @@ -196,21 +199,16 @@ void RawImageSource::MSR(LabImage* lab, int width, int height, int skip, LCurveP } delete [] out; - - - - float beta=16384.0f; - +float logBeta = xlogf(beta); #ifdef _OPENMP -#pragma omp for +#pragma omp parallel for #endif for (int i=0; i< H_L; i++ ) for (int j=0; jL[i][j]=((100.f - strength)* lab->L[i][j] + strength * src[i][j])/100.f; + lab->L[i][j]=((100.f - strength)* lab->L[i][j] + strength * clipdehaz( cd, 0.f, 32768.f ))/100.f; } for (int i = 0; i < H_L; i++) {