From 7bafb536185d814cb62f875eb9c02a2cba3f9eac Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 10 Oct 2019 16:53:23 +0200 Subject: [PATCH] Fixed bug in Blur and noise if coefc = 0 --- rtengine/iplocallab.cc | 16 ++++++++++++---- rtengine/procparams.cc | 4 ++-- rtgui/locallab.cc | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 7aea87c2f..ce80b97b2 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -6929,7 +6929,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } - if (((radius >= 5. * GAUSS_SKIP && lp.rad > 1.) || lp.stren > 0.1 || lp.blmet == 1 || lp.guidb > 1 || lp.showmaskblmet == 2 || lp.enablMask || lp.showmaskblmet == 3 || lp.showmaskblmet == 4) && lp.blurena) { // radius < GAUSS_SKIP means no gauss, just copy of original image + if (((radius >= 1.5 * GAUSS_SKIP && lp.rad > 1.) || lp.stren > 0.1 || lp.blmet == 1 || lp.guidb > 1 || lp.showmaskblmet == 2 || lp.enablMask || lp.showmaskblmet == 3 || lp.showmaskblmet == 4) && lp.blurena) { // radius < GAUSS_SKIP means no gauss, just copy of original image std::unique_ptr tmp1; std::unique_ptr tmp2; const int ystart = std::max(static_cast(lp.yc - lp.lyT) - cy, 0); @@ -6984,7 +6984,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } - if (lp.blurmet == 0 && lp.blmet == 0 && radius >= (5. * GAUSS_SKIP)) { + if (lp.blurmet == 0 && lp.blmet == 0 && radius >= (1.5 * GAUSS_SKIP)) { #ifdef _OPENMP #pragma omp parallel #endif @@ -7001,7 +7001,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } - } else if (lp.blurmet == 1 && lp.blmet == 0 && radius >= (5. * GAUSS_SKIP)) { + } else if (lp.blurmet == 1 && lp.blmet == 0 && radius >= (1.5 * GAUSS_SKIP)) { #ifdef _OPENMP #pragma omp parallel @@ -7088,6 +7088,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } if (lp.blurmet == 0 && lp.blmet == 2) { + if (lp.guidb > 1) { lp.actsp = true; #ifdef _OPENMP @@ -7143,6 +7144,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } float coefC = 0.01f * (max(fabs(minC), fabs(maxC))); + if(coefC == 0.f) { + coefC = 1.f; + } #ifdef _OPENMP #pragma omp parallel for #endif @@ -7169,6 +7173,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } float coefC = 0.01f * (max(fabs(minC), fabs(maxC))); + if(coefC == 0.f) { + coefC = 1.f; + } + #ifdef _OPENMP #pragma omp parallel for #endif @@ -7184,7 +7192,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lp.blurmet == 0) { //blur and noise (center) if (tmp1.get()) { - BlurNoise_Local(tmp1.get(), originalmaskbl, bufchro, hueref, chromaref, lumaref, lp, original, transformed, cx, cy, sk); + BlurNoise_Local(tmp1.get(), originalmaskbl, bufchro, hueref, chromaref, lumaref, lp, original, transformed, cx, cy, sk); } } else if (lp.blurmet == 1) { if (tmp1.get()) { diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index eb2261bf0..6778e02a8 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2539,13 +2539,13 @@ LocallabParams::LocallabSpot::LocallabSpot() : softMethod("soft"), // Blur & Noise expblur(false), - radius(5.0), + radius(1.5), strength(0), sensibn(40), itera(1), guidbl(1), epsbl(10), - blMethod("blur"), + blMethod("guid"), blurMethod("norm"), medMethod("33"), activlum(false), diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index a8b5eb5f0..4f17475e5 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -242,7 +242,7 @@ Locallab::Locallab(): laplace(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPLACE"), 0., 100., 0.5, 25.))), sensisf(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 1, 100, 1, 15))), // Blur & Noise - radius(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADIUS"), 5.0, 1000.0, 0.1, 5.0))), + radius(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADIUS"), 1.5, 1000.0, 0.1, 1.5))), strength(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRENGTH"), 0, 100, 1, 0))), itera(Gtk::manage(new Adjuster(M("TP_DIRPYRDENOISE_MEDIAN_PASSES"), 1, 4, 1, 1))), guidbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GUIDBL"), 1, 300, 1, 1))),