From b371629b230fbf59f8756e36270085aad765913e Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 1 Jul 2019 07:31:17 +0200 Subject: [PATCH] adjustements between radius FFTW Gaussianblur --- rtengine/iplocalcontrast.cc | 13 +++++++++++-- rtengine/ipretinex.cc | 17 ++++++++++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/rtengine/iplocalcontrast.cc b/rtengine/iplocalcontrast.cc index b35c3d3da..9a19536b2 100644 --- a/rtengine/iplocalcontrast.cc +++ b/rtengine/iplocalcontrast.cc @@ -55,8 +55,17 @@ void ImProcFunctions::localContrast(LabImage *lab, float **destination, const Lo #endif gaussianBlur(lab->L, buf, width, height, sigma); } else { - sigma *= 1.f; - ImProcFunctions::fftw_convol_blur2(lab->L, buf, width, height, sigma, 0, 0); + float kr = 1.f; + //emprical adjustement between FFTW radius and Gaussainblur + //under 50 ==> 10.f + //above 400 ==> 1.f + float ak = -9.f / 350.f; + float bk = 10.f - 50.f * ak; + kr = ak * sigma + bk; + if(sigma < 50.f) kr = 10.f; + if(sigma > 400.f) kr = 1.f; + // printf("kr=%f \n", kr); + ImProcFunctions::fftw_convol_blur2(lab->L, buf, width, height, kr * sigma, 0, 0); } #ifdef _OPENMP #pragma omp parallel for if(multiThread) diff --git a/rtengine/ipretinex.cc b/rtengine/ipretinex.cc index e0873502f..356c58d66 100644 --- a/rtengine/ipretinex.cc +++ b/rtengine/ipretinex.cc @@ -962,9 +962,20 @@ void ImProcFunctions::MSRLocal(int sp, bool fftw, int lum, LabImage * bufreti, L } float *buffer = new float[W_L * H_L]; - float mulradiusfftw = 1.f; + float kr = 1.f; for (int scale = scal - 1; scale >= 0; scale--) { // printf("retscale=%f scale=%i \n", mulradiusfftw * RetinexScales[scale], scale); + //emprical adjustement between FFTW radius and Gaussainblur + //under 50 ==> 10.f + //above 400 ==> 1.f + float sigm = RetinexScales[scale]; + float mulradiusfftw = 1.f; + float ak = -9.f / 350.f; + float bk = 10.f - 50.f * ak; + kr = ak * sigm + bk; + if(sigm < 50.f) kr = 10.f; + if(sigm > 400.f) kr = 1.f; + if(!fftw) { #ifdef _OPENMP #pragma omp parallel //disabled with FFTW @@ -983,11 +994,11 @@ void ImProcFunctions::MSRLocal(int sp, bool fftw, int lum, LabImage * bufreti, L } else { if (scale == scal - 1) { - ImProcFunctions::fftw_convol_blur2(src, out, W_L, H_L, mulradiusfftw * RetinexScales[scale], 0, 0); + ImProcFunctions::fftw_convol_blur2(src, out, W_L, H_L, (kr * RetinexScales[scale]), 0, 0); } else // reuse result of last iteration { // out was modified in last iteration => restore it - ImProcFunctions::fftw_convol_blur2(out, out, W_L, H_L,sqrtf(SQR(mulradiusfftw * RetinexScales[scale]) - SQR(mulradiusfftw * RetinexScales[scale + 1])), 0, 0); + ImProcFunctions::fftw_convol_blur2(out, out, W_L, H_L,sqrtf(SQR(kr * RetinexScales[scale]) - SQR(kr * RetinexScales[scale + 1])), 0, 0); } }