LA Log encoding clamp values
This commit is contained in:
parent
aae90a0ad3
commit
ca5d6e44ee
@ -1553,6 +1553,7 @@ void Color::calcGamma (double pwr, double ts, GammaValues &gamma)
|
|||||||
gamma[4] = g[4];
|
gamma[4] = g[4];
|
||||||
gamma[5] = g[5];
|
gamma[5] = g[5];
|
||||||
gamma[6] = 0.;
|
gamma[6] = 0.;
|
||||||
|
printf("g0=%f g1=%f g2=%f g3=%f g4=%f g5=%f\n", g[0], g[1], g[2], g[3], g[4], g[5] );
|
||||||
}
|
}
|
||||||
void Color::gammaf2lut (LUTf &gammacurve, float gamma, float start, float slope, float divisor, float factor)
|
void Color::gammaf2lut (LUTf &gammacurve, float gamma, float start, float slope, float divisor, float factor)
|
||||||
{
|
{
|
||||||
|
@ -1570,12 +1570,14 @@ void ImProcFunctions::log_encode(Imagefloat *rgb, struct local_params & lp, bool
|
|||||||
// BENCHFUN
|
// BENCHFUN
|
||||||
const float gray = lp.sourcegray / 100.f;
|
const float gray = lp.sourcegray / 100.f;
|
||||||
const float shadows_range = lp.blackev;
|
const float shadows_range = lp.blackev;
|
||||||
|
/*
|
||||||
if(lp.whiteev < 1.5f) {
|
if(lp.whiteev < 1.5f) {
|
||||||
lp.whiteev = 1.5f;
|
lp.whiteev = 1.5f;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
float dynamic_range = lp.whiteev - lp.blackev;
|
float dynamic_range = lp.whiteev - lp.blackev;
|
||||||
if (dynamic_range < 1.f) {
|
if (dynamic_range < 0.5f) {
|
||||||
dynamic_range = 1.f;
|
dynamic_range = 0.5f;
|
||||||
}
|
}
|
||||||
const float noise = pow_F(2.f, -16.f);
|
const float noise = pow_F(2.f, -16.f);
|
||||||
const float log2 = xlogf(lp.baselog);
|
const float log2 = xlogf(lp.baselog);
|
||||||
@ -1654,9 +1656,14 @@ void ImProcFunctions::log_encode(Imagefloat *rgb, struct local_params & lp, bool
|
|||||||
if (m > noise) {
|
if (m > noise) {
|
||||||
float mm = apply(m);
|
float mm = apply(m);
|
||||||
float f = mm / m;
|
float f = mm / m;
|
||||||
|
f = min(f, 1000000.f);
|
||||||
|
|
||||||
r *= f;
|
r *= f;
|
||||||
b *= f;
|
b *= f;
|
||||||
g *= f;
|
g *= f;
|
||||||
|
r = CLIP(r);
|
||||||
|
g = CLIP(g);
|
||||||
|
b = CLIP(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(r == r);
|
assert(r == r);
|
||||||
@ -1710,13 +1717,18 @@ void ImProcFunctions::log_encode(Imagefloat *rgb, struct local_params & lp, bool
|
|||||||
// float t2 = norm(r, g, b);
|
// float t2 = norm(r, g, b);
|
||||||
float f2 = apply(t2) / t2;
|
float f2 = apply(t2) / t2;
|
||||||
f = intp(blend, f, f2);
|
f = intp(blend, f, f2);
|
||||||
assert(std::isfinite(f));
|
f = min(f, 1000000.f);
|
||||||
|
|
||||||
|
// assert(std::isfinite(f));
|
||||||
r *= f;
|
r *= f;
|
||||||
g *= f;
|
g *= f;
|
||||||
b *= f;
|
b *= f;
|
||||||
assert(std::isfinite(r));
|
r = CLIP(r);
|
||||||
assert(std::isfinite(g));
|
g = CLIP(g);
|
||||||
assert(std::isfinite(b));
|
b = CLIP(b);
|
||||||
|
// assert(std::isfinite(r));
|
||||||
|
// assert(std::isfinite(g));
|
||||||
|
// assert(std::isfinite(b));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3611,6 +3611,7 @@ LocallabShadow::LocallabShadow():
|
|||||||
blurSHde->setAdjusterListener(this);
|
blurSHde->setAdjusterListener(this);
|
||||||
|
|
||||||
gamSH->setAdjusterListener(this);
|
gamSH->setAdjusterListener(this);
|
||||||
|
sloSH->setLogScale(16, 0);
|
||||||
|
|
||||||
sloSH->setAdjusterListener(this);
|
sloSH->setAdjusterListener(this);
|
||||||
|
|
||||||
|
@ -4655,13 +4655,13 @@ LocallabLog::LocallabLog():
|
|||||||
autocompute(Gtk::manage(new Gtk::ToggleButton(M("TP_LOCALLAB_LOGAUTO")))),
|
autocompute(Gtk::manage(new Gtk::ToggleButton(M("TP_LOCALLAB_LOGAUTO")))),
|
||||||
logPFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGPFRA")))),
|
logPFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGPFRA")))),
|
||||||
blackEv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLACK_EV"), -16.0, 0.0, 0.1, -5.0))),
|
blackEv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLACK_EV"), -16.0, 0.0, 0.1, -5.0))),
|
||||||
whiteEv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WHITE_EV"), 1.5, 32.0, 0.1, 10.0))),
|
whiteEv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WHITE_EV"), 0., 32.0, 0.1, 10.0))),
|
||||||
fullimage(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FULLIMAGE")))),
|
fullimage(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FULLIMAGE")))),
|
||||||
Autogray(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_AUTOGRAY")))),
|
Autogray(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_AUTOGRAY")))),
|
||||||
sourceGray(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOURCE_GRAY"), 1.0, 100.0, 0.1, 10.0))),
|
sourceGray(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOURCE_GRAY"), 1.0, 100.0, 0.1, 10.0))),
|
||||||
targetGray(Gtk::manage(new Adjuster(M("TP_LOCALLAB_TARGET_GRAY"), 5.0, 80.0, 0.1, 18.0))),
|
targetGray(Gtk::manage(new Adjuster(M("TP_LOCALLAB_TARGET_GRAY"), 5.0, 80.0, 0.1, 18.0))),
|
||||||
detail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAIL"), 0., 1., 0.01, 0.6))),
|
detail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAIL"), 0., 1., 0.01, 0.6))),
|
||||||
baselog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BASELOG"), 1.4, 8., 0.05, 2., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))),
|
baselog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BASELOG"), 1.3, 8., 0.05, 2., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))),
|
||||||
sensilog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))),
|
sensilog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))),
|
||||||
strlog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -2.0, 2.0, 0.05, 0.))),
|
strlog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -2.0, 2.0, 0.05, 0.))),
|
||||||
anglog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.)))
|
anglog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.)))
|
||||||
@ -4669,10 +4669,10 @@ LocallabLog::LocallabLog():
|
|||||||
// Parameter Log encoding specific widgets
|
// Parameter Log encoding specific widgets
|
||||||
autoconn = autocompute->signal_toggled().connect(sigc::mem_fun(*this, &LocallabLog::autocomputeToggled));
|
autoconn = autocompute->signal_toggled().connect(sigc::mem_fun(*this, &LocallabLog::autocomputeToggled));
|
||||||
|
|
||||||
// blackEv->setLogScale(2, -8);
|
blackEv->setLogScale(2, -8);
|
||||||
blackEv->setAdjusterListener(this);
|
blackEv->setAdjusterListener(this);
|
||||||
|
|
||||||
// whiteEv->setLogScale(16, 0);
|
whiteEv->setLogScale(16, 0);
|
||||||
whiteEv->setAdjusterListener(this);
|
whiteEv->setAdjusterListener(this);
|
||||||
|
|
||||||
fullimageConn = fullimage->signal_toggled().connect(sigc::mem_fun(*this, &LocallabLog::fullimageChanged));
|
fullimageConn = fullimage->signal_toggled().connect(sigc::mem_fun(*this, &LocallabLog::fullimageChanged));
|
||||||
@ -4802,9 +4802,10 @@ void LocallabLog::read(const rtengine::procparams::ProcParams* pp, const ParamsE
|
|||||||
blackEv->setValue(spot.blackEv);
|
blackEv->setValue(spot.blackEv);
|
||||||
|
|
||||||
whiteEv->setValue(spot.whiteEv);
|
whiteEv->setValue(spot.whiteEv);
|
||||||
if(whiteEv->getValue() < 1.5){
|
/* if(whiteEv->getValue() < 1.5){
|
||||||
whiteEv->setValue(1.5);
|
whiteEv->setValue(1.5);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
fullimage->set_active(spot.fullimage);
|
fullimage->set_active(spot.fullimage);
|
||||||
Autogray->set_active(spot.Autogray);
|
Autogray->set_active(spot.Autogray);
|
||||||
sourceGray->setValue(spot.sourceGray);
|
sourceGray->setValue(spot.sourceGray);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user