diff --git a/rtengine/FTblockDN.cc b/rtengine/FTblockDN.cc index 758949e07..848d7dd11 100644 --- a/rtengine/FTblockDN.cc +++ b/rtengine/FTblockDN.cc @@ -2635,7 +2635,7 @@ bool ImProcFunctions::WaveletDenoiseAllAB(wavelet_decomposition &WaveletCoeffs_L for (int lvl = 0; lvl < maxlvl; ++lvl) { for (int dir = 1; dir < 4; ++dir) { - ShrinkAllAB(WaveletCoeffs_L, WaveletCoeffs_ab, buffer, lvl, dir, noisevarchrom, noisevar_ab, useNoiseCCurve, autoch, denoiseMethodRgb, madL[lvl], nullptr, 0); + ShrinkAllAB(WaveletCoeffs_L, WaveletCoeffs_ab, buffer, lvl, dir, noisevarchrom, noisevar_ab, useNoiseCCurve, autoch, denoiseMethodRgb, madL[lvl], variC, local, nullptr, 0); } } } @@ -2777,15 +2777,12 @@ SSEFUNCTION void ImProcFunctions::ShrinkAllAB(wavelet_decomposition &WaveletCoef madab = SQR(MadRgb(WavCoeffs_ab[dir], W_ab * H_ab)); } } - float noisevarfc; - if ((local == 2 || local == 3) && variC) { noisevarfc = variC[level]; } else { noisevarfc = noisevar_ab; } - if (noisevarfc > 0.001f) {//noisevar_ab // madab = useNoiseCCurve ? madab : madab * noisevar_ab; madab = useNoiseCCurve ? madab : madab * noisevarfc; diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 3760a0117..3868a572d 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -8572,7 +8572,7 @@ void ImProcFunctions::Lab_Local(int call, float** shbuffer, LabImage * original, wavelet_decomposition bdecomp(tmp1.b[0], tmp1.W, tmp1.H, levwavL, 1, skip, numThreads, DaubLen); float madL[8][3]; - float madC[8][3]; + // float madC[8][3]; int edge = 2; if (!Ldecomp.memoryAllocationFailed) { @@ -8653,6 +8653,7 @@ void ImProcFunctions::Lab_Local(int call, float** shbuffer, LabImage * original, float variC[levred]; if (!adecomp.memoryAllocationFailed && !bdecomp.memoryAllocationFailed) { + /* #pragma omp parallel for collapse(2) schedule(dynamic,1) for (int lvl = 0; lvl < levred; ++lvl) { @@ -8667,7 +8668,7 @@ void ImProcFunctions::Lab_Local(int call, float** shbuffer, LabImage * original, } } - + */ if (levred == 7) { @@ -8711,12 +8712,12 @@ void ImProcFunctions::Lab_Local(int call, float** shbuffer, LabImage * original, float* noisevarchrom = new float[GH * GW]; for (int q = 0; q < GH * GW; q++) { - noisevarchrom[q] = 1.f; + noisevarchrom[q] = 50.f; } float noisevarab_r = 100.f; //SQR(lp.noisecc / 10.0); - WaveletDenoiseAllAB(Ldecomp, adecomp, noisevarchrom, madC, variC, edge, noisevarab_r, false, false, false, numThreads); - WaveletDenoiseAllAB(Ldecomp, bdecomp, noisevarchrom, madC, variC, edge, noisevarab_r, false, false, false, numThreads); + WaveletDenoiseAllAB(Ldecomp, adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, false, false, false, numThreads); + WaveletDenoiseAllAB(Ldecomp, bdecomp, noisevarchrom, madL, variC, edge, noisevarab_r, false, false, false, numThreads); delete[] noisevarchrom; } @@ -9080,22 +9081,23 @@ void ImProcFunctions::Lab_Local(int call, float** shbuffer, LabImage * original, float variC[levred]; if (!adecomp.memoryAllocationFailed && !bdecomp.memoryAllocationFailed) { - float madC[8][3]; - #pragma omp parallel for collapse(2) schedule(dynamic,1) + /* + float madC[8][3]; + #pragma omp parallel for collapse(2) schedule(dynamic,1) - for (int lvl = 0; lvl < levred; ++lvl) { - // compute median absolute deviation (MAD) of detail coefficients as robust noise estimator - for (int dir = 1; dir < 4; ++dir) { + for (int lvl = 0; lvl < levred; ++lvl) { + // compute median absolute deviation (MAD) of detail coefficients as robust noise estimator + for (int dir = 1; dir < 4; ++dir) { - int Wlvl_ab = adecomp.level_W(lvl);//approximation with only "a" (better than L - int Hlvl_ab = adecomp.level_H(lvl); + int Wlvl_ab = adecomp.level_W(lvl);//approximation with only "a" (better than L + int Hlvl_ab = adecomp.level_H(lvl); - float ** WavCoeffs_ab = adecomp.level_coeffs(lvl); - madC[lvl][dir - 1] = SQR(Mad(WavCoeffs_ab[dir], Wlvl_ab * Hlvl_ab)); - } - - } + float ** WavCoeffs_ab = adecomp.level_coeffs(lvl); + madC[lvl][dir - 1] = SQR(Mad(WavCoeffs_ab[dir], Wlvl_ab * Hlvl_ab)); + } + } + */ if (levred == 7) { edge = 2; variC[0] = SQR(lp.noisecf / 10.0); @@ -9136,13 +9138,13 @@ void ImProcFunctions::Lab_Local(int call, float** shbuffer, LabImage * original, float* noisevarchrom = new float[bfh * bfw]; for (int q = 0; q < bfh * bfw; q++) { - noisevarchrom[q] = 1.f; + noisevarchrom[q] = 50.f; } float noisevarab_r = 100.f; //SQR(lp.noisecc / 10.0); - WaveletDenoiseAllAB(Ldecomp, adecomp, noisevarchrom, madC, variC, edge, noisevarab_r, false, false, false, numThreads); - WaveletDenoiseAllAB(Ldecomp, bdecomp, noisevarchrom, madC, variC, edge, noisevarab_r, false, false, false, numThreads); + WaveletDenoiseAllAB(Ldecomp, adecomp, noisevarchrom, madL, variC, edge, noisevarab_r, false, false, false, numThreads); + WaveletDenoiseAllAB(Ldecomp, bdecomp, noisevarchrom, madL, variC, edge, noisevarab_r, false, false, false, numThreads); delete[] noisevarchrom; }