diff --git a/rtengine/FTblockDN.cc b/rtengine/FTblockDN.cc index 894c72ce2..ab06f92f2 100644 --- a/rtengine/FTblockDN.cc +++ b/rtengine/FTblockDN.cc @@ -549,7 +549,7 @@ BENCHFUN const float noisevarL = (useNoiseLCurve && (denoiseMethodRgb || !isRAW)) ? SQR(((noiseluma + 1.f) / 125.f) * (10.f + (noiseluma + 1.f) / 25.f)) : SQR((noiseluma / 125.f) * (1.f + noiseluma / 25.f)); const bool denoiseLuminance = (noisevarL > 0.00001f); - //printf("NL=%f \n",noisevarL); +// printf("NL=%f \n",noisevarL); if (useNoiseLCurve || useNoiseCCurve) { int hei = calclum->getHeight(); int wid = calclum->getWidth(); diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index f415c9c8e..264b5df6d 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -907,10 +907,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const //init for edge and denoise float vari[4]; - vari[0] = 8.f * SQR((cp.lev0n / 125.f) * (1.f + cp.lev0n / 25.f)); - vari[1] = 8.f * SQR((cp.lev1n / 125.f) * (1.f + cp.lev1n / 25.f)); - vari[2] = 8.f * SQR((cp.lev2n / 125.f) * (1.f + cp.lev2n / 25.f)); - vari[3] = 8.f * SQR((cp.lev3n / 125.f) * (1.f + cp.lev3n / 25.f)); + vari[0] = 0.8f * SQR((cp.lev0n / 125.f) * (1.f + cp.lev0n / 25.f)); + vari[1] = 0.8f * SQR((cp.lev1n / 125.f) * (1.f + cp.lev1n / 25.f)); + vari[2] = 0.8f * SQR((cp.lev2n / 125.f) * (1.f + cp.lev2n / 25.f)); + vari[3] = 0.8f * SQR((cp.lev3n / 125.f) * (1.f + cp.lev3n / 25.f)); float kr3 = 1.f; if (cp.lev3n < 10.f) { @@ -925,10 +925,13 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if ((cp.lev0n > 0.1f || cp.lev1n > 0.1f || cp.lev2n > 0.1f || cp.lev3n > 0.1f) && cp.noiseena) { int edge = 4; - vari[0] = rtengine::max(0.0001f, vari[0]); - vari[1] = rtengine::max(0.0001f, vari[1]); - vari[2] = rtengine::max(0.0001f, vari[2]); - vari[3] = rtengine::max(0.0001f, kr3 * vari[3]); + vari[0] = rtengine::max(0.000001f, vari[0]); + vari[1] = rtengine::max(0.000001f, vari[1]); + vari[2] = rtengine::max(0.000001f, vari[2]); + vari[3] = rtengine::max(0.000001f, kr3 * vari[3]); + if (settings->verbose) { + printf("LUM var0=%f var1=%f var2=%f var3=%f\n",vari[0], vari[1], vari[2], vari[3]); + } // float* noisevarlum = nullptr; // we need a dummy to pass it to WaveletDenoiseAllL int GWL = labco->W; int GHL = labco->H; @@ -1023,15 +1026,15 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const if (noisecfr < 0.f) { - noisecfr = 0.0001f; + noisecfr = 0.00001f; } if (noiseccr < 0.f) { - noiseccr = 0.0001f; + noiseccr = 0.00001f; } if (noisecfb < 0.f) { - noisecfb = 0.0001f; + noisecfb = 0.00001f; } if (noiseccb < 0.f) { @@ -1062,7 +1065,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const float k3 = 0.f; if (cp.chromfi < 0.2f) { - k1 = 0.f; + k1 = 0.05f; k2 = 0.f; k3 = 0.f; } else if (cp.chromfi < 0.3f) { @@ -1116,7 +1119,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const k3 = 1.f; } - float minic = 0.0001f; + float minic = 0.000001f; variC[0] = max(minic, variC[0]); variC[1] = max(minic, k1 * variC[1]); variC[2] = max(minic, k2 * variC[2]); @@ -1131,15 +1134,12 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const float k5 = 0.f; float k6 = 0.f; - if (cp.chromco == 0.01f) { - k4 = 0.f; - k5 = 0.0f; - } else if (cp.chromco < 0.2f) { + if (cp.chromco < 0.2f) { k4 = 0.1f; - k5 = 0.0f; + k5 = 0.02f; } else if (cp.chromco < 0.5f) { k4 = 0.15f; - k5 = 0.0f; + k5 = 0.05f; } else if (cp.chromco < 1.f) { k4 = 0.15f; k5 = 0.1f; @@ -1157,10 +1157,10 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const 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]); + variC[4] = max(0.000001f, k4 * variC[4]); + variC[5] = max(0.000001f, k5 * variC[5]); + variCb[4] = max(0.000001f, k4 * variCb[4]); + variCb[5] = max(0.000001f, k5 * variCb[5]); if (cp.chromco < 4.f) { k6 = 0.f; @@ -1172,8 +1172,11 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const k6 = 1.f; } - variC[6] = max(0.0001f, k6 * variC[6]); - variCb[6] = max(0.0001f, k6 * variCb[6]); + variC[6] = max(0.00001f, k6 * variC[6]); + variCb[6] = max(0.00001f, k6 * variCb[6]); + if (settings->verbose) { + printf("CHRO var0=%f va1=%f va2=%f va3=%f va4=%f val5=%f va6=%f\n", variC[0], variC[1], variC[2], variC[3],variC[4],variC[5], variC[6]); + } /* for (int y = 0; y < 7; y++) { printf("y=%i madL=%f varia=%f variab=%f\n", y, madL[y][1], variC[y], variCb[y]);