Add PDE Fattal to Exposure PDE - thanks to Alberto

This commit is contained in:
Desmis
2019-09-08 11:31:05 +02:00
parent 0319a93496
commit 0730222cf7
16 changed files with 221 additions and 55 deletions

View File

@@ -1047,24 +1047,23 @@ inline int find_fast_dim (int dim)
} // namespace
void ImProcFunctions::ToneMapFattal02 (Imagefloat *rgb)
void ImProcFunctions::ToneMapFattal02 (Imagefloat *rgb, const FattalToneMappingParams &fatParams)
{
if (!params->fattal.enabled) {
if (!fatParams.enabled) {
return;
}
BENCHFUN
const int detail_level = 3;
float alpha = 1.f;
if (params->fattal.threshold < 0) {
alpha += (params->fattal.threshold * 0.9f) / 100.f;
} else if (params->fattal.threshold > 0) {
alpha += params->fattal.threshold / 100.f;
if (fatParams.threshold < 0) {
alpha += (fatParams.threshold * 0.9f) / 100.f;
} else if (fatParams.threshold > 0) {
alpha += fatParams.threshold / 100.f;
}
float beta = 1.f - (params->fattal.amount * 0.3f) / 100.f;
float beta = 1.f - (fatParams.amount * 0.3f) / 100.f;
// sanity check
if (alpha <= 0 || beta <= 0) {
@@ -1092,7 +1091,7 @@ void ImProcFunctions::ToneMapFattal02 (Imagefloat *rgb)
}
float oldMedian;
const float percentile = float(LIM(params->fattal.anchor, 1, 100)) / 100.f;
const float percentile = float(LIM(fatParams.anchor, 1, 100)) / 100.f;
findMinMaxPercentile (Yr.data(), Yr.getRows() * Yr.getCols(), percentile, oldMedian, percentile, oldMedian, multiThread);
// median filter on the deep shadows, to avoid boosting noise
// because w2 >= w and h2 >= h, we can use the L buffer as temporary buffer for Median_Denoise()
@@ -1127,8 +1126,8 @@ void ImProcFunctions::ToneMapFattal02 (Imagefloat *rgb)
std::cout << "ToneMapFattal02: alpha = " << alpha << ", beta = " << beta
<< ", detail_level = " << detail_level << std::endl;
}
rescale_nearest (Yr, L, multiThread);
tmo_fattal02 (w2, h2, L, L, alpha, beta, noise, detail_level, multiThread);
const float hr = float(h2) / float(h);
@@ -1158,6 +1157,7 @@ void ImProcFunctions::ToneMapFattal02 (Imagefloat *rgb)
assert(std::isfinite(rgb->b(y, x)));
}
}
}