Improvment Denoise -- how to deal with yellow noise and others quality improvment issue2131

This commit is contained in:
jdc
2013-12-21 07:46:28 +01:00
parent a90ae2a455
commit c3e790563f
13 changed files with 200 additions and 96 deletions

View File

@@ -84,6 +84,11 @@ DirPyrDenoise::DirPyrDenoise () : Gtk::VBox(), FoldableToolPanel(this) {
// perform->show();
gamma->show();
// perform->set_active (true);
enhance = Gtk::manage (new Gtk::CheckButton (M("TP_DIRPYRDENOISE_ENH")));
enhance->set_active (false);
enhance->set_tooltip_text (M("TP_DIRPYRDENOISE_ENH_TOOLTIP"));
pack_start (*luma);
pack_start (*Ldetail);
@@ -92,7 +97,10 @@ DirPyrDenoise::DirPyrDenoise () : Gtk::VBox(), FoldableToolPanel(this) {
pack_start (*bluechro);
pack_start (*gamma);
pack_start (*enhance);
// pack_start (*perform);
enhanConn = enhance->signal_toggled().connect( sigc::mem_fun(*this, &DirPyrDenoise::enhanceChanged) );
}
@@ -119,14 +127,17 @@ void DirPyrDenoise::read (const ProcParams* pp, const ParamsEdited* pedited) {
gamma->setEditedState (pedited->dirpyrDenoise.gamma ? Edited : UnEdited);
enabled->set_inconsistent (!pedited->dirpyrDenoise.enabled);
enhance->set_inconsistent (!pedited->dirpyrDenoise.enhance);
// perform->set_inconsistent (!pedited->dirpyrDenoise.perform);
}
// perfconn.block (true);
enabled->set_active (pp->dirpyrDenoise.enabled);
enhance->set_active (pp->dirpyrDenoise.enhance);
// perform->set_active (pp->dirpyrDenoise.perform);
// perfconn.block (false);
lastEnabled = pp->dirpyrDenoise.enabled;
lastenhance = pp->dirpyrDenoise.enhance;
// lastperform = pp->dirpyrDenoise.perform;
luma->setValue (pp->dirpyrDenoise.luma);
Ldetail->setValue (pp->dirpyrDenoise.Ldetail);
@@ -150,6 +161,7 @@ void DirPyrDenoise::write (ProcParams* pp, ParamsEdited* pedited) {
pp->dirpyrDenoise.bluechro = bluechro->getValue ();
pp->dirpyrDenoise.gamma = gamma->getValue ();
pp->dirpyrDenoise.enabled = enabled->get_active();
pp->dirpyrDenoise.enhance = enhance->get_active();
// pp->dirpyrDenoise.perform = perform->get_active();
if (pedited) {
@@ -161,6 +173,7 @@ void DirPyrDenoise::write (ProcParams* pp, ParamsEdited* pedited) {
pedited->dirpyrDenoise.bluechro = bluechro->getEditedState ();
pedited->dirpyrDenoise.gamma = gamma->getEditedState ();
pedited->dirpyrDenoise.enabled = !enabled->get_inconsistent();
pedited->dirpyrDenoise.enhance = !enhance->get_inconsistent();
// pedited->dirpyrDenoise.perform = !perform->get_inconsistent();
}
if (dmethod->get_active_row_number()==0)
@@ -248,6 +261,30 @@ void DirPyrDenoise::enabledChanged () {
listener->panelChanged (EvDPDNEnabled, M("GENERAL_DISABLED"));
}
}
void DirPyrDenoise::enhanceChanged () {
if (batchMode) {
if (enhance->get_inconsistent()) {
enhance->set_inconsistent (false);
enhanConn.block (true);
enhance->set_active (false);
enhanConn.block (false);
}
else if (lastenhance)
enhance->set_inconsistent (true);
lastenhance = enhance->get_active ();
}
if (listener) {
if (enhance->get_active ())
listener->panelChanged (EvDPDNenhance, M("GENERAL_ENABLED"));
else
listener->panelChanged (EvDPDNenhance, M("GENERAL_DISABLED"));
}
}
/*
void DirPyrDenoise::perform_toggled () {

View File

@@ -36,6 +36,10 @@ class DirPyrDenoise : public Gtk::VBox, public AdjusterListener, public Foldable
Gtk::CheckButton* enabled;
bool lastEnabled;
sigc::connection enaConn;
Gtk::CheckButton* enhance;
bool lastenhance;
sigc::connection enhanConn;
// Gtk::CheckButton* perform;
// bool lastperform;
// sigc::connection perfconn;
@@ -54,6 +58,7 @@ class DirPyrDenoise : public Gtk::VBox, public AdjusterListener, public Foldable
void adjusterChanged (Adjuster* a, double newval);
void enabledChanged ();
void enhanceChanged ();
// void perform_toggled ();
void dmethodChanged ();

View File

@@ -152,6 +152,7 @@ void ParamsEdited::set (bool v) {
impulseDenoise.enabled = v;
impulseDenoise.thresh = v;
dirpyrDenoise.enabled = v;
dirpyrDenoise.enhance = v;
// dirpyrDenoise.perform = v;
dirpyrDenoise.luma = v;
dirpyrDenoise.Ldetail = v;
@@ -433,6 +434,7 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
impulseDenoise.thresh = impulseDenoise.thresh && p.impulseDenoise.thresh == other.impulseDenoise.thresh;
dirpyrDenoise.enabled = dirpyrDenoise.enabled && p.dirpyrDenoise.enabled == other.dirpyrDenoise.enabled;
dirpyrDenoise.enhance = dirpyrDenoise.enhance && p.dirpyrDenoise.enhance == other.dirpyrDenoise.enhance;
// dirpyrDenoise.perform = dirpyrDenoise.perform && p.dirpyrDenoise.perform == other.dirpyrDenoise.perform;
dirpyrDenoise.luma = dirpyrDenoise.luma && p.dirpyrDenoise.luma == other.dirpyrDenoise.luma;
dirpyrDenoise.Ldetail = dirpyrDenoise.Ldetail && p.dirpyrDenoise.Ldetail == other.dirpyrDenoise.Ldetail;
@@ -714,6 +716,7 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
if (impulseDenoise.thresh) toEdit.impulseDenoise.thresh = mods.impulseDenoise.thresh;
if (dirpyrDenoise.enabled) toEdit.dirpyrDenoise.enabled = mods.dirpyrDenoise.enabled;
if (dirpyrDenoise.enhance) toEdit.dirpyrDenoise.enhance = mods.dirpyrDenoise.enhance;
if (dirpyrDenoise.luma) toEdit.dirpyrDenoise.luma = dontforceSet && options.baBehav[ADDSET_DIRPYRDN_LUMA] ? toEdit.dirpyrDenoise.luma + mods.dirpyrDenoise.luma : mods.dirpyrDenoise.luma;
if (dirpyrDenoise.Ldetail) toEdit.dirpyrDenoise.Ldetail = dontforceSet && options.baBehav[ADDSET_DIRPYRDN_LUMDET] ? toEdit.dirpyrDenoise.Ldetail + mods.dirpyrDenoise.Ldetail : mods.dirpyrDenoise.Ldetail;
if (dirpyrDenoise.chroma) toEdit.dirpyrDenoise.chroma = dontforceSet && options.baBehav[ADDSET_DIRPYRDN_CHROMA] ? toEdit.dirpyrDenoise.chroma + mods.dirpyrDenoise.chroma : mods.dirpyrDenoise.chroma;

View File

@@ -233,6 +233,7 @@ class DirPyrDenoiseParamsEdited {
public:
bool enabled;
bool enhance;
bool Ldetail;
bool luma;
bool chroma;