Wavelet levels: denoise and guided filter with hue curve and local contrast (#5894)
* First wavelet denoise * Gui for wavel denoise * First version local contrast and denoise * Second version local contrast and denoise * second version GUI equalizer * enable equalizer local contrast denoise 1234 * change local contrast curve defaut * disable local contrast when curve 1 * denmethod in advanced - standard * Simulate slider denoise with curve * Some various chnages * Chnage reference local contrast * GUI part reference local contrast * Enable reference noise mix denoise for local contrast denoise * Improvment to reference local contrast denoise * Display comment in console * Best format string in console * Change agressive denoise limit to 50 - added tooltip * Added method quality denoise - change madL in ftblockdn * Change equalizer 1234 settings - added high level local contrast * added high levels local contrast curve * Fixed sigma local contrast * clean format code * Some improvments * normalize level slider high level threshold * change ordonate curve high level contrast * Fixed bad level for curve high levels - simplify GUI standard * several changes - guidefilter final - new double slider threshold * save provisory work * save GUI work GF threshold * save provisory work * Fixed some bad behavior GUI * save GUI Hue GF * Curve Hue for GF * OMP for hue GF * addes noisevarhue and fixed some bug * save GUI equalizer hue * enable equalizer hue * Fixed bad behavior GUI in advanced mode * change some default values * Others change default values * Change in progressivity slider threshold local contrast * simplifie algorithm and GUI * Added tooltip and chnage some labels * Change labels and tooltip wavelet denoise * added level 5 denoise * Change typo in label guided theshold * Various changes labels tooltip * Change minimum wavelet level * Added level 5 to denoise * Change slider sigm for a double slider sigm03 sigm45 * small delay for double slider sigm * Fixed wrong values sigm * Hide level56 in standard complexity * Improve in standard complexity * Various improvment levels 14 * interaction 56 14 - advanced complexity
This commit is contained in:
@@ -2099,12 +2099,12 @@ float ImProcFunctions::Mad(const float * DataList, const int datalen)
|
||||
}
|
||||
|
||||
//computes Median Absolute Deviation
|
||||
//DataList values should mostly have abs val < 256 because we are in Lab mode
|
||||
int histo[256] ALIGNED64 = {0};
|
||||
//DataList values should mostly have abs val < 256 because we are in Lab mode (32768)
|
||||
int histo[32768] ALIGNED64 = {0};
|
||||
|
||||
//calculate histogram of absolute values of wavelet coeffs
|
||||
for (int i = 0; i < datalen; ++i) {
|
||||
histo[static_cast<int>(rtengine::min(255.f, fabsf(DataList[i])))]++;
|
||||
histo[static_cast<int>(rtengine::min(32768.f, fabsf(DataList[i])))]++;
|
||||
}
|
||||
|
||||
//find median of histogram
|
||||
@@ -2196,6 +2196,10 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(wavelet_decomposition& Wavelet
|
||||
maxlvl = 4; //for refine denoise edge wavelet
|
||||
}
|
||||
|
||||
if (edge == 6) {
|
||||
maxlvl = 6; //for wavelet denoise
|
||||
}
|
||||
|
||||
if (edge == 2) {
|
||||
maxlvl = 7; //for locallab denoise
|
||||
}
|
||||
@@ -2264,7 +2268,7 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(wavelet_decomposition& Wavelet
|
||||
for (int i = 0; i < Hlvl_L * Wlvl_L; ++i) {
|
||||
nvl[i] = 0.f;
|
||||
}
|
||||
if ((edge == 1 || edge == 2 || edge == 3 || edge == 5) && vari) {
|
||||
if ((edge == 1 || edge == 2 || edge == 3 || edge == 5 || edge == 6) && vari) {
|
||||
// nvl = blurBuffer; // we need one buffer, but fortunately we don't have to allocate a new one because we can use blurBuffer
|
||||
if ((edge == 1 || edge == 3)) {
|
||||
for (int i = 0; i < Hlvl_L * Wlvl_L; ++i) {
|
||||
@@ -2272,7 +2276,7 @@ bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(wavelet_decomposition& Wavelet
|
||||
}
|
||||
}
|
||||
|
||||
if (edge == 2 || edge == 4 || edge == 5) {
|
||||
if (edge == 2 || edge == 4 || edge == 5 || edge == 6) {
|
||||
for (int i = 0; i < Hlvl_L * Wlvl_L; ++i) {
|
||||
nvl[i] = vari[lvl] * SQR(noisevarlum[i]);
|
||||
}
|
||||
@@ -2550,6 +2554,10 @@ bool ImProcFunctions::WaveletDenoiseAllL(wavelet_decomposition& WaveletCoeffs_L,
|
||||
maxlvl = 4; //for refine denoise edge wavelet
|
||||
}
|
||||
|
||||
if (edge == 6) {
|
||||
maxlvl = 6; //for wavelet denoise
|
||||
}
|
||||
|
||||
if (edge == 2) {
|
||||
maxlvl = 7; //for locallab denoise
|
||||
}
|
||||
@@ -2565,7 +2573,6 @@ bool ImProcFunctions::WaveletDenoiseAllL(wavelet_decomposition& WaveletCoeffs_L,
|
||||
maxHL = WaveletCoeffs_L.level_H(lvl);
|
||||
}
|
||||
}
|
||||
|
||||
bool memoryAllocationFailed = false;
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
|
||||
@@ -2690,15 +2697,15 @@ void ImProcFunctions::ShrinkAllL(wavelet_decomposition& WaveletCoeffs_L, float *
|
||||
nvl[i] = 0.f;
|
||||
}
|
||||
|
||||
if ((edge == 1 || edge == 2 || edge == 3 || edge == 5) && vari) {
|
||||
if ((edge == 1 || edge == 2 || edge == 3 || edge == 5 || edge == 6) && vari) {
|
||||
// nvl = blurBuffer; // we need one buffer, but fortunately we don't have to allocate a new one because we can use blurBuffer
|
||||
if ((edge == 1 || edge == 3)) {
|
||||
for (int i = 0; i < W_L * H_L; ++i) {
|
||||
nvl[i] = vari[level]; //* SQR(1.f + 4.f * noisevarchrom[p]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (edge == 2 || edge == 4 || edge == 5) {
|
||||
if (edge == 2 || edge == 4 || edge == 5 || edge == 6) {
|
||||
for (int i = 0; i < W_L * H_L; ++i) {
|
||||
nvl[i] = vari[level] * SQR(noisevarlum[i]);
|
||||
}
|
||||
|
Reference in New Issue
Block a user