diff --git a/rtengine/gauss.h b/rtengine/gauss.h index 61e5e2fe4..5ee144a6a 100644 --- a/rtengine/gauss.h +++ b/rtengine/gauss.h @@ -23,7 +23,7 @@ #include #include #include "opthelper.h" - +#include "stdio.h" // classical filtering if the support window is small: template void gaussHorizontal3 (T** src, T** dst, int W, int H, const float c0, const float c1) @@ -765,22 +765,32 @@ template void gaussianBlur(T** src, T** dst, const int W, const int H, { double newSigma = sigma; - if(forceLowSigma) { + if(forceLowSigma && newSigma > 170.f) { newSigma /= sqrt(2.0); if(newSigma < 0.6) { // barrier to avoid using simple gauss version for higher radius newSigma = sigma; forceLowSigma = false; + gaussianBlur(src,dst,W,H,newSigma,forceLowSigma); + } else { + gaussianBlur(src,dst,W,H,newSigma,forceLowSigma); + gaussianBlur(dst,dst,W,H,newSigma,forceLowSigma); } - } - - gaussHorizontal (src, dst, W, H, newSigma); - gaussVertical (dst, dst, W, H, newSigma); - - if(forceLowSigma) { - gaussHorizontal (dst, dst, W, H, newSigma); + } else { + gaussHorizontal (src, dst, W, H, newSigma); gaussVertical (dst, dst, W, H, newSigma); + } +// #pragma omp critical +// printf("gauss sigma : %f / %f\n",sigma,newSigma); + +/* + if(forceLowSigma && newSigma > 170.f) { + gaussianBlur(dst,dst,W,H,newSigma,forceLowSigma); +// gaussHorizontal (dst, dst, W, H, newSigma); +// gaussVertical (dst, dst, W, H, newSigma); + } +*/ } #endif diff --git a/rtengine/ipretinex.cc b/rtengine/ipretinex.cc index 54d6888ea..a7901fb71 100644 --- a/rtengine/ipretinex.cc +++ b/rtengine/ipretinex.cc @@ -44,6 +44,8 @@ #include "rawimagesource.h" #include "improcfun.h" #include "opthelper.h" +#include "StopWatch.h" + #define MAX_RETINEX_SCALES 8 #define clipretinex( val, minv, maxv ) (( val = (val < minv ? minv : val ) ) > maxv ? maxv : val ) @@ -98,6 +100,9 @@ void retinex_scales( float* scales, int nscales, int mode, int s, float high) } } } + for ( int i = 0; i < nscales; ++i ) + printf("sigma[%d] : %f\n",i,scales[i]); + } void mean_stddv2( float **dst, float &mean, float &stddv, int W_L, int H_L, float &maxtr, float &mintr) { @@ -205,6 +210,7 @@ void mean_stddv( float **dst, float &mean, float &stddv, int W_L, int H_L, const void RawImageSource::MSR(float** luminance, float** originalLuminance, float **exLuminance, int width, int height, RetinexParams deh, const RetinextransmissionCurve & dehatransmissionCurve, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax) { + StopWatch Stop1("MSR"); if (deh.enabled) {//enabled float mean, stddv, maxtr, mintr; // float mini, delta, maxi;