diff --git a/rtengine/FTblockDNchroma.cc b/rtengine/FTblockDNchroma.cc index bc0e81308..7f866b109 100644 --- a/rtengine/FTblockDNchroma.cc +++ b/rtengine/FTblockDNchroma.cc @@ -188,7 +188,17 @@ namespace rtengine { const short int height=src->height, width=src->width; const short int hfh=(height+1)/2, hfw=(width+1)/2; - //const short int hfh=(height+1), hfw=(width+1); + + if (dnparams.Lamt==0) {//nothing to do; copy src to dst + for (int i=0; ir[i][j] = src->r[i][j]; + dst->r[i][j] = src->r[i][j]; + dst->r[i][j] = src->r[i][j]; + } + } + return; + } const int blkrad=1; float noisevar_L = SQR(dnparams.luma * TS * 10.0f); @@ -1155,7 +1165,7 @@ void ImProcFunctions::FixImpulse_ab(LabImage * src, LabImage * dst, double radiu { //simple wavelet shrinkage const float eps = 0.01f; - float * sigma = new float[W_L*H_L]; + float * sfave = new float[W_L*H_L]; printf("\n level=%d \n",level); @@ -1207,13 +1217,13 @@ void ImProcFunctions::FixImpulse_ab(LabImage * src, LabImage * dst, double radiu float mag = SQR(WavCoeffs_L[dir][i]); float shrinkfactor = mag/(mag+noisevar_L*mad_L*exp(-mag/(3*noisevar_L*mad_L))+eps); - //float shrinkfactor = mag/(mag+noisevar*SQR(sigma[coeffloc])+eps); + //float shrinkfactor = mag/(mag+noisevar*SQR(sfave[coeffloc])+eps); //WavCoeffs_L[dir][i] *= shrinkfactor; - sigma[i] = shrinkfactor; + sfave[i] = shrinkfactor; } - boxblur(sigma, sigma, level+2, level+2, W_L, H_L);//increase smoothness by locally averaging shrinkage + boxblur(sfave, sfave, level+2, level+2, W_L, H_L);//increase smoothness by locally averaging shrinkage for (int i=0; i2*thresh_a ? 1 : (coeff_a2*thresh_b ? 1 : (coeff_b2*thresh_L ? 1 : (coeff_L2*thresh_L ? 1 : (coeff_LgetImage (currWB, tr, orig_prev, pp, params.hlrecovery, params.icm, params.raw); if (todo & M_LINDENOISE) { + printf("denoising!\n"); // @Emil: put your luminance denoise tool here ; of course, at this stage, you only have an ImageFloat, no LabImage yet... if (scale==1 && params.dirpyrDenoise.enabled) { //array2D Ldn(fw,fh); diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index be5a92e97..072d91797 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -163,6 +163,8 @@ namespace rtengine { void WaveletDenoise(wavelet_decomposition &WaveletCoeffs, float noisevar ); void WaveletDenoiseAll(wavelet_decomposition &WaveletCoeffs_L, wavelet_decomposition &WaveletCoeffs_a, wavelet_decomposition &WaveletCoeffs_b, float noisevar_L, float noisevar_ab ); + void WaveletDenoiseAll_BiShrink(wavelet_decomposition &WaveletCoeffs_L, wavelet_decomposition &WaveletCoeffs_a, + wavelet_decomposition &WaveletCoeffs_b, float noisevar_L, float noisevar_ab ); void BiShrink(float * ReCoeffs, float * ImCoeffs, float * ReParents, float * ImParents, \ int W, int H, int level, int padding, float noisevar); void Shrink(float ** WavCoeffs, int W, int H, int level, float noisevar); diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 9d4b14618..3b6eba081 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -108,10 +108,10 @@ TRANSFORM, // EvPerspCorr 0, // EvEqlEnabled:obsolete IMPULSEDENOISE, // EvIDNEnabled, IMPULSEDENOISE, // EvIDNThresh, -DIRPYRDENOISE, // EvDPDNEnabled, -DIRPYRDENOISE, // EvDPDNLuma, -DIRPYRDENOISE, // EvDPDNChroma, -DIRPYRDENOISE, // EvDPDNGamma, +ALLNORAW, // EvDPDNEnabled, +ALLNORAW, // EvDPDNLuma, +ALLNORAW, // EvDPDNChroma, +ALLNORAW, // EvDPDNGamma, DIRPYREQUALIZER, // EvDirPyrEqualizer, DIRPYREQUALIZER, // EvDirPyrEqlEnabled, LUMINANCECURVE, // EvLSaturation, @@ -150,8 +150,8 @@ FLATFIELD, // EvFlatFieldAutoSelect, FLATFIELD, // EvFlatFieldBlurRadius, FLATFIELD, // EvFlatFieldBlurType, TRANSFORM, // EvAutoDIST, -DIRPYRDENOISE, // EvDPDNLumCurve, -DIRPYRDENOISE, // EvDPDNChromCurve, +ALLNORAW, // EvDPDNLumCurve, +ALLNORAW, // EvDPDNChromCurve, ALL, // EvGAMMA ALL, // EvGAMPOS ALL, // EvGAMFREE