add Laplacian threshold to mask Blur
This commit is contained in:
parent
7bafb53618
commit
d0e32b5682
@ -1000,6 +1000,7 @@ HISTORY_MSG_759;Local - Exp Laplacian mask
|
||||
HISTORY_MSG_760;Local - Color Laplacian mask
|
||||
HISTORY_MSG_761;Local - SH Laplacian mask
|
||||
HISTORY_MSG_762;Local - cbdl Laplacian mask
|
||||
HISTORY_MSG_763;Local - Blur Laplacian mask
|
||||
HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors
|
||||
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
|
||||
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction
|
||||
|
@ -6893,6 +6893,41 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
|
||||
}
|
||||
|
||||
|
||||
float lap = params->locallab.spots.at(sp).lapmaskbl;
|
||||
|
||||
if (lap > 0.f && (lp.enablMask || lp.showmaskblmet == 3)) {
|
||||
float *datain = new float[GH * GW];
|
||||
float *data_tmp = new float[GH * GW];
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int y = 0; y < GH; y++) {
|
||||
for (int x = 0; x < GW; x++) {
|
||||
datain[y * GW + x] = bufmaskblurbl->L[y][x];
|
||||
}
|
||||
}
|
||||
|
||||
(void) discrete_laplacian_threshold(data_tmp, datain, GW, GH, 200.f * lap);
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int y = 0; y < GH; y++) {
|
||||
for (int x = 0; x < GW; x++) {
|
||||
bufmaskblurbl->L[y][x] = data_tmp[y * GW + x];
|
||||
}
|
||||
}
|
||||
|
||||
delete [] datain;
|
||||
delete [] data_tmp;
|
||||
|
||||
}
|
||||
|
||||
|
||||
float radiusb = 1.f / sk;
|
||||
|
||||
if (lp.showmaskblmet == 2 || lp.enablMask || lp.showmaskblmet == 3 || lp.showmaskblmet == 4) {
|
||||
|
@ -789,6 +789,7 @@ enum ProcEventCode {
|
||||
Evlocallablapmaskcol = 759,
|
||||
EvlocallablapmaskSH = 760,
|
||||
Evlocallablapmaskcb = 761,
|
||||
Evlocallablapmaskbl = 762,
|
||||
NUMOFEVENTS
|
||||
};
|
||||
|
||||
|
@ -2554,10 +2554,11 @@ LocallabParams::LocallabSpot::LocallabSpot() :
|
||||
HHmaskblcurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35},
|
||||
enablMask(false),
|
||||
blendmaskbl(0),
|
||||
radmaskbl(10.0),
|
||||
radmaskbl(0.0),
|
||||
chromaskbl(0.0),
|
||||
gammaskbl(1.0),
|
||||
slomaskbl(0.0),
|
||||
lapmaskbl(0.0),
|
||||
// Tone Mapping
|
||||
exptonemap(false),
|
||||
stren(0.5),
|
||||
@ -2833,6 +2834,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
|
||||
&& chromaskbl == other.chromaskbl
|
||||
&& gammaskbl == other.gammaskbl
|
||||
&& slomaskbl == other.slomaskbl
|
||||
&& lapmaskbl == other.lapmaskbl
|
||||
// Tone Mapping
|
||||
&& exptonemap == other.exptonemap
|
||||
&& stren == other.stren
|
||||
@ -4094,6 +4096,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).chromaskbl, "Locallab", "Chromaskbl_" + std::to_string(i), spot.chromaskbl, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).gammaskbl, "Locallab", "Gammaskbl_" + std::to_string(i), spot.gammaskbl, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).slomaskbl, "Locallab", "Slomaskbl_" + std::to_string(i), spot.slomaskbl, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).lapmaskbl, "Locallab", "Lapmaskbl_" + std::to_string(i), spot.lapmaskbl, keyFile);
|
||||
// Tone Mapping
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).exptonemap, "Locallab", "Exptonemap_" + std::to_string(i), spot.exptonemap, keyFile);
|
||||
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).stren, "Locallab", "Stren_" + std::to_string(i), spot.stren, keyFile);
|
||||
@ -5482,6 +5485,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
|
||||
assignFromKeyfile(keyFile, "Locallab", "Chromaskbl_" + std::to_string(i), pedited, spot.chromaskbl, spotEdited.chromaskbl);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Gammaskbl_" + std::to_string(i), pedited, spot.gammaskbl, spotEdited.gammaskbl);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Slomaskbl_" + std::to_string(i), pedited, spot.slomaskbl, spotEdited.slomaskbl);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Lapmaskbl_" + std::to_string(i), pedited, spot.lapmaskbl, spotEdited.lapmaskbl);
|
||||
// Tone Mapping
|
||||
assignFromKeyfile(keyFile, "Locallab", "Exptonemap_" + std::to_string(i), pedited, spot.exptonemap, spotEdited.exptonemap);
|
||||
assignFromKeyfile(keyFile, "Locallab", "Stren_" + std::to_string(i), pedited, spot.stren, spotEdited.stren);
|
||||
|
@ -1107,6 +1107,7 @@ struct LocallabParams {
|
||||
double chromaskbl;
|
||||
double gammaskbl;
|
||||
double slomaskbl;
|
||||
double lapmaskbl;
|
||||
// Tone Mapping
|
||||
bool exptonemap;
|
||||
double stren;
|
||||
|
@ -788,7 +788,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
LUMINANCECURVE, //Evlocallablapmaskexp
|
||||
LUMINANCECURVE, //Evlocallablapmaskcol
|
||||
LUMINANCECURVE, //EvlocallablapmaskSH
|
||||
LUMINANCECURVE //Evlocallablapmaskcb
|
||||
LUMINANCECURVE, //Evlocallablapmaskcb
|
||||
LUMINANCECURVE //Evlocallablapmaskbl
|
||||
};
|
||||
|
||||
namespace rtengine
|
||||
|
@ -249,10 +249,11 @@ Locallab::Locallab():
|
||||
epsbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_EPSBL"), 1, 500, 1, 10))),
|
||||
sensibn(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIBN"), 0, 100, 1, 40))),
|
||||
blendmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
|
||||
radmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 10.))),
|
||||
radmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
|
||||
chromaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
|
||||
gammaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.05, 5.0, 0.01, 1.))),
|
||||
slomaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))),
|
||||
lapmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
|
||||
// Tone Mapping
|
||||
stren(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STREN"), -0.5, 2.0, 0.01, 0.5))),
|
||||
gamma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAM"), 0.4, 4.0, 0.11, 1.0))),
|
||||
@ -1834,6 +1835,10 @@ Locallab::Locallab():
|
||||
|
||||
maskcbCurveEditorG->curveListComplete();
|
||||
|
||||
if (showtooltip) {
|
||||
radmaskcb->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
|
||||
lapmaskcb->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
|
||||
}
|
||||
|
||||
|
||||
ToolParamBlock* const cbdlBox = Gtk::manage(new ToolParamBlock());
|
||||
@ -1981,6 +1986,11 @@ Locallab::Locallab():
|
||||
|
||||
showmaskblMethodConn = showmaskblMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskblMethodChanged));
|
||||
|
||||
if (showtooltip) {
|
||||
radmaskbl->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
|
||||
lapmaskbl->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
|
||||
}
|
||||
|
||||
medMethod->append(M("TP_DIRPYRDENOISE_TYPE_3X3"));
|
||||
medMethod->append(M("TP_DIRPYRDENOISE_TYPE_5X5"));
|
||||
medMethod->append(M("TP_DIRPYRDENOISE_TYPE_7X7"));
|
||||
@ -2011,6 +2021,7 @@ Locallab::Locallab():
|
||||
chromaskbl->setAdjusterListener(this);
|
||||
gammaskbl->setAdjusterListener(this);
|
||||
slomaskbl->setAdjusterListener(this);
|
||||
lapmaskbl->setAdjusterListener(this);
|
||||
|
||||
ToolParamBlock* const maskblBox = Gtk::manage(new ToolParamBlock());
|
||||
maskblBox->pack_start(*showmaskblMethod, Gtk::PACK_SHRINK, 4);
|
||||
@ -2018,6 +2029,7 @@ Locallab::Locallab():
|
||||
maskblBox->pack_start(*maskblCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
|
||||
maskblBox->pack_start(*blendmaskbl, Gtk::PACK_SHRINK, 0);
|
||||
maskblBox->pack_start(*radmaskbl, Gtk::PACK_SHRINK, 0);
|
||||
maskblBox->pack_start(*lapmaskbl, Gtk::PACK_SHRINK, 0);
|
||||
maskblBox->pack_start(*chromaskbl, Gtk::PACK_SHRINK, 0);
|
||||
maskblBox->pack_start(*gammaskbl, Gtk::PACK_SHRINK, 0);
|
||||
maskblBox->pack_start(*slomaskbl, Gtk::PACK_SHRINK, 0);
|
||||
@ -3191,6 +3203,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
|
||||
pp->locallab.spots.at(pp->locallab.selspot).chromaskbl = chromaskbl->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).gammaskbl = gammaskbl->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).slomaskbl = slomaskbl->getValue();
|
||||
pp->locallab.spots.at(pp->locallab.selspot).lapmaskbl = lapmaskbl->getValue();
|
||||
|
||||
// Tone Mapping
|
||||
pp->locallab.spots.at(pp->locallab.selspot).exptonemap = exptonemap->getEnabled();
|
||||
@ -3483,6 +3496,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
|
||||
pe->locallab.spots.at(pp->locallab.selspot).chromaskbl = pe->locallab.spots.at(pp->locallab.selspot).chromaskbl || chromaskbl->getEditedState();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).gammaskbl = pe->locallab.spots.at(pp->locallab.selspot).gammaskbl || gammaskbl->getEditedState();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).slomaskbl = pe->locallab.spots.at(pp->locallab.selspot).slomaskbl || slomaskbl->getEditedState();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).lapmaskbl = pe->locallab.spots.at(pp->locallab.selspot).lapmaskbl || lapmaskbl->getEditedState();
|
||||
// Tone Mapping
|
||||
pe->locallab.spots.at(pp->locallab.selspot).exptonemap = pe->locallab.spots.at(pp->locallab.selspot).activlum || !exptonemap->get_inconsistent();
|
||||
pe->locallab.spots.at(pp->locallab.selspot).stren = pe->locallab.spots.at(pp->locallab.selspot).stren || stren->getEditedState();
|
||||
@ -3762,6 +3776,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).chromaskbl = pedited->locallab.spots.at(pp->locallab.selspot).chromaskbl || chromaskbl->getEditedState();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).gammaskbl = pedited->locallab.spots.at(pp->locallab.selspot).gammaskbl || gammaskbl->getEditedState();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).slomaskbl = pedited->locallab.spots.at(pp->locallab.selspot).slomaskbl || slomaskbl->getEditedState();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).lapmaskbl = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskbl || lapmaskbl->getEditedState();
|
||||
// Tone Mapping
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).exptonemap = pedited->locallab.spots.at(pp->locallab.selspot).exptonemap || !exptonemap->get_inconsistent();
|
||||
pedited->locallab.spots.at(pp->locallab.selspot).stren = pedited->locallab.spots.at(pp->locallab.selspot).stren || stren->getEditedState();
|
||||
@ -5590,6 +5605,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe
|
||||
chromaskbl->setDefault(defSpot->chromaskbl);
|
||||
gammaskbl->setDefault(defSpot->gammaskbl);
|
||||
slomaskbl->setDefault(defSpot->slomaskbl);
|
||||
lapmaskbl->setDefault(defSpot->lapmaskbl);
|
||||
// Tone Mapping
|
||||
stren->setDefault(defSpot->stren);
|
||||
gamma->setDefault(defSpot->gamma);
|
||||
@ -5761,6 +5777,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe
|
||||
chromaskbl->setDefaultEditedState(Irrelevant);
|
||||
gammaskbl->setDefaultEditedState(Irrelevant);
|
||||
slomaskbl->setDefaultEditedState(Irrelevant);
|
||||
lapmaskbl->setDefaultEditedState(Irrelevant);
|
||||
// Tone Mapping
|
||||
stren->setDefaultEditedState(Irrelevant);
|
||||
gamma->setDefaultEditedState(Irrelevant);
|
||||
@ -5936,6 +5953,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe
|
||||
chromaskbl->setDefaultEditedState(defSpotState->chromaskbl ? Edited : UnEdited);
|
||||
gammaskbl->setDefaultEditedState(defSpotState->gammaskbl ? Edited : UnEdited);
|
||||
slomaskbl->setDefaultEditedState(defSpotState->slomaskbl ? Edited : UnEdited);
|
||||
lapmaskbl->setDefaultEditedState(defSpotState->lapmaskbl ? Edited : UnEdited);
|
||||
// Tone Mapping
|
||||
stren->setDefaultEditedState(defSpotState->stren ? Edited : UnEdited);
|
||||
gamma->setDefaultEditedState(defSpotState->gamma ? Edited : UnEdited);
|
||||
@ -6535,6 +6553,12 @@ void Locallab::adjusterChanged(Adjuster * a, double newval)
|
||||
}
|
||||
}
|
||||
|
||||
if (a == lapmaskbl) {
|
||||
if (listener) {
|
||||
listener->panelChanged(Evlocallablapmaskbl, lapmaskbl->getTextValue());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Tone Mapping
|
||||
@ -7169,6 +7193,7 @@ void Locallab::setBatchMode(bool batchMode)
|
||||
chromaskbl->showEditedCB();
|
||||
gammaskbl->showEditedCB();
|
||||
slomaskbl->showEditedCB();
|
||||
lapmaskbl->showEditedCB();
|
||||
// Tone Mapping
|
||||
stren->showEditedCB();
|
||||
gamma->showEditedCB();
|
||||
@ -7783,6 +7808,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
|
||||
chromaskbl->setValue(pp->locallab.spots.at(index).chromaskbl);
|
||||
gammaskbl->setValue(pp->locallab.spots.at(index).gammaskbl);
|
||||
slomaskbl->setValue(pp->locallab.spots.at(index).slomaskbl);
|
||||
lapmaskbl->setValue(pp->locallab.spots.at(index).lapmaskbl);
|
||||
|
||||
// Tone Mapping
|
||||
exptonemap->setEnabled(pp->locallab.spots.at(index).exptonemap);
|
||||
@ -8120,6 +8146,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
|
||||
chromaskbl->setEditedState(spotState->chromaskbl ? Edited : UnEdited);
|
||||
gammaskbl->setEditedState(spotState->gammaskbl ? Edited : UnEdited);
|
||||
slomaskbl->setEditedState(spotState->slomaskbl ? Edited : UnEdited);
|
||||
lapmaskbl->setEditedState(spotState->lapmaskbl ? Edited : UnEdited);
|
||||
|
||||
// Tone Mapping
|
||||
exptonemap->set_inconsistent(!spotState->exptonemap);
|
||||
|
@ -202,6 +202,7 @@ private:
|
||||
Adjuster* const chromaskbl;
|
||||
Adjuster* const gammaskbl;
|
||||
Adjuster* const slomaskbl;
|
||||
Adjuster* const lapmaskbl;
|
||||
// Tone Mapping
|
||||
Adjuster* const stren;
|
||||
Adjuster* const gamma;
|
||||
|
@ -1099,6 +1099,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
|
||||
locallab.spots.at(j).chromaskbl = locallab.spots.at(j).chromaskbl && pSpot.chromaskbl == otherSpot.chromaskbl;
|
||||
locallab.spots.at(j).gammaskbl = locallab.spots.at(j).gammaskbl && pSpot.gammaskbl == otherSpot.gammaskbl;
|
||||
locallab.spots.at(j).slomaskbl = locallab.spots.at(j).slomaskbl && pSpot.slomaskbl == otherSpot.slomaskbl;
|
||||
locallab.spots.at(j).lapmaskbl = locallab.spots.at(j).lapmaskbl && pSpot.lapmaskbl == otherSpot.lapmaskbl;
|
||||
// Tone Mapping
|
||||
locallab.spots.at(j).exptonemap = locallab.spots.at(j).exptonemap && pSpot.exptonemap == otherSpot.exptonemap;
|
||||
locallab.spots.at(j).stren = locallab.spots.at(j).stren && pSpot.stren == otherSpot.stren;
|
||||
@ -3259,6 +3260,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
|
||||
toEdit.locallab.spots.at(i).slomaskbl = mods.locallab.spots.at(i).slomaskbl;
|
||||
}
|
||||
|
||||
if (locallab.spots.at(i).lapmaskbl) {
|
||||
toEdit.locallab.spots.at(i).lapmaskbl = mods.locallab.spots.at(i).lapmaskbl;
|
||||
}
|
||||
|
||||
// Tone Mapping
|
||||
if (locallab.spots.at(i).exptonemap) {
|
||||
toEdit.locallab.spots.at(i).exptonemap = mods.locallab.spots.at(i).exptonemap;
|
||||
@ -4832,6 +4837,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
|
||||
chromaskbl(v),
|
||||
gammaskbl(v),
|
||||
slomaskbl(v),
|
||||
lapmaskbl(v),
|
||||
// Tone Mapping
|
||||
exptonemap(v),
|
||||
stren(v),
|
||||
@ -5104,6 +5110,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
|
||||
chromaskbl = v;
|
||||
gammaskbl = v;
|
||||
slomaskbl = v;
|
||||
lapmaskbl = v;
|
||||
// Tone Mapping
|
||||
exptonemap = v;
|
||||
stren = v;
|
||||
|
@ -517,6 +517,7 @@ public:
|
||||
bool chromaskbl;
|
||||
bool gammaskbl;
|
||||
bool slomaskbl;
|
||||
bool lapmaskbl;
|
||||
// Tone Mapping
|
||||
bool exptonemap;
|
||||
bool stren;
|
||||
|
Loading…
x
Reference in New Issue
Block a user