diff --git a/rtengine/EdgePreservingDecomposition.cc b/rtengine/EdgePreservingDecomposition.cc index f64caafde..4c56cbb5d 100644 --- a/rtengine/EdgePreservingDecomposition.cc +++ b/rtengine/EdgePreservingDecomposition.cc @@ -941,7 +941,7 @@ void EdgePreservingDecomposition::CompressDynamicRange(float *Source, float Scal cev = xexpf(LVFU(Source[i]) + LVFU(u[i]) * (tempv)) - epsv; uev = xexpf(LVFU(u[i])) - epsv; sourcev = xexpf(LVFU(Source[i])) - epsv; - _mm_storeu_ps( &Source[i], vmaxf(cev + DetailBoostv * (sourcev - uev), ZEROV)); + _mm_storeu_ps( &Source[i], cev + DetailBoostv * (sourcev - uev) ); } } @@ -949,7 +949,7 @@ void EdgePreservingDecomposition::CompressDynamicRange(float *Source, float Scal float ce = xexpf(Source[i] + u[i] * (temp)) - eps; float ue = xexpf(u[i]) - eps; Source[i] = xexpf(Source[i]) - eps; - Source[i] = rtengine::max(ce + DetailBoost * (Source[i] - ue), 0.f); + Source[i] = ce + DetailBoost * (Source[i] - ue); } #else @@ -961,7 +961,7 @@ void EdgePreservingDecomposition::CompressDynamicRange(float *Source, float Scal float ce = xexpf(Source[i] + u[i] * (temp)) - eps; float ue = xexpf(u[i]) - eps; Source[i] = xexpf(Source[i]) - eps; - Source[i] = rtengine::max(ce + DetailBoost * (Source[i] - ue), 0.f); + Source[i] = ce + DetailBoost * (Source[i] - ue); } #endif diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index 31c44efe4..840535e6e 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -5264,6 +5264,10 @@ void ImProcFunctions::EPDToneMap (LabImage *lab, unsigned int Iterates, int skip minL = 0.0f; //Disable the shift if there are no negative numbers. I wish there were just no negative numbers to begin with. } + if (maxL == 0.f) { // avoid division by zero + maxL = 1.f; + } + #pragma omp parallel for for (size_t i = 0; i < N; ++i)