From 2c41900239a86f8c54726cc20fe0f227faa23985 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 24 Dec 2017 16:28:45 +0100 Subject: [PATCH] Add local noise equalizer blue red - enhance GUI and algo --- rtdata/languages/default | 13 +- rtengine/iplocallab.cc | 319 ++++++++++++++++++++++++++++++++++----- rtgui/locallab.cc | 130 +++++++++++++--- rtgui/locallab.h | 3 +- 4 files changed, 402 insertions(+), 63 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 71aa6aaad..856201db6 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -828,7 +828,7 @@ HISTORY_MSG_578;Local - Exp Shcompr HISTORY_MSG_579;Local - Exp Scope HISTORY_MSG_580;Local - Exp Contrast curve HISTORY_MSG_581;Local - Centerbuf -HISTORY_MSG_582;Local - adjblur +HISTORY_MSG_582;Local - Noise Equa blue-red HISTORY_MSG_583;Local - cut past HISTORY_MSG_584;Local - cbdl chroma HISTORY_MSG_585;Local - Blur method @@ -1820,10 +1820,8 @@ TP_LENSPROFILE_LABEL;Profiled Lens Correction TP_LENSPROFILE_USECA;Chromatic aberration correction TP_LENSPROFILE_USEDIST;Distortion correction TP_LENSPROFILE_USEVIGN;Vignetting correction -<<<<<<< HEAD -<<<<<<< HEAD TP_LOCALLAB_ACTIV;Blur luminance only -TP_LOCALLAB_ADJBLUR;Adjust and Blur +TP_LOCALLAB_ADJ;Equalizer blue-red TP_LOCALLAB_ARTIF;Reduce artifacts - Improve algoritm TP_LOCALLAB_ARTIF_TOOLTIP;Only active for Color-light, Exposure, Retinex, Vibrance, ToneMapping, CBDL. TP_LOCALLAB_AVOID;Avoid color shift @@ -1932,19 +1930,12 @@ TP_LOCAL_HEIGHT_T;Top TP_LOCAL_WIDTH;Right TP_LOCAL_WIDTH_L;Left TP_LOCRETI_METHOD_TOOLTIP;Low = Reinforce low light.\nUniform = Equalize action.\nHigh = Reinforce high light.\n -TP_NEUTRAL;Neutral -======= -TP_LOCALCONTRAST_LABEL;Local Contrast -TP_LOCALCONTRAST_RADIUS;Radius -======= ->>>>>>> dev TP_LOCALCONTRAST_AMOUNT;Amount TP_LOCALCONTRAST_DARKNESS;Darkness level TP_LOCALCONTRAST_LABEL;Local Contrast TP_LOCALCONTRAST_LIGHTNESS;Lightness level TP_LOCALCONTRAST_RADIUS;Radius TP_NEUTRAL;Reset ->>>>>>> dev TP_NEUTRAL_TIP;Resets exposure sliders to neutral values.\nApplies to the same controls that Auto Levels applies to, regardless of whether you used Auto Levels or not. TP_PCVIGNETTE_FEATHER;Feather TP_PCVIGNETTE_FEATHER_TOOLTIP;Feathering:\n0 = corners only,\n50 = halfway to center,\n100 = to center. diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index e22fc88a8..abe1433e6 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -177,6 +177,7 @@ struct local_params { int excmet; int strucc; int war; + float adjch; }; @@ -473,7 +474,7 @@ static void calcLocalParams(int oW, int oH, const LocallabParams& locallab, stru lp.noisecc = local_noisecc; lp.sensden = local_sensiden; lp.bilat = locallab.bilateral; - + lp.adjch = (float) locallab.adjblur; lp.strengt = streng; lp.gamm = gam; lp.esto = est; @@ -9595,28 +9596,80 @@ void ImProcFunctions::Lab_Local(int call, float** shbuffer, LabImage * original, } float variC[levred]; + float variCb[levred]; + + float noisecfr = lp.noisecf; + float noiseccr = lp.noisecc; + + if (lp.adjch > 0.f) { + noisecfr = lp.noisecf * ((100.f + lp.adjch) / 10.f); + noiseccr = lp.noisecc + ((100.f + lp.adjch) / 10.f); + } + + float noisecfb = lp.noisecf; + float noiseccb = lp.noisecc; + + if (lp.adjch < 0.f) { + noisecfb = lp.noisecf * ((100.f - lp.adjch) / 10.f); + noiseccb = lp.noisecc * ((100.f - lp.adjch) / 10.f); + } + + + if (noisecfr < 0.f) { + noisecfr = 0.0001f; + } + + if (noiseccr < 0.f) { + noiseccr = 0.0001f; + } + + if (noisecfb < 0.f) { + noisecfb = 0.0001f; + } + + if (noiseccb < 0.f) { + noiseccb = 0.0001f; + } + if (!adecomp.memoryAllocationFailed && !bdecomp.memoryAllocationFailed) { if (levred == 7) { edge = 2; - variC[0] = SQR(lp.noisecf / 10.0); - variC[1] = SQR(lp.noisecf / 10.0); - variC[2] = SQR(lp.noisecf / 10.0); + variC[0] = SQR(noisecfr / 10.0); + variC[1] = SQR(noisecfr / 10.0); + variC[2] = SQR(noisecfr / 10.0); + + variC[3] = SQR(noisecfr / 10.0); + variC[4] = SQR(noisecfr / 10.0); + variC[5] = SQR(noiseccr / 10.0); + variC[6] = SQR(noiseccr / 10.0); + + variCb[0] = SQR(noisecfb / 10.0); + variCb[1] = SQR(noisecfb / 10.0); + variCb[2] = SQR(noisecfb / 10.0); + + variCb[3] = SQR(noisecfb / 10.0); + variCb[4] = SQR(noisecfb / 10.0); + variCb[5] = SQR(noiseccb / 10.0); + variCb[6] = SQR(noiseccb / 10.0); - variC[3] = SQR(lp.noisecf / 10.0); - variC[4] = SQR(lp.noisecf / 10.0); - variC[5] = SQR(lp.noisecc / 10.0); - variC[6] = SQR(lp.noisecc / 10.0); } else if (levred == 4) { edge = 3; variC[0] = SQR(lp.noisecf / 10.0); variC[1] = SQR(lp.noisecf / 10.0); variC[2] = SQR(lp.noisecf / 10.0); variC[3] = SQR(lp.noisecf / 10.0); + + variCb[0] = SQR(lp.noisecf / 10.0); + variCb[1] = SQR(lp.noisecf / 10.0); + variCb[2] = SQR(lp.noisecf / 10.0); + variCb[3] = SQR(lp.noisecf / 10.0); + + } - +//lp.adjch if ((lp.noisecf > 0.1f || lp.noisecc > 0.1f || noiscfactiv)) { float minic = 0.0001f; @@ -9624,27 +9677,98 @@ void ImProcFunctions::Lab_Local(int call, float** shbuffer, LabImage * original, minic = 0.1f;//only for artifact shape detection } + float k1 = 0.f; + float k2 = 0.f; + float k3 = 0.f; + + if (lp.noisecf < 0.3f) { + k1 = 0.f; + k2 = 0.f; + k3 = 0.f; + } else if (lp.noisecf < 1.f) { + k1 = 0.4f; + k2 = 0.2f; + k3 = 0.f; + + } else if (lp.noisecf < 3.f) { + k1 = 0.6f; + k2 = 0.45f; + k3 = 0.3f; + } else if (lp.noisecf < 5.f) { + k1 = 0.8f; + k2 = 0.6f; + k3 = 0.5f; + } else { + k1 = 1.f; + k2 = 1.f; + k3 = 1.f; + } + variC[0] = max(minic, variC[0]); - variC[1] = max(minic, variC[1]); - variC[2] = max(minic, variC[2]); - variC[3] = max(minic, variC[3]); + variC[1] = max(minic, k1 * variC[1]); + variC[2] = max(minic, k2 * variC[2]); + variC[3] = max(minic, k3 * variC[3]); + + variCb[0] = max(minic, variCb[0]); + variCb[1] = max(minic, k1 * variCb[1]); + variCb[2] = max(minic, k2 * variCb[2]); + variCb[3] = max(minic, k3 * variCb[3]); if (levred == 7) { + float k4 = 0.f; + float k5 = 0.f; float k6 = 0.f; - variC[4] = max(0.0001f, variC[4]); - variC[5] = max(0.0001f, variC[5]); - if (lp.noisecc < 20.f) { + if (lp.noisecc < 0.3f) { + k4 = 0.1f; + k5 = 0.0f; + } else if (lp.noisecc < 1.f) { + k4 = 0.15f; + k5 = 0.1f; + } else if (lp.noisecc < 4.f) { + k4 = 0.3f; + k5 = 0.15f; + } else if (lp.noisecc < 8.f) { + k4 = 0.4f; + k5 = 0.2f; + } else if (lp.noisecc < 20.f) { + k4 = 0.45f; + k5 = 0.3f; + } else if (lp.noisecc < 40.f) { + k4 = 0.6f; + k5 = 0.4f; + } else if (lp.noisecc < 70.f) { + k4 = 0.7f; + k5 = 0.5f; + } else if (lp.noisecc < 80.f) { + k4 = 0.8f; + k5 = 0.7f; + } else { + k4 = 1.f; + k5 = 1.f; + } + + + variC[4] = max(0.0001f, k4 * variC[4]); + variC[5] = max(0.0001f, k5 * variC[5]); + variCb[4] = max(0.0001f, k4 * variCb[4]); + variCb[5] = max(0.0001f, k5 * variCb[5]); + + if (lp.noisecc < 10.f) { k6 = 0.f; - } else if (lp.noisecc < 50.f) { + } else if (lp.noisecc < 15.f) { + k6 = 0.2f; + } else if (lp.noisecc < 30.f) { k6 = 0.4f; } else if (lp.noisecc < 70.f) { - k6 = 0.7f; + k6 = 0.6f; } else { k6 = 1.f; } variC[6] = max(0.0001f, k6 * variC[6]); + variCb[6] = max(0.0001f, k6 * variCb[6]); + } float* noisevarchrom = new float[GH * GW]; @@ -9678,7 +9802,7 @@ void ImProcFunctions::Lab_Local(int call, float** shbuffer, LabImage * original, float noisevarab_r = 100.f; //SQR(lp.noisecc / 10.0); WaveletDenoiseAllAB(Ldecomp, adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, numThreads); - WaveletDenoiseAllAB(Ldecomp, bdecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, numThreads); + WaveletDenoiseAllAB(Ldecomp, bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, numThreads); delete[] noisevarchrom; } @@ -9884,26 +10008,80 @@ void ImProcFunctions::Lab_Local(int call, float** shbuffer, LabImage * original, float variC[levred]; + float variCb[levred]; + + float noisecfr = lp.noisecf; + float noiseccr = lp.noisecc; + + if (lp.adjch > 0.f) { + noisecfr = lp.noisecf * ((100.f + lp.adjch) / 10.f); + noiseccr = lp.noisecc + ((100.f + lp.adjch) / 10.f); + } + + float noisecfb = lp.noisecf; + float noiseccb = lp.noisecc; + + if (lp.adjch < 0.f) { + noisecfb = lp.noisecf * ((100.f - lp.adjch) / 10.f); + noiseccb = lp.noisecc * ((100.f - lp.adjch) / 10.f); + } + + + if (noisecfr < 0.f) { + noisecfr = 0.0001f; + } + + if (noiseccr < 0.f) { + noiseccr = 0.0001f; + } + + if (noisecfb < 0.f) { + noisecfb = 0.0001f; + } + + if (noiseccb < 0.f) { + noiseccb = 0.0001f; + } + if (!adecomp.memoryAllocationFailed && !bdecomp.memoryAllocationFailed) { + if (levred == 7) { edge = 2; - variC[0] = SQR(lp.noisecf / 10.0); - variC[1] = SQR(lp.noisecf / 10.0); - variC[2] = SQR(lp.noisecf / 10.0); + variC[0] = SQR(noisecfr / 10.0); + variC[1] = SQR(noisecfr / 10.0); + variC[2] = SQR(noisecfr / 10.0); + + variC[3] = SQR(noisecfr / 10.0); + variC[4] = SQR(noisecfr / 10.0); + variC[5] = SQR(noiseccr / 10.0); + variC[6] = SQR(noiseccr / 10.0); + + variCb[0] = SQR(noisecfb / 10.0); + variCb[1] = SQR(noisecfb / 10.0); + variCb[2] = SQR(noisecfb / 10.0); + + variCb[3] = SQR(noisecfb / 10.0); + variCb[4] = SQR(noisecfb / 10.0); + variCb[5] = SQR(noiseccb / 10.0); + variCb[6] = SQR(noiseccb / 10.0); - variC[3] = SQR(lp.noisecf / 10.0); - variC[4] = SQR(lp.noisecf / 10.0); - variC[5] = SQR(lp.noisecc / 10.0); - variC[6] = SQR(lp.noisecc / 10.0); } else if (levred == 4) { edge = 3; variC[0] = SQR(lp.noisecf / 10.0); variC[1] = SQR(lp.noisecf / 10.0); variC[2] = SQR(lp.noisecf / 10.0); variC[3] = SQR(lp.noisecf / 10.0); + + variCb[0] = SQR(lp.noisecf / 10.0); + variCb[1] = SQR(lp.noisecf / 10.0); + variCb[2] = SQR(lp.noisecf / 10.0); + variCb[3] = SQR(lp.noisecf / 10.0); + + } +//lp.adjch if ((lp.noisecf > 0.1f || lp.noisecc > 0.1f || noiscfactiv)) { float minic = 0.0001f; @@ -9911,29 +10089,102 @@ void ImProcFunctions::Lab_Local(int call, float** shbuffer, LabImage * original, minic = 0.1f;//only for artifact shape detection } + float k1 = 0.f; + float k2 = 0.f; + float k3 = 0.f; + + if (lp.noisecf < 0.3f) { + k1 = 0.f; + k2 = 0.f; + k3 = 0.f; + } else if (lp.noisecf < 1.f) { + k1 = 0.4f; + k2 = 0.2f; + k3 = 0.f; + + } else if (lp.noisecf < 3.f) { + k1 = 0.6f; + k2 = 0.45f; + k3 = 0.3f; + } else if (lp.noisecf < 5.f) { + k1 = 0.8f; + k2 = 0.6f; + k3 = 0.5f; + } else { + k1 = 1.f; + k2 = 1.f; + k3 = 1.f; + } + variC[0] = max(minic, variC[0]); - variC[1] = max(minic, variC[1]); - variC[2] = max(minic, variC[2]); - variC[3] = max(minic, variC[3]); + variC[1] = max(minic, k1 * variC[1]); + variC[2] = max(minic, k2 * variC[2]); + variC[3] = max(minic, k3 * variC[3]); + + variCb[0] = max(minic, variCb[0]); + variCb[1] = max(minic, k1 * variCb[1]); + variCb[2] = max(minic, k2 * variCb[2]); + variCb[3] = max(minic, k3 * variCb[3]); if (levred == 7) { + float k4 = 0.f; + float k5 = 0.f; float k6 = 0.f; - variC[4] = max(0.0001f, variC[4]); - variC[5] = max(0.0001f, variC[5]); - if (lp.noisecc < 20.f) { + if (lp.noisecc < 0.3f) { + k4 = 0.1f; + k5 = 0.0f; + } else if (lp.noisecc < 1.f) { + k4 = 0.15f; + k5 = 0.1f; + } else if (lp.noisecc < 4.f) { + k4 = 0.3f; + k5 = 0.15f; + } else if (lp.noisecc < 8.f) { + k4 = 0.4f; + k5 = 0.2f; + } else if (lp.noisecc < 20.f) { + k4 = 0.45f; + k5 = 0.3f; + } else if (lp.noisecc < 40.f) { + k4 = 0.6f; + k5 = 0.4f; + } else if (lp.noisecc < 70.f) { + k4 = 0.7f; + k5 = 0.5f; + } else if (lp.noisecc < 80.f) { + k4 = 0.8f; + k5 = 0.7f; + } else { + k4 = 1.f; + k5 = 1.f; + } + + + variC[4] = max(0.0001f, k4 * variC[4]); + variC[5] = max(0.0001f, k5 * variC[5]); + variCb[4] = max(0.0001f, k4 * variCb[4]); + variCb[5] = max(0.0001f, k5 * variCb[5]); + + if (lp.noisecc < 10.f) { k6 = 0.f; - } else if (lp.noisecc < 50.f) { + } else if (lp.noisecc < 15.f) { + k6 = 0.2f; + } else if (lp.noisecc < 30.f) { k6 = 0.4f; } else if (lp.noisecc < 70.f) { - k6 = 0.7f; + k6 = 0.6f; } else { k6 = 1.f; } variC[6] = max(0.0001f, k6 * variC[6]); + variCb[6] = max(0.0001f, k6 * variCb[6]); + } + + float* noisevarchrom = new float[bfh * bfw]; int bfw2 = (bfw + 1) / 2; float nvch = 0.5f;//high value @@ -9963,7 +10214,7 @@ void ImProcFunctions::Lab_Local(int call, float** shbuffer, LabImage * original, float noisevarab_r = 100.f; //SQR(lp.noisecc / 10.0); WaveletDenoiseAllAB(Ldecomp, adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, numThreads); - WaveletDenoiseAllAB(Ldecomp, bdecomp, noisevarchrom, madL, variC, edge, noisevarab_r, true, false, false, numThreads); + WaveletDenoiseAllAB(Ldecomp, bdecomp, noisevarchrom, madL, variCb, edge, noisevarab_r, true, false, false, numThreads); delete[] noisevarchrom; } } diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index e13eede48..45c6908e8 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -32,10 +32,96 @@ #include #include "../rtengine/improcfun.h" +#define MINCHRO 0. +#define MAXCHRO 100 +#define CENTERCHRO 10 + + using namespace rtengine; using namespace rtengine::procparams; extern Options options; +static double dnSlider2chro(double sval) +{ + + // slider range: 0 - 10000 + double chro; + + if (sval <= 10) { + // linear below center-temp + chro = MINCHRO + (sval / 10.0) * (CENTERCHRO - MINCHRO); + } else { + const double slope = (double)(CENTERCHRO - MINCHRO) / (MAXCHRO - CENTERCHRO); + double x = (sval - 10) / 10; // x 0..1 + double y = x * slope + (1.0 - slope) * pow(x, 4.0); + //double y = pow(x, 4.0); + chro = CENTERCHRO + y * (MAXCHRO - CENTERCHRO); + } + + if (chro < MINCHRO) { + chro = MINCHRO; + } + + if (chro > MAXCHRO) { + chro = MAXCHRO; + } + + return chro; +} + +static double dnchro2Slider(double noisechrof) +{ + + double sval; + + if (noisechrof <= CENTERCHRO) { + sval = ((noisechrof - MINCHRO) / (CENTERCHRO - MINCHRO)) * 10.0; + } else { + const double slope = (double)(CENTERCHRO - MINCHRO) / (MAXCHRO - CENTERCHRO); + const double y = (noisechrof - CENTERCHRO) / (MAXCHRO - CENTERCHRO); + double x = pow(y, 0.25); // rough guess of x, will be a little lower + double k = 0.1; + bool add = true; + + // the y=f(x) function is a mess to invert, therefore we have this trial-refinement loop instead. + // from tests, worst case is about 20 iterations, ie no problem + for (;;) { + double y1 = x * slope + (1.0 - slope) * pow(x, 4.0); + + if (10 * fabs(y1 - y) < 0.1) { + break; + } + + if (y1 < y) { + if (!add) { + k /= 2; + } + + x += k; + add = true; + } else { + if (add) { + k /= 2; + } + + x -= k; + add = false; + } + } + + sval = 10.0 + x * 10.0; + } + + if (sval < 0) { + sval = 0; + } + + if (sval > 100) { + sval = 100; + } + + return sval; +} Locallab::Locallab(): @@ -110,8 +196,10 @@ Locallab::Locallab(): noisechrodetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHRODETAIL"), 0, 100, 1, 50))), bilateral(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BILATERAL"), 0, 100, 1, 0))), sensiden(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIDEN"), 0, 100, 1, 30))), - noisechrof(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROFINE"), 0, 100, 1, 0))), - noisechroc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROCOARSE"), 0, 100, 1, 0))), +// noisechrof(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROFINE"), 0, 100, 0.1, 0))), + noisechrof(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROFINE"), MINCHRO, MAXCHRO, 0.1, 0, NULL, NULL, &dnSlider2chro, &dnchro2Slider))), +// noisechroc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROCOARSE"), 0, 100, 0.1, 0))), + noisechroc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROCOARSE"), MINCHRO, MAXCHRO, 0.1, 0, NULL, NULL, &dnSlider2chro, &dnchro2Slider))), hueref(Gtk::manage(new Adjuster(M("TP_LOCALLAB_HUEREF"), -3.15, 3.15, 0.01, 0))), huerefblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_HUEREFBLUR"), -3.15, 3.15, 0.01, 0))), chromaref(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMAREF"), 0, 200, 0.01, 0))), @@ -119,7 +207,7 @@ Locallab::Locallab(): sobelref(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOBELREF"), 0, 100, 0.01, 0))), centerXbuf(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CENTERBUF_X"), -1000, 1000, 1, 0))), centerYbuf(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CENTERBUF_Y"), -1000, 1000, 1, 0))), - adjblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ADJBLUR"), 0, 100, 1, 0))), +// adjblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ADJBLUR"), -100, 100, 1, 0))), Smethod(Gtk::manage(new MyComboBoxText())), Exclumethod(Gtk::manage(new MyComboBoxText())), @@ -386,6 +474,12 @@ Locallab::Locallab(): warm = Gtk::manage(new Adjuster(M("TP_LOCALLAB_WARM"), -100., 100., 1., 0., iblueredL, iblueredR)); warm->setAdjusterListener(this); + Gtk::Image* iblueredL1 = Gtk::manage(new RTImage("ajd-wb-bluered1.png")); + Gtk::Image* iblueredR1 = Gtk::manage(new RTImage("ajd-wb-bluered2.png")); + + adjblur = Gtk::manage(new Adjuster(M("TP_LOCALLAB_ADJ"), -100., 100., 1., 0., iblueredL1, iblueredR1)); + adjblur->setAdjusterListener(this); + //chroma->set_tooltip_text (M("TP_LOCALLAB_CHROMA_TOOLTIP")); chroma->setAdjusterListener(this); @@ -394,7 +488,7 @@ Locallab::Locallab(): centerXbuf->setAdjusterListener(this);; centerYbuf->setAdjusterListener(this);; - adjblur->setAdjusterListener(this);; +// adjblur->setAdjusterListener(this);; //exposure @@ -667,6 +761,8 @@ Locallab::Locallab(): wavBox->pack_start(*noisechrof); wavBox->pack_start(*noisechroc); wavBox->pack_start(*noisechrodetail); + wavBox->pack_start(*adjblur); + wavFrame->add(*wavBox); denoisBox->pack_start(*wavFrame); @@ -692,7 +788,7 @@ Locallab::Locallab(): superFrame->set_label_widget(*curvactiv); ToolParamBlock* const colorBox = Gtk::manage(new ToolParamBlock()); - // ToolParamBlock* const dustBox = Gtk::manage (new ToolParamBlock()); +// ToolParamBlock* const dustBox = Gtk::manage (new ToolParamBlock()); dustMethod->append(M("TP_LOCALLAB_DSCOP")); dustMethod->append(M("TP_LOCALLAB_DSMOV")); dustMethod->append(M("TP_LOCALLAB_DSPAS")); @@ -709,17 +805,17 @@ Locallab::Locallab(): colorBox->pack_start(*warm); colorBox->pack_start(*sensi); - - dustFrame->set_label_align(0.025, 0.5); -// dustBox->pack_start (*dustMethod); -// dustBox->pack_start (*lastdust); - -// dustBox->pack_start (*cutpast); -// dustBox->pack_start (*centerXbuf); -// dustBox->pack_start (*centerYbuf); -// dustBox->pack_start (*adjblur); -// dustFrame->add (*dustBox); -// colorBox->pack_start (*dustFrame); + /* + dustFrame->set_label_align(0.025, 0.5); + dustBox->pack_start (*dustMethod); + dustBox->pack_start (*lastdust); + dustBox->pack_start (*cutpast); + dustBox->pack_start (*centerXbuf); + dustBox->pack_start (*centerYbuf); + dustBox->pack_start (*adjblur); + dustFrame->add (*dustBox); + colorBox->pack_start (*dustFrame); + */ centerXbuf->hide(); centerYbuf->hide(); @@ -4267,7 +4363,7 @@ void Locallab::adjusterChanged(Adjuster * a, double newval) } else if (a == proxi) { listener->panelChanged(Evlocallabproxi, proxi->getTextValue()); } else if (a == adjblur) { - // listener->panelChanged (Evlocallabadjblur, adjblur->getTextValue()); + listener->panelChanged(Evlocallabadjblur, adjblur->getTextValue()); } else if (a == centerX || a == centerY) { listener->panelChanged(EvlocallabCenter, Glib::ustring::compose("X=%1\nY=%2", centerX->getTextValue(), centerY->getTextValue())); } else if (a == centerXbuf || a == centerYbuf) { diff --git a/rtgui/locallab.h b/rtgui/locallab.h index 3fe2e91e5..725a617e1 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -129,7 +129,7 @@ private: Adjuster* const sobelref; Adjuster* const centerXbuf; Adjuster* const centerYbuf; - Adjuster* const adjblur; +// Adjuster* const adjblur; MyComboBoxText* const Smethod; MyComboBoxText* const Exclumethod; @@ -204,6 +204,7 @@ private: Adjuster* pastels; Adjuster* saturated; Adjuster* warm; + Adjuster* adjblur; ThresholdAdjuster* psThreshold; Gtk::CheckButton* protectSkins;