diff --git a/rtdata/languages/default b/rtdata/languages/default
index b3df9c5c8..9ee60ab9b 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -644,6 +644,8 @@ HISTORY_MSG_411;Dehaze strength
HISTORY_MSG_412;Dehaze scales
HISTORY_MSG_413;Dehaze var
HISTORY_MSG_414;Dehaze histogram
+HISTORY_MSG_415;Dehaze enabled
+HISTORY_MSG_416;Dehaze transmission
HISTORY_NEWSNAPSHOT;Add
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
HISTORY_SNAPSHOTS;Snapshots
@@ -1547,15 +1549,29 @@ TP_LABCURVE_LCREDSK;Restrict LC to red and skin-tones
TP_LABCURVE_LCREDSK_TIP;If enabled, the LC Curve affects only red and skin-tones.\nIf disabled, it applies to all tones.
TP_LABCURVE_RSTPROTECTION;Red and skin-tones protection
TP_LABCURVE_RSTPRO_TOOLTIP;Works on the Chromaticity slider and the CC curve.
-TP_LABCURVE_STR;Strength
-TP_LABCURVE_SCAL;Scales
-TP_LABCURVE_NEIGH;Neighboring pixels
-TP_LABCURVE_GAIN;Gain
-TP_LABCURVE_OFFS;Offset
+TP_DEHAZ_STR;Strength
+TP_DEHAZ_STR_TOOLTIP;Mixture in proportion to the original image and that obtained by Retinex algoritm
+TP_DEHAZ_RETIN;Complete Retinex algoritm
+TP_DEHAZ_LAB;Retinex
+TP_DEHAZ_LAB_TOOLTIP;Use all component of Retinex algorihm, to improve results
+TP_DEHAZ_LABEL;Dehaze
+TP_DEHAZ_SCAL;Scales
+TP_DEHAZ_SCAL_TOOLTIP;Low scales increase contrast but give relief effect\nHigh scales can increase noise, but give more natural images
+TP_DEHAZ_NEIGH;Neighboring pixels
+TP_DEHAZ_NEIGH_TOOLTIP;Take into account, neighboring pixels, by Gauss function
+TP_DEHAZ_GAIN;Gain
+TP_DEHAZ_OFFS;Offset
+TP_DEHAZ_GAIN_TOOLTIP;Acts on the transmission in combination with offset, this is very different from others settings\nUsed for black or white pixels, and for better balance the histogram
TP_DEHAZE_LAB;Dehaze
+TP_DEHAZ_CONTEDIT;Histogram equalizer
+TP_DEHAZ_CURVEEDITOR_CD;L=f(L)
+TP_DEHAZ_CURVEEDITOR_CD_TOOLTIP;Correct Raw data, to reduce halos and artifacts
+TP_DEHAZ_TRANSMISSION;Transmission map
TP_DEHAZE_LAB_TOOLTIP;Use Retinex algorithm (Lab) to improve dehaze..defog...
-TP_LABCURVE_VART;Variance
+TP_DEHAZ_VART;Variance
+TP_DEHAZ_VART_TOOLTIP;Low variance increase local contrast and saturation, but can leeds to artifacts
TP_DEHAZE_MET;Dehaze method
+TP_DEHAZ_MET_TOOLTIP;Low :reinforce low light\nUniform :expect to equalize action\nHigh : reinforce high light
TP_DEHAZ_NONE;None
TP_DEHAZ_UNI;Uniform
TP_DEHAZ_LOW;Low
diff --git a/rtengine/imagesource.h b/rtengine/imagesource.h
index 277794a54..0d7c32b52 100644
--- a/rtengine/imagesource.h
+++ b/rtengine/imagesource.h
@@ -69,12 +69,12 @@ public:
virtual int load (Glib::ustring fname, bool batch = false) = 0;
virtual void preprocess (const RAWParams &raw, const LensProfParams &lensProf, const CoarseTransformParams& coarse) {};
virtual void demosaic (const RAWParams &raw) {};
- virtual void dehaz (RAWParams raw, ColorManagementParams cmp, LCurveParams lcur, LUTf & cdcurve, bool dehacontlutili) {};
+ virtual void dehaz (RAWParams raw, ColorManagementParams cmp, DehazParams lcur, LUTf & cdcurve, bool dehacontlutili) {};
virtual void flushRawData () {};
virtual void flushRGB () {};
virtual void HLRecovery_Global (ToneCurveParams hrp) {};
virtual void HLRecovery_inpaint (float** red, float** green, float** blue) {};
- virtual void MSR(LabImage* lab, int width, int height, int skip, LCurveParams lcur) {};
+ virtual void MSR(LabImage* lab, int width, int height, int skip, DehazParams lcur) {};
virtual bool IsrgbSourceModified() = 0; // tracks whether cached rgb output of demosaic has been modified
// virtual void MSR(LabImage* lab, int width, int height, int skip, const LCurveParams &lcur);
diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc
index 00e973e37..fdcb8bf27 100644
--- a/rtengine/improccoordinator.cc
+++ b/rtengine/improccoordinator.cc
@@ -208,6 +208,12 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
OR HLR gets disabled when Color method was selected
*/
// If high detail (=100%) is newly selected, do a demosaic update, since the last was just with FAST
+
+ //I forced dehazmet with toneCurve.hrenabled=true==> probably another way ??
+
+ bool hrdehaz=false;
+ if(!params.toneCurve.hrenabled) if(params.dehaz.enabled) {hrdehaz=true; params.toneCurve.hrenabled=true;}
+
if ( (todo & M_RAW)
|| (!highDetailRawComputed && highDetailNeeded)
|| ( params.toneCurve.hrenabled && params.toneCurve.method != "Color" && imgsrc->IsrgbSourceModified())
@@ -235,13 +241,16 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
}
}
bool dehacontlutili=false;
- CurveFactory::curveDehaContL (dehacontlutili, params.labCurve.cdcurve, cdcurve, 1);
+ CurveFactory::curveDehaContL (dehacontlutili, params.dehaz.cdcurve, cdcurve, 1);
- if (todo & M_INIT || params.labCurve.dehazmet!="none"){
- if(params.labCurve.dehazmet!="none")
- imgsrc->dehaz( params.raw, params.icm, params.labCurve, cdcurve, dehacontlutili);//enabled Dehaze
+ if (todo & M_INIT || params.dehaz.enabled){
+ if(params.dehaz.enabled)
+ imgsrc->dehaz( params.raw, params.icm, params.dehaz, cdcurve, dehacontlutili);//enabled Dehaze
}
+ if(hrdehaz==true) params.toneCurve.hrenabled=false;
+
+
// Updating toneCurve.hrenabled if necessary
// It has to be done there, because the next 'if' statement will use the value computed here
if (todo & M_AUTOEXP) {
diff --git a/rtengine/ipdehaz.cc b/rtengine/ipdehaz.cc
index 10f2a0e4a..230d51bf7 100644
--- a/rtengine/ipdehaz.cc
+++ b/rtengine/ipdehaz.cc
@@ -100,7 +100,7 @@ void mean_stddv( float **dst, float &mean, float &stddv, int W_L, int H_L )
-void RawImageSource::MSR(LabImage* lab, int width, int height, int skip, LCurveParams lcur)
+void RawImageSource::MSR(LabImage* lab, int width, int height, int skip, DehazParams lcur)
{
StopWatch Stop1("MSR");
@@ -120,11 +120,11 @@ StopWatch Stop1("MSR");
float vart = (float)lcur.vart;//variance
vart /=100.f;
int modedehaz;
- if(lcur.dehazmet=="none") modedehaz=-1;//enabled disabled
if(lcur.dehazmet=="uni") modedehaz=0;
if(lcur.dehazmet=="low") modedehaz=1;
if(lcur.dehazmet=="high") modedehaz=2;
- if (modedehaz !=-1) {//enabled
+ // if (modedehaz !=-1) {//enabled
+ if (lcur.enabled) {//enabled
int H_L=height;
int W_L=width;
diff --git a/rtengine/previewimage.cc b/rtengine/previewimage.cc
index 1e0f15593..d68ce3229 100644
--- a/rtengine/previewimage.cc
+++ b/rtengine/previewimage.cc
@@ -140,7 +140,7 @@ PreviewImage::PreviewImage (const Glib::ustring &fname, const Glib::ustring &ext
params.raw.xtranssensor.method = RAWParams::XTransSensor::methodstring[RAWParams::XTransSensor::fast];
rawImage.preprocess(params.raw, params.lensProf, params.coarse);
rawImage.demosaic(params.raw);
- // rawImage.dehaz(params.raw, params.icm, params.labCurve, cdcurve, dehacontlutili);
+ rawImage.dehaz(params.raw, params.icm, params.dehaz, cdcurve, dehacontlutili);
Imagefloat* image = new rtengine::Imagefloat (fw, fh);
rawImage.getImage (wb, TR_NONE, image, pp, params.toneCurve, params.icm, params.raw);
output = new Image8(fw, fh);
diff --git a/rtengine/procevents.h b/rtengine/procevents.h
index 8d9693d28..0c890d11d 100644
--- a/rtengine/procevents.h
+++ b/rtengine/procevents.h
@@ -439,7 +439,11 @@ enum ProcEvent {
EvLstr = 410,
EvLscal = 411,
EvLvart = 412,
- EvLCDCurve = 413,
+ EvLCDCurve = 413,
+ EvDehaztransmission = 414,
+ EvDehazEnabled = 415,
+ EvDehazretinex = 416,
+
NUMOFEVENTS
};
}
diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc
index cf8d34b15..58668db0d 100644
--- a/rtengine/procparams.cc
+++ b/rtengine/procparams.cc
@@ -116,6 +116,65 @@ void CropParams::mapToResized(int resizedWidth, int resizedHeight, int scale, in
}
}
+DehazParams::DehazParams ()
+{
+ setDefaults ();
+}
+
+void DehazParams::getDefaulttransmissionCurve(std::vector &curve)
+{
+ double v[16] = { 0.00, 0.3, 0.35, 0.00,
+ 0.25, 0.5, 0.35, 0.35,
+ 0.70, 0.5, 0.35, 0.35,
+ 1.00, 0.7, 0.00, 0.00
+ };
+ curve.resize(17);
+ curve.at(0 ) = double(FCT_MinMaxCPoints);
+
+ for (size_t i = 1; i < curve.size(); ++i) {
+ curve.at(i) = v[i - 1];
+ }
+}
+
+void DehazParams::getDefaultCDCurve(std::vector &curve)
+{
+ double v[12] = { 0.00, 0.00,
+ 0.185, 0.,
+ 0.235, 0.25,
+ 0.5, 0.5,
+ 0.8, 0.8,
+ 1.0, 1.0,
+ };
+
+ curve.resize(13);
+ curve.at(0) = double(DCT_NURBS);
+
+ for (size_t i = 1; i < curve.size(); ++i) {
+ curve.at(i) = v[i - 1];
+ }
+}
+
+void DehazParams::setDefaults()
+{
+ enabled = false;
+ str = 60;
+ scal = 3;
+ neigh = 80;
+ gain = 100;
+ offs = 0;
+ vart = 125;
+ getDefaulttransmissionCurve(transmissionCurve);
+ getDefaultCDCurve(cdcurve);
+ dehazmet = "uni";
+ retinex = false;
+}
+
+//void DehazParams::getCurves(transmissionCurve &transmissionCurveLUT) const
+//{
+ // opacityCurveLUT.Set(this->opacityCurve);
+//}
+
+
ColorToningParams::ColorToningParams () : hlColSat(60, 80, false), shadowsColSat(80, 208, false)
{
setDefaults();
@@ -882,12 +941,6 @@ void ProcParams::setDefaults ()
labCurve.brightness = 0;
labCurve.contrast = 0;
labCurve.chromaticity = 0;
- labCurve.str = 60;
- labCurve.scal = 3;
- labCurve.neigh = 80;
- labCurve.gain = 100;
- labCurve.offs = 0;
- labCurve.vart = 125;
labCurve.avoidcolorshift = false;
labCurve.lcredsk = true;
labCurve.rstprotection = 0;
@@ -905,14 +958,11 @@ void ProcParams::setDefaults ()
labCurve.lhcurve.push_back(FCT_Linear);
labCurve.hhcurve.clear ();
labCurve.hhcurve.push_back(FCT_Linear);
- labCurve.dehazmet = "none";
labCurve.lccurve.clear ();
labCurve.lccurve.push_back(DCT_Linear);
labCurve.clcurve.clear ();
labCurve.clcurve.push_back(DCT_Linear);
- labCurve.cdcurve.clear ();
- labCurve.cdcurve.push_back(DCT_Linear);
rgbCurves.lumamode = false;
rgbCurves.rcurve.clear ();
@@ -1387,6 +1437,49 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2, bool fnameAbsol
keyFile.set_double_list("Exposure", "Curve2", tcurve);
}
+ //save dehaz
+
+ if (!pedited || pedited->dehaz.str) {
+ keyFile.set_integer ("Dehaz", "Str", dehaz.str);
+ }
+ if (!pedited || pedited->dehaz.scal) {
+ keyFile.set_integer ("Dehaz", "Scal", dehaz.scal);
+ }
+ if (!pedited || pedited->dehaz.enabled) {
+ keyFile.set_boolean ("Dehaz", "Enabled", dehaz.enabled);
+ }
+
+ if (!pedited || pedited->dehaz.retinex) {
+ keyFile.set_boolean ("Dehaz", "Retinex", dehaz.retinex);
+ }
+
+ if (!pedited || pedited->dehaz.neigh) {
+ keyFile.set_integer ("Dehaz", "Neigh", dehaz.neigh);
+ }
+ if (!pedited || pedited->dehaz.gain) {
+ keyFile.set_integer ("Dehaz", "Gain", dehaz.gain);
+ }
+ if (!pedited || pedited->dehaz.offs) {
+ keyFile.set_integer ("Dehaz","Offs", dehaz.offs);
+ }
+ if (!pedited || pedited->dehaz.vart) {
+ keyFile.set_integer ("Dehaz","Vart", dehaz.vart);
+ }
+
+ if (!pedited || pedited->dehaz.dehazmet) {
+ keyFile.set_string ("Dehaz", "Dehazmet",dehaz.dehazmet);
+ }
+
+ if (!pedited || pedited->dehaz.cdcurve) {
+ Glib::ArrayHandle cdcurve = dehaz.cdcurve;
+ keyFile.set_double_list("Dehaz", "CDCurve", cdcurve);
+ }
+
+ if (!pedited || pedited->dehaz.transmissionCurve) {
+ Glib::ArrayHandle transmissionCurve = dehaz.transmissionCurve;
+ keyFile.set_double_list("Dehaz", "TransmissionCurve", transmissionCurve);
+ }
+
// save channel mixer
if (!pedited || pedited->chmixer.red[0] || pedited->chmixer.red[1] || pedited->chmixer.red[2]) {
Glib::ArrayHandle rmix (chmixer.red, 3, Glib::OWNERSHIP_NONE);
@@ -1546,25 +1639,6 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2, bool fnameAbsol
if (!pedited || pedited->labCurve.chromaticity) {
keyFile.set_integer ("Luminance Curve", "Chromaticity", labCurve.chromaticity);
}
- if (!pedited || pedited->labCurve.str) {
- keyFile.set_integer ("Luminance Curve", "Str", labCurve.str);
- }
- if (!pedited || pedited->labCurve.scal) {
- keyFile.set_integer ("Luminance Curve", "Scal", labCurve.scal);
- }
-
- if (!pedited || pedited->labCurve.neigh) {
- keyFile.set_integer ("Luminance Curve", "Neigh", labCurve.neigh);
- }
- if (!pedited || pedited->labCurve.gain) {
- keyFile.set_integer ("Luminance Curve", "Gain", labCurve.gain);
- }
- if (!pedited || pedited->labCurve.offs) {
- keyFile.set_integer ("Luminance Curve","Offs", labCurve.offs);
- }
- if (!pedited || pedited->labCurve.vart) {
- keyFile.set_integer ("Luminance Curve","Vart", labCurve.vart);
- }
if (!pedited || pedited->labCurve.avoidcolorshift) {
keyFile.set_boolean ("Luminance Curve", "AvoidColorShift", labCurve.avoidcolorshift);
@@ -1617,20 +1691,11 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2, bool fnameAbsol
Glib::ArrayHandle lccurve = labCurve.lccurve;
keyFile.set_double_list("Luminance Curve", "LcCurve", lccurve);
}
- if (!pedited || pedited->labCurve.dehazmet) {
- keyFile.set_string ("Luminance Curve", "Dehazmet",labCurve.dehazmet);
- }
-
if (!pedited || pedited->labCurve.clcurve) {
Glib::ArrayHandle clcurve = labCurve.clcurve;
keyFile.set_double_list("Luminance Curve", "ClCurve", clcurve);
}
- if (!pedited || pedited->labCurve.cdcurve) {
- Glib::ArrayHandle cdcurve = labCurve.cdcurve;
- keyFile.set_double_list("Luminance Curve", "CDCurve", cdcurve);
- }
-
// save sharpening
if (!pedited || pedited->sharpening.enabled) {
keyFile.set_boolean ("Sharpening", "Enabled", sharpening.enabled);
@@ -3671,7 +3736,92 @@ int ProcParams::load (Glib::ustring fname, ParamsEdited* pedited)
}
}
}
+ //load dehaz
+ if (keyFile.has_group ("Dehaz")) {
+
+ if (keyFile.has_key ("Dehaz", "Retinex")) {
+ dehaz.retinex = keyFile.get_boolean ("Dehaz", "Retinex");
+ if (pedited) {
+ pedited->dehaz.retinex = true;
+ }
+ }
+
+ if (keyFile.has_key ("Dehaz", "Dehazmet")) {
+ dehaz.dehazmet = keyFile.get_string ("Dehaz", "Dehazmet");
+
+ if (pedited) {
+ pedited->dehaz.dehazmet = true;
+ }
+ }
+ if (keyFile.has_key ("Dehaz", "Enabled")) {
+ dehaz.enabled = keyFile.get_boolean ("Dehaz", "Enabled");
+ if (pedited) {
+ pedited->dehaz.enabled = true;
+ }
+ }
+
+ if (keyFile.has_key ("Dehaz", "Neigh")) {
+ dehaz.neigh = keyFile.get_integer ("Dehaz", "Neigh");
+
+ if (pedited) {
+ pedited->dehaz.neigh = true;
+ }
+ }
+ if (keyFile.has_key ("Dehaz", "Str")) {
+ dehaz.str = keyFile.get_integer ("Dehaz", "Str");
+
+ if (pedited) {
+ pedited->dehaz.str = true;
+ }
+ }
+ if (keyFile.has_key ("Dehaz", "Scal")) {
+ dehaz.scal = keyFile.get_integer ("Dehaz", "Scal");
+
+ if (pedited) {
+ pedited->dehaz.scal = true;
+ }
+ }
+
+ if (keyFile.has_key ("Dehaz", "Gain")) {
+ dehaz.gain = keyFile.get_integer ("Dehaz", "Gain");
+
+ if (pedited) {
+ pedited->dehaz.gain = true;
+ }
+ }
+ if (keyFile.has_key ("Dehaz", "Offs")) {
+ dehaz.offs = keyFile.get_integer ("Dehaz", "Offs");
+
+ if (pedited) {
+ pedited->dehaz.offs = true;
+ }
+ }
+ if (keyFile.has_key ("Dehaz", "Vart")) {
+ dehaz.vart = keyFile.get_integer ("Dehaz", "Vart");
+
+ if (pedited) {
+ pedited->dehaz.vart = true;
+ }
+ }
+
+ if (keyFile.has_key ("Dehaz", "CDCurve")) {
+ dehaz.cdcurve = keyFile.get_double_list ("Dehaz", "CDCurve");
+
+ if (pedited) {
+ pedited->dehaz.cdcurve = true;
+ }
+ }
+ if (keyFile.has_key ("Dehaz", "TransmissionCurve")) {
+ dehaz.transmissionCurve = keyFile.get_double_list ("Dehaz", "TransmissionCurve");
+
+ if (pedited) {
+ pedited->dehaz.transmissionCurve = true;
+ }
+ }
+ }
+
+
// load luma curve
if (keyFile.has_group ("Luminance Curve")) {
if (keyFile.has_key ("Luminance Curve", "Brightness")) {
@@ -3689,50 +3839,6 @@ int ProcParams::load (Glib::ustring fname, ParamsEdited* pedited)
pedited->labCurve.contrast = true;
}
}
- if (keyFile.has_key ("Luminance Curve", "Neigh")) {
- labCurve.neigh = keyFile.get_integer ("Luminance Curve", "Neigh");
-
- if (pedited) {
- pedited->labCurve.neigh = true;
- }
- }
- if (keyFile.has_key ("Luminance Curve", "Str")) {
- labCurve.str = keyFile.get_integer ("Luminance Curve", "Str");
-
- if (pedited) {
- pedited->labCurve.str = true;
- }
- }
- if (keyFile.has_key ("Luminance Curve", "Scal")) {
- labCurve.scal = keyFile.get_integer ("Luminance Curve", "Scal");
-
- if (pedited) {
- pedited->labCurve.scal = true;
- }
- }
-
- if (keyFile.has_key ("Luminance Curve", "Gain")) {
- labCurve.gain = keyFile.get_integer ("Luminance Curve", "Gain");
-
- if (pedited) {
- pedited->labCurve.gain = true;
- }
- }
- if (keyFile.has_key ("Luminance Curve", "Offs")) {
- labCurve.offs = keyFile.get_integer ("Luminance Curve", "Offs");
-
- if (pedited) {
- pedited->labCurve.offs = true;
- }
- }
- if (keyFile.has_key ("Luminance Curve", "Vart")) {
- labCurve.vart = keyFile.get_integer ("Luminance Curve", "Vart");
-
- if (pedited) {
- pedited->labCurve.vart = true;
- }
- }
-
if (ppVersion < 303) {
// transform Saturation into Chromaticity
// if Saturation == 0, should we set BWToning on?
@@ -3847,14 +3953,6 @@ int ProcParams::load (Glib::ustring fname, ParamsEdited* pedited)
pedited->labCurve.lhcurve = true;
}
}
- if (keyFile.has_key ("Luminance Curve", "Dehazmet")) {
- labCurve.dehazmet = keyFile.get_string ("Luminance Curve", "Dehazmet");
-
- if (pedited) {
- pedited->labCurve.dehazmet = true;
- }
- }
-
if (keyFile.has_key ("Luminance Curve", "hhCurve")) {
labCurve.hhcurve = keyFile.get_double_list ("Luminance Curve", "hhCurve");
@@ -3879,14 +3977,6 @@ int ProcParams::load (Glib::ustring fname, ParamsEdited* pedited)
}
}
- if (keyFile.has_key ("Luminance Curve", "CDCurve")) {
- labCurve.cdcurve = keyFile.get_double_list ("Luminance Curve", "CDCurve");
-
- if (pedited) {
- pedited->labCurve.cdcurve = true;
- }
- }
-
}
// load sharpening
@@ -7089,6 +7179,17 @@ bool ProcParams::operator== (const ProcParams& other)
&& toneCurve.curveMode2 == other.toneCurve.curveMode2
&& toneCurve.hrenabled == other.toneCurve.hrenabled
&& toneCurve.method == other.toneCurve.method
+ && dehaz.cdcurve == other.dehaz.cdcurve
+ && dehaz.transmissionCurve == other.dehaz.transmissionCurve
+ && dehaz.str == other.dehaz.str
+ && dehaz.scal == other.dehaz.scal
+ && dehaz.neigh == other.dehaz.neigh
+ && dehaz.gain == other.dehaz.gain
+ && dehaz.offs == other.dehaz.offs
+ && dehaz.dehazmet == other.dehaz.dehazmet
+ && dehaz.vart == other.dehaz.vart
+ && dehaz.enabled == other.dehaz.enabled
+ && dehaz.retinex == other.dehaz.retinex
&& labCurve.lcurve == other.labCurve.lcurve
&& labCurve.acurve == other.labCurve.acurve
&& labCurve.bcurve == other.labCurve.bcurve
@@ -7098,15 +7199,6 @@ bool ProcParams::operator== (const ProcParams& other)
&& labCurve.hhcurve == other.labCurve.hhcurve
&& labCurve.lccurve == other.labCurve.lccurve
&& labCurve.clcurve == other.labCurve.clcurve
- && labCurve.cdcurve == other.labCurve.cdcurve
- && labCurve.str == other.labCurve.str
- && labCurve.scal == other.labCurve.scal
- && labCurve.neigh == other.labCurve.neigh
- && labCurve.gain == other.labCurve.gain
- && labCurve.offs == other.labCurve.offs
- && labCurve.dehazmet == other.labCurve.dehazmet
- && labCurve.vart == other.labCurve.vart
-
&& labCurve.brightness == other.labCurve.brightness
&& labCurve.contrast == other.labCurve.contrast
&& labCurve.chromaticity == other.labCurve.chromaticity
diff --git a/rtengine/procparams.h b/rtengine/procparams.h
index f6d92a0fb..82fb2fc4d 100644
--- a/rtengine/procparams.h
+++ b/rtengine/procparams.h
@@ -259,6 +259,32 @@ public:
void setDefaults();
static bool HLReconstructionNecessary(LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw);
};
+/**
+ * Parameters of Dehaz
+ */
+class DehazParams
+{
+
+public:
+ bool enabled;
+ std::vector cdcurve;
+ std::vector transmissionCurve;
+ int str;
+ int scal;
+ int neigh;
+ int gain;
+ int offs;
+ Glib::ustring dehazmet;
+ int vart;
+ bool retinex;
+ DehazParams ();
+ void setDefaults();
+ // void getCurves(transmissionCurve &transmissionCurveLUT) const;
+
+ static void getDefaulttransmissionCurve(std::vector &curve);
+ static void getDefaultCDCurve(std::vector &curve);
+
+};
/**
@@ -277,21 +303,12 @@ public:
std::vector hhcurve;
std::vector lccurve;
std::vector clcurve;
- std::vector cdcurve;
int brightness;
int contrast;
int chromaticity;
bool avoidcolorshift;
double rstprotection;
bool lcredsk;
- int str;
- int scal;
- int neigh;
- int gain;
- int offs;
- Glib::ustring dehazmet;
- int vart;
-
};
/**
@@ -1196,6 +1213,7 @@ class ProcParams
public:
ToneCurveParams toneCurve; ///< Tone curve parameters
LCurveParams labCurve; ///< CIELAB luminance curve parameters
+ DehazParams dehaz; ///< Dehaz parameters
RGBCurvesParams rgbCurves; ///< RGB curves parameters
ColorToningParams colorToning; ///< Color Toning parameters
SharpeningParams sharpening; ///< Sharpening parameters
diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc
index dbd7e9c9a..a5d223aa0 100644
--- a/rtengine/rawimagesource.cc
+++ b/rtengine/rawimagesource.cc
@@ -1800,7 +1800,7 @@ void RawImageSource::demosaic(const RAWParams &raw)
}
}
-void RawImageSource::dehaz(RAWParams raw, ColorManagementParams cmp, LCurveParams lcur, LUTf & cdcurve, bool dehacontlutili)
+void RawImageSource::dehaz(RAWParams raw, ColorManagementParams cmp, DehazParams lcur, LUTf & cdcurve, bool dehacontlutili)
{
MyTime t4, t5;
diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h
index 3ce1f1089..5a58d935e 100644
--- a/rtengine/rawimagesource.h
+++ b/rtengine/rawimagesource.h
@@ -151,7 +151,7 @@ public:
int load (Glib::ustring fname, bool batch = false);
void preprocess (const RAWParams &raw, const LensProfParams &lensProf, const CoarseTransformParams& coarse);
void demosaic (const RAWParams &raw);
- void dehaz (RAWParams raw, ColorManagementParams cmp, LCurveParams lcur, LUTf & cdcurve, bool dehacontlutili);
+ void dehaz (RAWParams raw, ColorManagementParams cmp, DehazParams lcur, LUTf & cdcurve, bool dehacontlutili);
void flushRawData ();
void flushRGB ();
void HLRecovery_Global (ToneCurveParams hrp);
@@ -227,7 +227,7 @@ public:
void boxblur2(float** src, float** dst, int H, int W, int box );
void boxblur_resamp(float **src, float **dst, int H, int W, int box, int samp );
- void MSR(LabImage* lab, int width, int height, int skip, LCurveParams lcur);
+ void MSR(LabImage* lab, int width, int height, int skip, DehazParams lcur);
//void boxblur_resamp(float **red, float **green, float **blue, int H, int W, float thresh[3], float max[3],
// multi_array2D & hfsize, multi_array2D & hilite, int box );
diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc
index 32cc0b6b8..aa1cad0f7 100644
--- a/rtengine/refreshmap.cc
+++ b/rtengine/refreshmap.cc
@@ -435,7 +435,10 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
ALLNORAW, // EvLstr
ALLNORAW, // EvLscal
ALLNORAW, // EvLvart
- ALLNORAW // EvLCDCurve
+ ALLNORAW, // EvLCDCurve
+ ALLNORAW, // EvDehazOpacity
+ ALLNORAW, // EvDehazEnabled
+ ALLNORAW // EvDehazretinex
};
diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc
index 3c30b0bb4..628c86dd8 100644
--- a/rtengine/simpleprocess.cc
+++ b/rtengine/simpleprocess.cc
@@ -118,10 +118,10 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p
LUTf cdcurve (65536, 0);
bool dehacontlutili=false;
- CurveFactory::curveDehaContL (dehacontlutili, params.labCurve.cdcurve, cdcurve, 1);
+ CurveFactory::curveDehaContL (dehacontlutili, params.dehaz.cdcurve, cdcurve, 1);
- if(params.labCurve.dehazmet!="none")
- imgsrc->dehaz( params.raw, params.icm, params.labCurve, cdcurve, dehacontlutili );//enabled Dehaze
+ if(params.dehaz.dehazmet!="none")
+ imgsrc->dehaz( params.raw, params.icm, params.dehaz, cdcurve, dehacontlutili );//enabled Dehaze
if (pl) {
diff --git a/rtgui/CMakeLists.txt b/rtgui/CMakeLists.txt
index c21dd6c55..d49b2dbe6 100644
--- a/rtgui/CMakeLists.txt
+++ b/rtgui/CMakeLists.txt
@@ -17,7 +17,7 @@ set (BASESOURCEFILES
previewloader.cc rtimage.cc inspector.cc
histogrampanel.cc history.cc imagearea.cc
imageareapanel.cc iptcpanel.cc labcurve.cc main.cc
- multilangmgr.cc mycurve.cc myflatcurve.cc mydiagonalcurve.cc options.cc
+ multilangmgr.cc mycurve.cc myflatcurve.cc mydiagonalcurve.cc options.cc dehaz.cc
preferences.cc profilepanel.cc saveasdlg.cc
saveformatpanel.cc soundman.cc splash.cc
thumbnail.cc tonecurve.cc toolbar.cc
diff --git a/rtgui/dehaz.cc b/rtgui/dehaz.cc
new file mode 100644
index 000000000..8323a6a9e
--- /dev/null
+++ b/rtgui/dehaz.cc
@@ -0,0 +1,420 @@
+/*
+ * This file is part of RawTherapee.
+ */
+#include "dehaz.h"
+#include "mycurve.h"
+
+using namespace rtengine;
+using namespace rtengine::procparams;
+
+Dehaz::Dehaz () : FoldableToolPanel(this, "dehaz", M("TP_DEHAZ_LABEL"), false, true)
+{
+ CurveListener::setMulti(true);
+ std::vector milestones;
+
+ dehazFrame = Gtk::manage (new Gtk::Frame (M("TP_DEHAZ_LAB")) );
+ dehazFrame->set_tooltip_text(M("TP_DEHAZ_LAB_TOOLTIP"));
+ dehazFrame->set_border_width(0);
+ dehazFrame->set_label_align(0.025, 0.5);
+
+ Gtk::VBox * dehazVBox = Gtk::manage ( new Gtk::VBox());
+ dehazVBox->set_border_width(4);
+ dehazVBox->set_spacing(2);
+
+ Gtk::VBox * RetiVBox = Gtk::manage ( new Gtk::VBox());
+ RetiVBox->set_border_width(4);
+ RetiVBox->set_spacing(2);
+
+ dhbox = Gtk::manage (new Gtk::HBox ());
+ labmdh = Gtk::manage (new Gtk::Label (M("TP_DEHAZE_MET") + ":"));
+ dhbox->pack_start (*labmdh, Gtk::PACK_SHRINK, 1);
+
+ dehazmet = Gtk::manage (new MyComboBoxText ());
+ dehazmet->append_text (M("TP_DEHAZ_LOW"));
+ dehazmet->append_text (M("TP_DEHAZ_UNI"));
+ dehazmet->append_text (M("TP_DEHAZ_HIGH"));
+ dehazmet->set_active(0);
+ dehazmetConn = dehazmet->signal_changed().connect ( sigc::mem_fun(*this, &Dehaz::dehazmetChanged) );
+ dehazmet->set_tooltip_markup (M("TP_DEHAZ_MET_TOOLTIP"));
+ dhbox->pack_start(*dehazmet);
+ dehazVBox->pack_start(*dhbox);
+ std::vector defaultCurve;
+
+ curveEditorGD = new CurveEditorGroup (options.lastDehazDir, M("TP_DEHAZ_CONTEDIT"));
+ curveEditorGD->setCurveListener (this);
+ rtengine::DehazParams::getDefaultCDCurve(defaultCurve);
+ cdshape = static_cast(curveEditorGD->addCurve(CT_Diagonal, M("TP_DEHAZ_CURVEEDITOR_CD")));
+ cdshape->setResetCurve(DiagonalCurveType(defaultCurve.at(0)), defaultCurve);
+ cdshape->setTooltip(M("TP_DEHAZ_CURVEEDITOR_CD_TOOLTIP"));
+ std::vector milestones22;
+
+ milestones22.push_back( GradientMilestone(0., 0., 0., 0.) );
+ milestones22.push_back( GradientMilestone(1., 1., 1., 1.) );
+ cdshape->setBottomBarBgGradient(milestones22);
+ cdshape->setLeftBarBgGradient(milestones22);
+
+ curveEditorGD->curveListComplete();
+
+ transmissionCurveEditorG = new CurveEditorGroup (options.lastDehazDir, M("TP_DEHAZ_TRANSMISSION"));
+ transmissionCurveEditorG->setCurveListener (this);
+
+ rtengine::DehazParams::getDefaulttransmissionCurve(defaultCurve);
+ transmissionShape = static_cast(transmissionCurveEditorG->addCurve(CT_Flat, "", NULL, false));
+ transmissionShape->setIdentityValue(0.);
+ transmissionShape->setResetCurve(FlatCurveType(defaultCurve.at(0)), defaultCurve);
+ transmissionShape->setBottomBarBgGradient(milestones);
+ transmissionCurveEditorG->set_tooltip_markup (M("TP_DEHAZ_TRANS_TOOLTIP"));
+
+ transmissionCurveEditorG->curveListComplete();
+
+
+
+ str = Gtk::manage (new Adjuster (M("TP_DEHAZ_STR"), 0, 100., 1., 60.));
+ str->set_tooltip_markup (M("TP_DEHAZ_STR_TOOLTIP"));
+ neigh = Gtk::manage (new Adjuster (M("TP_DEHAZ_NEIGH"), 6, 100., 1., 80.));
+
+ retinex = Gtk::manage (new Gtk::CheckButton (M("TP_DEHAZ_RETIN")));
+ retinex->set_active (true);
+ retinexConn = retinex->signal_toggled().connect( sigc::mem_fun(*this, &Dehaz::retinexChanged) );
+
+ dehazVBox->pack_start (*str);
+ str->show ();
+
+ dehazVBox->pack_start (*neigh);
+ neigh->show ();
+ neigh->set_tooltip_markup (M("TP_DEHAZ_NEIGH_TOOLTIP"));
+
+ dehazVBox->pack_start (*retinex);
+ retinex->show ();
+
+ scal = Gtk::manage (new Adjuster (M("TP_DEHAZ_SCAL"), 1, 6., 1., 3.));
+ gain = Gtk::manage (new Adjuster (M("TP_DEHAZ_GAIN"), 50, 150, 1, 100));
+ offs = Gtk::manage (new Adjuster (M("TP_DEHAZ_OFFS"), -3000, 3000, 1, 0));
+ vart = Gtk::manage (new Adjuster (M("TP_DEHAZ_VART"), 80, 250, 1, 125));
+ gain->set_tooltip_markup (M("TP_DEHAZ_GAIN_TOOLTIP"));
+ scal->set_tooltip_markup (M("TP_DEHAZ_SCAL_TOOLTIP"));
+ vart->set_tooltip_markup (M("TP_DEHAZ_VART_TOOLTIP"));
+
+ RetiVBox->pack_start (*curveEditorGD, Gtk::PACK_SHRINK, 4);
+ curveEditorGD->show();
+
+ RetiVBox->pack_start (*scal);
+ scal->show ();
+
+
+ RetiVBox->pack_start (*gain);
+ gain->show ();
+
+ RetiVBox->pack_start (*offs);
+ offs->show ();
+
+ RetiVBox->pack_start (*vart);
+ vart->show ();
+
+ RetiVBox->pack_start( *transmissionCurveEditorG, Gtk::PACK_SHRINK, 2);
+ transmissionCurveEditorG->show();
+
+
+ str->setAdjusterListener (this);
+ scal->setAdjusterListener (this);
+ neigh->setAdjusterListener (this);
+ gain->setAdjusterListener (this);
+ offs->setAdjusterListener (this);
+ vart->setAdjusterListener (this);
+ pack_start (*dehazVBox);
+ dehazFrame->add(*RetiVBox);
+ pack_start (*dehazFrame);
+ dehazFrame->hide();
+
+ disableListener();
+ retinexChanged();
+ enableListener();
+
+}
+
+Dehaz::~Dehaz()
+{
+ delete curveEditorGD;
+ delete transmissionCurveEditorG;
+
+}
+
+
+void Dehaz::read (const ProcParams* pp, const ParamsEdited* pedited)
+{
+ disableListener ();
+ dehazmetConn.block(true);
+
+
+ if (pedited) {
+ scal->setEditedState (pedited->dehaz.scal ? Edited : UnEdited);
+ neigh->setEditedState (pedited->dehaz.neigh ? Edited : UnEdited);
+ gain->setEditedState (pedited->dehaz.gain ? Edited : UnEdited);
+ offs->setEditedState (pedited->dehaz.offs ? Edited : UnEdited);
+ vart->setEditedState (pedited->dehaz.vart ? Edited : UnEdited);
+ set_inconsistent (multiImage && !pedited->dehaz.enabled);
+ retinex->set_inconsistent (!pedited->dehaz.retinex);
+
+
+ if (!pedited->dehaz.dehazmet) {
+ dehazmet->set_active_text(M("GENERAL_UNCHANGED"));
+ }
+ cdshape->setUnChanged (!pedited->dehaz.cdcurve);
+ transmissionShape->setUnChanged (!pedited->dehaz.transmissionCurve);
+
+ }
+
+ neigh->setValue (pp->dehaz.neigh);
+ gain->setValue (pp->dehaz.gain);
+ offs->setValue (pp->dehaz.offs);
+ str->setValue (pp->dehaz.str);
+ scal->setValue (pp->dehaz.scal);
+ vart->setValue (pp->dehaz.vart);
+
+ setEnabled (pp->dehaz.enabled);
+
+ retinexConn.block (true);
+ retinex->set_active (pp->dehaz.retinex);
+ retinexConn.block (false);
+ lastretinex = pp->dehaz.retinex;
+
+
+ if (pp->dehaz.dehazmet == "low") {
+ dehazmet->set_active (0);
+ } else if (pp->dehaz.dehazmet == "uni") {
+ dehazmet->set_active (1);
+ } else if (pp->dehaz.dehazmet == "high") {
+ dehazmet->set_active (2);
+ }
+ dehazmetChanged ();
+ retinexConn.block(false);
+ retinexChanged ();
+ retinexConn.block(false);
+
+ cdshape->setCurve (pp->dehaz.cdcurve);
+ dehazmetConn.block(false);
+ transmissionShape->setCurve (pp->dehaz.transmissionCurve);
+
+
+ enableListener ();
+}
+void Dehaz::retinexUpdateUI ()
+{
+ if (!batchMode) {
+ if (retinex->get_active ()) {
+ scal->show();
+ gain->show();
+ offs->show();
+ vart->show();
+ transmissionCurveEditorG->show();
+ curveEditorGD->show();
+ dehazFrame->show();
+ } else {
+ scal->hide();
+ gain->hide();
+ offs->hide();
+ vart->hide();
+ transmissionCurveEditorG->hide();
+ curveEditorGD->hide();
+ dehazFrame->hide();
+ }
+ }
+}
+
+
+
+void Dehaz::write (ProcParams* pp, ParamsEdited* pedited)
+{
+
+ pp->dehaz.str = str->getValue ();
+ pp->dehaz.scal = (int)scal->getValue ();
+ pp->dehaz.neigh = neigh->getValue ();
+ pp->dehaz.gain = (int)gain->getValue ();
+ pp->dehaz.offs = (int)offs->getValue ();
+ pp->dehaz.vart = (int)vart->getValue ();
+ pp->dehaz.cdcurve = cdshape->getCurve ();
+ pp->dehaz.transmissionCurve = transmissionShape->getCurve ();
+ pp->dehaz.enabled = getEnabled();
+ pp->dehaz.retinex = retinex->get_active();
+
+ if (pedited) {
+ pedited->dehaz.dehazmet = dehazmet->get_active_text() != M("GENERAL_UNCHANGED");
+
+ //%%%%%%%%%%%%%%%%%%%%%%
+ pedited->dehaz.str = str->getEditedState ();
+ pedited->dehaz.scal = scal->getEditedState ();
+ pedited->dehaz.neigh = neigh->getEditedState ();
+ pedited->dehaz.gain = gain->getEditedState ();
+ pedited->dehaz.offs = offs->getEditedState ();
+ pedited->dehaz.vart = vart->getEditedState ();
+ pedited->dehaz.cdcurve = !cdshape->isUnChanged ();
+ pedited->dehaz.transmissionCurve = !transmissionShape->isUnChanged ();
+ pedited->dehaz.enabled = !get_inconsistent();
+ pedited->dehaz.retinex = !retinex->get_inconsistent();
+
+ }
+ if (dehazmet->get_active_row_number() == 0) {
+ pp->dehaz.dehazmet = "low";
+ } else if (dehazmet->get_active_row_number() == 1) {
+ pp->dehaz.dehazmet = "uni";
+ } else if (dehazmet->get_active_row_number() == 2) {
+ pp->dehaz.dehazmet = "high";
+ }
+}
+
+void Dehaz::dehazmetChanged()
+{
+ if (listener) {
+ listener->panelChanged (Evdehazmet, dehazmet->get_active_text ());
+ }
+ }
+
+void Dehaz::retinexChanged ()
+{
+ if (batchMode) {
+ if (retinex->get_inconsistent()) {
+ retinex->set_inconsistent (false);
+ retinexConn.block (true);
+ retinex->set_active (false);
+ retinexConn.block (false);
+ } else if (lastretinex) {
+ retinex->set_inconsistent (true);
+ }
+
+ lastretinex = retinex->get_active ();
+ }
+ retinexUpdateUI();
+
+ if (listener) {
+ if (retinex->get_active()) {
+ if (getEnabled()) {
+ listener->panelChanged (EvDehazretinex, M("GENERAL_ENABLED"));
+ }
+ } else {
+ if (getEnabled()) {
+ listener->panelChanged (EvDehazretinex, M("GENERAL_DISABLED"));
+ }
+ }
+
+ }
+}
+
+
+
+void Dehaz::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited)
+{
+
+ neigh->setDefault (defParams->dehaz.neigh);
+ gain->setDefault (defParams->dehaz.gain);
+ offs->setDefault (defParams->dehaz.offs);
+ str->setDefault (defParams->dehaz.str);
+ scal->setDefault (defParams->dehaz.scal);
+ vart->setDefault (defParams->dehaz.vart);
+
+ if (pedited) {
+ neigh->setDefaultEditedState (pedited->dehaz.neigh ? Edited : UnEdited);
+ gain->setDefaultEditedState (pedited->dehaz.gain ? Edited : UnEdited);
+ offs->setDefaultEditedState (pedited->dehaz.offs ? Edited : UnEdited);
+ str->setDefaultEditedState (pedited->dehaz.str ? Edited : UnEdited);
+ scal->setDefaultEditedState (pedited->dehaz.scal ? Edited : UnEdited);
+ vart->setDefaultEditedState (pedited->dehaz.vart ? Edited : UnEdited);
+
+ } else {
+ neigh->setDefaultEditedState (Irrelevant);
+ gain->setDefaultEditedState (Irrelevant);
+ offs->setDefaultEditedState (Irrelevant);
+ vart->setDefaultEditedState (Irrelevant);
+ str->setDefaultEditedState (Irrelevant);
+ scal->setDefaultEditedState (Irrelevant);
+ }
+}
+/*
+void Dehaz::setAdjusterBehavior (bool splitAdd, bool satThresholdAdd, bool satOpacityAdd, bool strprotectAdd, bool balanceAdd)
+{
+
+}
+*/
+
+void Dehaz::adjusterChanged (Adjuster* a, double newval)
+{
+
+ if (!listener || !getEnabled()) {
+ return;
+ }
+
+ if (a == neigh) {
+ listener->panelChanged (EvLneigh, neigh->getTextValue());
+ } else if (a == str) {
+ listener->panelChanged (EvLstr, str->getTextValue());
+ } else if (a == scal) {
+ listener->panelChanged (EvLscal, scal->getTextValue());
+ } else if (a == gain) {
+ listener->panelChanged (EvLgain, gain->getTextValue());
+ } else if (a == offs) {
+ listener->panelChanged (EvLoffs, offs->getTextValue());
+ } else if (a == vart) {
+ listener->panelChanged (EvLvart, vart->getTextValue());
+ }
+}
+
+
+
+void Dehaz::autoOpenCurve ()
+{
+ cdshape->openIfNonlinear();
+ transmissionShape->openIfNonlinear();
+
+}
+
+
+void Dehaz::curveChanged (CurveEditor* ce)
+{
+ if (listener && getEnabled()) {
+ if (ce == cdshape) {
+ listener->panelChanged (EvLCDCurve, M("HISTORY_CUSTOMCURVE"));
+ } else if (ce == transmissionShape) {
+ listener->panelChanged (EvDehaztransmission, M("HISTORY_CUSTOMCURVE"));
+ }
+ }
+}
+
+void Dehaz::enabledChanged ()
+{
+
+ if (listener) {
+ if (get_inconsistent()) {
+ listener->panelChanged (EvDehazEnabled, M("GENERAL_UNCHANGED"));
+ } else if (getEnabled()) {
+ listener->panelChanged (EvDehazEnabled, M("GENERAL_ENABLED"));
+ } else {
+ listener->panelChanged (EvDehazEnabled, M("GENERAL_DISABLED"));
+ }
+ }
+}
+
+
+void Dehaz::trimValues (rtengine::procparams::ProcParams* pp)
+{
+ str->trimValue(pp->dehaz.str);
+ scal->trimValue(pp->dehaz.scal);
+ neigh->trimValue(pp->dehaz.neigh);
+ gain->trimValue(pp->dehaz.gain);
+ offs->trimValue(pp->dehaz.offs);
+ vart->trimValue(pp->dehaz.vart);
+
+}
+
+void Dehaz::setBatchMode (bool batchMode)
+{
+ ToolPanel::setBatchMode (batchMode);
+ neigh->showEditedCB ();
+ gain->showEditedCB ();
+ offs->showEditedCB ();
+ str->showEditedCB ();
+ scal->showEditedCB ();
+ vart->showEditedCB ();
+ curveEditorGD->setBatchMode (batchMode);
+ transmissionCurveEditorG->setBatchMode (batchMode);
+
+
+}
diff --git a/rtgui/dehaz.h b/rtgui/dehaz.h
new file mode 100644
index 000000000..9cf0614c5
--- /dev/null
+++ b/rtgui/dehaz.h
@@ -0,0 +1,63 @@
+/*
+ * This file is part of RawTherapee.
+ */
+#ifndef _DEHAZ_H_
+#define _DEHAZ_H_
+
+#include
+#include "adjuster.h"
+#include "toolpanel.h"
+#include "guiutils.h"
+#include "curveeditor.h"
+#include "curveeditorgroup.h"
+#include "thresholdadjuster.h"
+#include "colorprovider.h"
+
+class Dehaz : public ToolParamBlock, public FoldableToolPanel, public CurveListener,
+ public AdjusterListener
+{
+
+protected:
+ CurveEditorGroup* curveEditorGD;
+ Adjuster* str;
+ Adjuster* scal;
+ Adjuster* neigh;
+ Adjuster* gain;
+ Adjuster* offs;
+ Adjuster* vart;
+
+ Gtk::Label* labmdh;
+ Gtk::HBox* dhbox;
+ MyComboBoxText* dehazmet;
+ Gtk::CheckButton* retinex;
+ Gtk::Frame* dehazFrame;
+
+ DiagonalCurveEditor* cdshape;
+ CurveEditorGroup* transmissionCurveEditorG;
+ sigc::connection dehazmetConn;
+ FlatCurveEditor* transmissionShape;
+ bool lastretinex;
+ sigc::connection retinexConn;
+
+public:
+ Dehaz ();
+ ~Dehaz ();
+
+ void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = NULL);
+ void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = NULL);
+ void setBatchMode (bool batchMode);
+ void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = NULL);
+ void trimValues (rtengine::procparams::ProcParams* pp);
+ void adjusterChanged (Adjuster* a, double newval);
+// void setAdjusterBehavior (bool splitAdd, bool satThresholdAdd, bool satOpacityAdd, bool strprotectAdd, bool balanceAdd);
+ void autoOpenCurve ();
+ void retinexChanged ();
+
+ void enabledChanged ();
+ void curveChanged (CurveEditor* ce);
+ void dehazmetChanged();
+ void retinexUpdateUI();
+
+};
+
+#endif
diff --git a/rtgui/labcurve.cc b/rtgui/labcurve.cc
index 08c9ac0c2..2fb7f250c 100644
--- a/rtgui/labcurve.cc
+++ b/rtgui/labcurve.cc
@@ -210,85 +210,11 @@ LCurve::LCurve () : FoldableToolPanel(this, "labcurves", M("TP_LABCURVE_LABEL"))
hsepdh->show ();
pack_start (*hsepdh, Gtk::PACK_EXPAND_WIDGET, 4);
- Gtk::Frame* dehazFrame = Gtk::manage (new Gtk::Frame (M("TP_DEHAZE_LAB")) );
- dehazFrame->set_tooltip_text(M("TP_DEHAZE_LAB_TOOLTIP"));
- dehazFrame->set_border_width(0);
- dehazFrame->set_label_align(0.025, 0.5);
-
- Gtk::VBox * dehazVBox = Gtk::manage ( new Gtk::VBox());
- dehazVBox->set_border_width(4);
- dehazVBox->set_spacing(2);
-
- dhbox = Gtk::manage (new Gtk::HBox ());
- labmdh = Gtk::manage (new Gtk::Label (M("TP_DEHAZE_MET") + ":"));
- dhbox->pack_start (*labmdh, Gtk::PACK_SHRINK, 1);
-
- dehazmet = Gtk::manage (new MyComboBoxText ());
- dehazmet->append_text (M("TP_DEHAZ_NONE"));
- dehazmet->append_text (M("TP_DEHAZ_UNI"));
- dehazmet->append_text (M("TP_DEHAZ_LOW"));
- dehazmet->append_text (M("TP_DEHAZ_HIGH"));
- dehazmet->set_active(0);
- dehazmetConn = dehazmet->signal_changed().connect ( sigc::mem_fun(*this, &LCurve::dehazmetChanged) );
- // dehazmet->set_tooltip_markup (M("TP_DEHAZ_MET_TOOLTIP"));
- dhbox->pack_start(*dehazmet);
- dehazVBox->pack_start(*dhbox);
-
- curveEditorGD = new CurveEditorGroup (options.lastLabCurvesDir, M("TP_LABCURVE_CONTEDIT"));
- curveEditorGD->setCurveListener (this);
- cdshape = static_cast(curveEditorGD->addCurve(CT_Diagonal, M("TP_LABCURVE_CURVEEDITOR_CD")));
- cdshape->setTooltip(M("TP_LABCURVE_CURVEEDITOR_CD_TOOLTIP"));
- std::vector milestones22;
-
- milestones22.push_back( GradientMilestone(0., 0., 0., 0.) );
- milestones22.push_back( GradientMilestone(1., 1., 1., 1.) );
- cdshape->setBottomBarBgGradient(milestones22);
- cdshape->setLeftBarBgGradient(milestones22);
-
- curveEditorGD->curveListComplete();
-
- str = Gtk::manage (new Adjuster (M("TP_LABCURVE_STR"), 0, 100., 1., 60.));
- scal = Gtk::manage (new Adjuster (M("TP_LABCURVE_SCAL"), 1, 6., 1., 3.));
- neigh = Gtk::manage (new Adjuster (M("TP_LABCURVE_NEIGH"), 6, 100., 1., 80.));
- gain = Gtk::manage (new Adjuster (M("TP_LABCURVE_GAIN"), 50, 150, 1, 100));
- offs = Gtk::manage (new Adjuster (M("TP_LABCURVE_OFFS"), 0, 3000, 1, 0));
- vart = Gtk::manage (new Adjuster (M("TP_LABCURVE_VART"), 80, 300, 1, 125));
- dehazVBox->pack_start (*str);
- str->show ();
-
- dehazVBox->pack_start (*curveEditorGD, Gtk::PACK_SHRINK, 4);
- curveEditorGD->show();
-
- dehazVBox->pack_start (*scal);
- scal->show ();
-
- dehazVBox->pack_start (*neigh);
- neigh->show ();
-
- dehazVBox->pack_start (*gain);
- gain->show ();
-
- dehazVBox->pack_start (*offs);
- offs->show ();
-
- dehazVBox->pack_start (*vart);
- vart->show ();
-
- str->setAdjusterListener (this);
- scal->setAdjusterListener (this);
- neigh->setAdjusterListener (this);
- gain->setAdjusterListener (this);
- offs->setAdjusterListener (this);
- vart->setAdjusterListener (this);
- dehazFrame->add(*dehazVBox);
- pack_start (*dehazFrame);
-
}
LCurve::~LCurve ()
{
delete curveEditorG;
- delete curveEditorGD;
}
@@ -296,30 +222,16 @@ void LCurve::read (const ProcParams* pp, const ParamsEdited* pedited)
{
disableListener ();
- dehazmetConn.block(true);
if (pedited) {
brightness->setEditedState (pedited->labCurve.brightness ? Edited : UnEdited);
contrast->setEditedState (pedited->labCurve.contrast ? Edited : UnEdited);
- chromaticity->setEditedState (pedited->labCurve.chromaticity ? Edited : UnEdited);
+ chromaticity->setEditedState (pedited->labCurve.chromaticity ? Edited : UnEdited);
//%%%%%%%%%%%%%%%%%%%%%%
rstprotection->setEditedState (pedited->labCurve.rstprotection ? Edited : UnEdited);
avoidcolorshift->set_inconsistent (!pedited->labCurve.avoidcolorshift);
lcredsk->set_inconsistent (!pedited->labCurve.lcredsk);
- str->setEditedState (pedited->labCurve.str ? Edited : UnEdited);
- scal->setEditedState (pedited->labCurve.scal ? Edited : UnEdited);
- neigh->setEditedState (pedited->labCurve.neigh ? Edited : UnEdited);
- gain->setEditedState (pedited->labCurve.gain ? Edited : UnEdited);
- offs->setEditedState (pedited->labCurve.offs ? Edited : UnEdited);
- vart->setEditedState (pedited->labCurve.vart ? Edited : UnEdited);
-
- // if (!pedited->labCurve.dehazmet) {
- // dehazmet->set_active (3);
- // }
- if (!pedited->labCurve.dehazmet) {
- dehazmet->set_active_text(M("GENERAL_UNCHANGED"));
- }
//%%%%%%%%%%%%%%%%%%%%%%
@@ -332,32 +244,12 @@ void LCurve::read (const ProcParams* pp, const ParamsEdited* pedited)
hhshape->setUnChanged (!pedited->labCurve.hhcurve);
lcshape->setUnChanged (!pedited->labCurve.lccurve);
clshape->setUnChanged (!pedited->labCurve.clcurve);
- cdshape->setUnChanged (!pedited->labCurve.cdcurve);
}
brightness->setValue (pp->labCurve.brightness);
contrast->setValue (pp->labCurve.contrast);
chromaticity->setValue (pp->labCurve.chromaticity);
adjusterChanged(chromaticity, pp->labCurve.chromaticity); // To update the GUI sensitiveness
- neigh->setValue (pp->labCurve.neigh);
- gain->setValue (pp->labCurve.gain);
- offs->setValue (pp->labCurve.offs);
- str->setValue (pp->labCurve.str);
- scal->setValue (pp->labCurve.scal);
- vart->setValue (pp->labCurve.vart);
-
-// dehazmet->set_active (0);
- if (pp->labCurve.dehazmet == "none") {
- dehazmet->set_active (0);
- } else if (pp->labCurve.dehazmet == "uni") {
- dehazmet->set_active (1);
- } else if (pp->labCurve.dehazmet == "low") {
- dehazmet->set_active (2);
- } else if (pp->labCurve.dehazmet == "high") {
- dehazmet->set_active (3);
- }
- dehazmetChanged ();
-
//%%%%%%%%%%%%%%%%%%%%%%
rstprotection->setValue (pp->labCurve.rstprotection);
@@ -384,10 +276,8 @@ void LCurve::read (const ProcParams* pp, const ParamsEdited* pedited)
hhshape->setCurve (pp->labCurve.hhcurve);
lcshape->setCurve (pp->labCurve.lccurve);
clshape->setCurve (pp->labCurve.clcurve);
- cdshape->setCurve (pp->labCurve.cdcurve);
queue_draw();
- dehazmetConn.block(false);
enableListener ();
}
@@ -429,9 +319,6 @@ void LCurve::autoOpenCurve ()
clshape->openIfNonlinear();
}
- if (!active) {
- cdshape->openIfNonlinear();
- }
}
void LCurve::setEditProvider (EditDataProvider *provider)
@@ -440,7 +327,6 @@ void LCurve::setEditProvider (EditDataProvider *provider)
ccshape->setEditProvider(provider);
lcshape->setEditProvider(provider);
clshape->setEditProvider(provider);
- cdshape->setEditProvider(provider);
lhshape->setEditProvider(provider);
chshape->setEditProvider(provider);
hhshape->setEditProvider(provider);
@@ -456,13 +342,6 @@ void LCurve::write (ProcParams* pp, ParamsEdited* pedited)
pp->labCurve.brightness = brightness->getValue ();
pp->labCurve.contrast = (int)contrast->getValue ();
pp->labCurve.chromaticity = (int)chromaticity->getValue ();
- pp->labCurve.str = str->getValue ();
- pp->labCurve.scal = (int)scal->getValue ();
- pp->labCurve.neigh = neigh->getValue ();
- pp->labCurve.gain = (int)gain->getValue ();
- pp->labCurve.offs = (int)offs->getValue ();
- pp->labCurve.vart = (int)vart->getValue ();
-
//%%%%%%%%%%%%%%%%%%%%%%
pp->labCurve.avoidcolorshift = avoidcolorshift->get_active ();
pp->labCurve.lcredsk = lcredsk->get_active ();
@@ -479,7 +358,6 @@ void LCurve::write (ProcParams* pp, ParamsEdited* pedited)
pp->labCurve.hhcurve = hhshape->getCurve ();
pp->labCurve.lccurve = lcshape->getCurve ();
pp->labCurve.clcurve = clshape->getCurve ();
- pp->labCurve.cdcurve = cdshape->getCurve ();
if (pedited) {
pedited->labCurve.brightness = brightness->getEditedState ();
@@ -491,17 +369,6 @@ void LCurve::write (ProcParams* pp, ParamsEdited* pedited)
pedited->labCurve.lcredsk = !lcredsk->get_inconsistent();
pedited->labCurve.rstprotection = rstprotection->getEditedState ();
- // pedited->labCurve.dehazmet = dehazmet->get_active_row_number() != 3;
- pedited->labCurve.dehazmet = dehazmet->get_active_text() != M("GENERAL_UNCHANGED");
-
- //%%%%%%%%%%%%%%%%%%%%%%
- pedited->labCurve.str = str->getEditedState ();
- pedited->labCurve.scal = scal->getEditedState ();
- pedited->labCurve.neigh = neigh->getEditedState ();
- pedited->labCurve.gain = gain->getEditedState ();
- pedited->labCurve.offs = offs->getEditedState ();
- pedited->labCurve.vart = vart->getEditedState ();
-
pedited->labCurve.lcurve = !lshape->isUnChanged ();
pedited->labCurve.acurve = !ashape->isUnChanged ();
@@ -512,31 +379,12 @@ void LCurve::write (ProcParams* pp, ParamsEdited* pedited)
pedited->labCurve.hhcurve = !hhshape->isUnChanged ();
pedited->labCurve.lccurve = !lcshape->isUnChanged ();
pedited->labCurve.clcurve = !clshape->isUnChanged ();
- pedited->labCurve.cdcurve = !cdshape->isUnChanged ();
}
- if (dehazmet->get_active_row_number() == 0) {
- pp->labCurve.dehazmet = "none";
- } else if (dehazmet->get_active_row_number() == 1) {
- pp->labCurve.dehazmet = "uni";
- } else if (dehazmet->get_active_row_number() == 2) {
- pp->labCurve.dehazmet = "low";
- } else if (dehazmet->get_active_row_number() == 3) {
- pp->labCurve.dehazmet = "high";
- }
-
}
-void LCurve::dehazmetChanged()
-{
- if (listener) {
- listener->panelChanged (Evdehazmet, dehazmet->get_active_text ());
- }
- }
-
-
void LCurve::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited)
{
@@ -544,36 +392,16 @@ void LCurve::setDefaults (const ProcParams* defParams, const ParamsEdited* pedit
contrast->setDefault (defParams->labCurve.contrast);
chromaticity->setDefault (defParams->labCurve.chromaticity);
rstprotection->setDefault (defParams->labCurve.rstprotection);
- neigh->setDefault (defParams->labCurve.neigh);
- gain->setDefault (defParams->labCurve.gain);
- offs->setDefault (defParams->labCurve.offs);
- str->setDefault (defParams->labCurve.str);
- scal->setDefault (defParams->labCurve.scal);
- vart->setDefault (defParams->labCurve.vart);
-
if (pedited) {
brightness->setDefaultEditedState (pedited->labCurve.brightness ? Edited : UnEdited);
contrast->setDefaultEditedState (pedited->labCurve.contrast ? Edited : UnEdited);
chromaticity->setDefaultEditedState (pedited->labCurve.chromaticity ? Edited : UnEdited);
rstprotection->setDefaultEditedState (pedited->labCurve.rstprotection ? Edited : UnEdited);
- neigh->setDefaultEditedState (pedited->labCurve.neigh ? Edited : UnEdited);
- gain->setDefaultEditedState (pedited->labCurve.gain ? Edited : UnEdited);
- offs->setDefaultEditedState (pedited->labCurve.offs ? Edited : UnEdited);
- str->setDefaultEditedState (pedited->labCurve.str ? Edited : UnEdited);
- scal->setDefaultEditedState (pedited->labCurve.scal ? Edited : UnEdited);
- vart->setDefaultEditedState (pedited->labCurve.vart ? Edited : UnEdited);
-
} else {
brightness->setDefaultEditedState (Irrelevant);
contrast->setDefaultEditedState (Irrelevant);
chromaticity->setDefaultEditedState (Irrelevant);
rstprotection->setDefaultEditedState (Irrelevant);
- neigh->setDefaultEditedState (Irrelevant);
- gain->setDefaultEditedState (Irrelevant);
- offs->setDefaultEditedState (Irrelevant);
- vart->setDefaultEditedState (Irrelevant);
- str->setDefaultEditedState (Irrelevant);
- scal->setDefaultEditedState (Irrelevant);
}
}
@@ -679,9 +507,6 @@ void LCurve::curveChanged (CurveEditor* ce)
listener->panelChanged (EvLCLCurve, M("HISTORY_CUSTOMCURVE"));
}
- if (ce == cdshape) {
- listener->panelChanged (EvLCDCurve, M("HISTORY_CUSTOMCURVE"));
- }
}
}
@@ -711,32 +536,6 @@ void LCurve::adjusterChanged (Adjuster* a, double newval)
if (listener) {
listener->panelChanged (EvLRSTProtection, costr);
}
- } else if (a == neigh) {
- if (listener) {
- listener->panelChanged (EvLneigh, costr);
- }
- } else if (a == str) {
- if (listener) {
- listener->panelChanged (EvLstr, costr);
- }
- } else if (a == scal) {
- if (listener) {
- listener->panelChanged (EvLscal, costr);
- }
-
- } else if (a == gain) {
- if (listener) {
- listener->panelChanged (EvLgain, costr);
- }
- } else if (a == offs) {
- if (listener) {
- listener->panelChanged (EvLoffs, costr);
- }
- } else if (a == vart) {
- if (listener) {
- listener->panelChanged (EvLvart, costr);
- }
-
} else if (a == chromaticity) {
if (multiImage) {
//if chromaticity==-100 (lowest value), we enter the B&W mode and avoid color shift and rstprotection has no effect
@@ -822,15 +621,6 @@ void LCurve::setBatchMode (bool batchMode)
contrast->showEditedCB ();
chromaticity->showEditedCB ();
rstprotection->showEditedCB ();
- dehazmet->append_text (M("GENERAL_UNCHANGED"));
- neigh->showEditedCB ();
- gain->showEditedCB ();
- offs->showEditedCB ();
- str->showEditedCB ();
- scal->showEditedCB ();
- vart->showEditedCB ();
- curveEditorGD->setBatchMode (batchMode);
-
curveEditorG->setBatchMode (batchMode);
lcshape->setBottomBarColorProvider(NULL, -1);
lcshape->setLeftBarColorProvider(NULL, -1);
@@ -861,10 +651,4 @@ void LCurve::trimValues (rtengine::procparams::ProcParams* pp)
brightness->trimValue(pp->labCurve.brightness);
contrast->trimValue(pp->labCurve.contrast);
chromaticity->trimValue(pp->labCurve.chromaticity);
- str->trimValue(pp->labCurve.str);
- scal->trimValue(pp->labCurve.scal);
- neigh->trimValue(pp->labCurve.neigh);
- gain->trimValue(pp->labCurve.gain);
- offs->trimValue(pp->labCurve.offs);
- vart->trimValue(pp->labCurve.vart);
}
diff --git a/rtgui/labcurve.h b/rtgui/labcurve.h
index ae671a2f5..765574a67 100644
--- a/rtgui/labcurve.h
+++ b/rtgui/labcurve.h
@@ -31,17 +31,10 @@ class LCurve : public ToolParamBlock, public AdjusterListener, public FoldableTo
protected:
CurveEditorGroup* curveEditorG;
- CurveEditorGroup* curveEditorGD;
+// CurveEditorGroup* curveEditorGD;
Adjuster* brightness;
Adjuster* contrast;
Adjuster* chromaticity;
- Adjuster* str;
- Adjuster* scal;
- Adjuster* neigh;
- Adjuster* gain;
- Adjuster* offs;
- Adjuster* vart;
-
DiagonalCurveEditor* lshape;
DiagonalCurveEditor* ashape;
DiagonalCurveEditor* bshape;
@@ -52,7 +45,6 @@ protected:
FlatCurveEditor* hhshape;
Gtk::Label* labmdh;
Gtk::HBox* dhbox;
- MyComboBoxText* dehazmet;
DiagonalCurveEditor* clshape;
DiagonalCurveEditor* cdshape;
@@ -62,7 +54,7 @@ protected:
Gtk::CheckButton* lcredsk;
Adjuster* rstprotection;
- sigc::connection bwtconn, acconn, lcconn, dehazmetConn;
+ sigc::connection bwtconn, acconn, lcconn;
bool lastACVal, lastLCVal;
//%%%%%%%%%%%%%%%%
@@ -90,8 +82,7 @@ public:
virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller);
- private:
- void dehazmetChanged();
+ private:
diff --git a/rtgui/options.cc b/rtgui/options.cc
index efdb98732..5212c6505 100644
--- a/rtgui/options.cc
+++ b/rtgui/options.cc
@@ -177,6 +177,10 @@ void Options::updatePaths()
if (lastLabCurvesDir.empty() || !safe_file_test (lastLabCurvesDir, Glib::FILE_TEST_EXISTS) || !safe_file_test (lastLabCurvesDir, Glib::FILE_TEST_IS_DIR)) {
lastLabCurvesDir = preferredPath;
}
+
+ if (lastDehazDir.empty() || !safe_file_test (lastDehazDir, Glib::FILE_TEST_EXISTS) || !safe_file_test (lastLabCurvesDir, Glib::FILE_TEST_IS_DIR)) {
+ lastDehazDir = preferredPath;
+ }
if (lastDenoiseCurvesDir.empty() || !safe_file_test (lastDenoiseCurvesDir, Glib::FILE_TEST_EXISTS) || !safe_file_test (lastDenoiseCurvesDir, Glib::FILE_TEST_IS_DIR)) {
lastDenoiseCurvesDir = preferredPath;
@@ -682,6 +686,7 @@ void Options::setDefaults ()
// at the end of the "updatePaths" method.
lastRgbCurvesDir = "";
lastLabCurvesDir = "";
+ lastDehazDir = "";
lastDenoiseCurvesDir = "";
lastWaveletCurvesDir = "";
lastPFCurvesDir = "";
@@ -1733,6 +1738,7 @@ int Options::readFromFile (Glib::ustring fname)
safeDirGet(keyFile, "Dialogs", "LastFlatfieldDir", lastFlatfieldDir);
safeDirGet(keyFile, "Dialogs", "LastRgbCurvesDir", lastRgbCurvesDir);
safeDirGet(keyFile, "Dialogs", "LastLabCurvesDir", lastLabCurvesDir);
+ safeDirGet(keyFile, "Dialogs", "LastDehazDir", lastDehazDir);
safeDirGet(keyFile, "Dialogs", "LastDenoiseCurvesDir", lastDenoiseCurvesDir);
safeDirGet(keyFile, "Dialogs", "LastWaveletCurvesDir", lastWaveletCurvesDir);
safeDirGet(keyFile, "Dialogs", "LastPFCurvesDir", lastPFCurvesDir);
@@ -2069,6 +2075,7 @@ int Options::saveToFile (Glib::ustring fname)
keyFile.set_string ("Dialogs", "LastFlatfieldDir", lastFlatfieldDir);
keyFile.set_string ("Dialogs", "LastRgbCurvesDir", lastRgbCurvesDir);
keyFile.set_string ("Dialogs", "LastLabCurvesDir", lastLabCurvesDir);
+ keyFile.set_string ("Dialogs", "LastDehazDir", lastDehazDir);
keyFile.set_string ("Dialogs", "LastDenoiseCurvesDir", lastDenoiseCurvesDir);
keyFile.set_string ("Dialogs", "LastWaveletCurvesDir", lastWaveletCurvesDir);
keyFile.set_string ("Dialogs", "LastPFCurvesDir", lastPFCurvesDir);
diff --git a/rtgui/options.h b/rtgui/options.h
index 753ae01bb..f619a9455 100644
--- a/rtgui/options.h
+++ b/rtgui/options.h
@@ -278,6 +278,7 @@ public:
Glib::ustring lastFlatfieldDir;
Glib::ustring lastRgbCurvesDir;
Glib::ustring lastLabCurvesDir;
+ Glib::ustring lastDehazDir;
Glib::ustring lastDenoiseCurvesDir;
Glib::ustring lastWaveletCurvesDir;
Glib::ustring lastPFCurvesDir;
diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc
index 30e1ad38a..6d81e28d8 100644
--- a/rtgui/paramsedited.cc
+++ b/rtgui/paramsedited.cc
@@ -49,6 +49,17 @@ void ParamsEdited::set (bool v)
toneCurve.expcomp = v;
toneCurve.hrenabled = v;
toneCurve.method = v;
+ dehaz.cdcurve = v;
+ dehaz.dehazmet = v;
+ dehaz.enabled = v;
+ dehaz.str = v;
+ dehaz.scal = v;
+ dehaz.neigh = v;
+ dehaz.gain = v;
+ dehaz.offs = v;
+ dehaz.vart = v;
+ dehaz.transmissionCurve = v;
+ dehaz.retinex = v;
labCurve.lcurve = v;
labCurve.acurve = v;
labCurve.bcurve = v;
@@ -58,14 +69,6 @@ void ParamsEdited::set (bool v)
labCurve.hhcurve = v;
labCurve.lccurve = v;
labCurve.clcurve = v;
- labCurve.cdcurve = v;
- labCurve.dehazmet = v;
- labCurve.str = v;
- labCurve.scal = v;
- labCurve.neigh = v;
- labCurve.gain = v;
- labCurve.offs = v;
- labCurve.vart = v;
labCurve.brightness = v;
labCurve.contrast = v;
labCurve.chromaticity = v;
@@ -512,6 +515,17 @@ void ParamsEdited::initFrom (const std::vector
toneCurve.expcomp = toneCurve.expcomp && p.toneCurve.expcomp == other.toneCurve.expcomp;
toneCurve.hrenabled = toneCurve.hrenabled && p.toneCurve.hrenabled == other.toneCurve.hrenabled;
toneCurve.method = toneCurve.method && p.toneCurve.method == other.toneCurve.method;
+ dehaz.cdcurve = dehaz.cdcurve && p.dehaz.cdcurve == other.dehaz.cdcurve;
+ dehaz.transmissionCurve = dehaz.transmissionCurve && p.dehaz.transmissionCurve == other.dehaz.transmissionCurve;
+ dehaz.dehazmet = dehaz.dehazmet && p.dehaz.dehazmet == other.dehaz.dehazmet;
+ dehaz.str = dehaz.str && p.dehaz.str == other.dehaz.str;
+ dehaz.scal = dehaz.scal && p.dehaz.scal == other.dehaz.scal;
+ dehaz.neigh = dehaz.neigh && p.dehaz.neigh == other.dehaz.neigh;
+ dehaz.gain = dehaz.gain && p.dehaz.gain == other.dehaz.gain;
+ dehaz.offs = dehaz.offs && p.dehaz.offs == other.dehaz.offs;
+ dehaz.vart = dehaz.vart && p.dehaz.vart == other.dehaz.vart;
+ dehaz.enabled = dehaz.enabled && p.dehaz.enabled == other.dehaz.enabled;
+ dehaz.retinex = dehaz.retinex && p.dehaz.retinex == other.dehaz.retinex;
labCurve.lcurve = labCurve.lcurve && p.labCurve.lcurve == other.labCurve.lcurve;
labCurve.acurve = labCurve.acurve && p.labCurve.acurve == other.labCurve.acurve;
labCurve.bcurve = labCurve.bcurve && p.labCurve.bcurve == other.labCurve.bcurve;
@@ -521,14 +535,6 @@ void ParamsEdited::initFrom (const std::vector
labCurve.hhcurve = labCurve.hhcurve && p.labCurve.hhcurve == other.labCurve.hhcurve;
labCurve.lccurve = labCurve.lccurve && p.labCurve.lccurve == other.labCurve.lccurve;
labCurve.clcurve = labCurve.clcurve && p.labCurve.clcurve == other.labCurve.clcurve;
- labCurve.cdcurve = labCurve.cdcurve && p.labCurve.cdcurve == other.labCurve.cdcurve;
- labCurve.dehazmet = labCurve.dehazmet && p.labCurve.dehazmet == other.labCurve.dehazmet;
- labCurve.str = labCurve.str && p.labCurve.str == other.labCurve.str;
- labCurve.scal = labCurve.scal && p.labCurve.scal == other.labCurve.scal;
- labCurve.neigh = labCurve.neigh && p.labCurve.neigh == other.labCurve.neigh;
- labCurve.gain = labCurve.gain && p.labCurve.gain == other.labCurve.gain;
- labCurve.offs = labCurve.offs && p.labCurve.offs == other.labCurve.offs;
- labCurve.vart = labCurve.vart && p.labCurve.vart == other.labCurve.vart;
labCurve.brightness = labCurve.brightness && p.labCurve.brightness == other.labCurve.brightness;
labCurve.contrast = labCurve.contrast && p.labCurve.contrast == other.labCurve.contrast;
labCurve.chromaticity = labCurve.chromaticity && p.labCurve.chromaticity == other.labCurve.chromaticity;
@@ -1010,7 +1016,49 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
if (toneCurve.method) {
toEdit.toneCurve.method = mods.toneCurve.method;
}
+
+ if (dehaz.enabled) {
+ toEdit.dehaz.enabled = mods.dehaz.enabled;
+ }
+ if (dehaz.cdcurve) {
+ toEdit.dehaz.cdcurve = mods.dehaz.cdcurve;
+ }
+
+ if (dehaz.transmissionCurve) {
+ toEdit.dehaz.transmissionCurve = mods.dehaz.transmissionCurve;
+ }
+
+ if (dehaz.str) {
+ toEdit.dehaz.str = mods.dehaz.str;
+ }
+
+ if (dehaz.scal) {
+ toEdit.dehaz.scal = mods.dehaz.scal;
+ }
+
+ if (dehaz.retinex) {
+ toEdit.dehaz.retinex = mods.dehaz.retinex;
+ }
+
+ if (dehaz.enabled) {
+ toEdit.dehaz.enabled = mods.dehaz.enabled;
+ }
+
+ if (dehaz.neigh) {
+ toEdit.dehaz.neigh = mods.dehaz.neigh;
+ }
+
+ if (dehaz.gain) {
+ toEdit.dehaz.gain = mods.dehaz.gain;
+ }
+ if (dehaz.offs) {
+ toEdit.dehaz.offs = mods.dehaz.offs;
+ }
+ if (dehaz.vart) {
+ toEdit.dehaz.vart = mods.dehaz.vart;
+ }
+
if (labCurve.lcurve) {
toEdit.labCurve.lcurve = mods.labCurve.lcurve;
}
@@ -1042,15 +1090,15 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
if (labCurve.lccurve) {
toEdit.labCurve.lccurve = mods.labCurve.lccurve;
}
- if (labCurve.dehazmet) {
- toEdit.labCurve.dehazmet = mods.labCurve.dehazmet;
- }
+// if (labCurve.dehazmet) {
+// toEdit.labCurve.dehazmet = mods.labCurve.dehazmet;
+// }
if (labCurve.clcurve) {
toEdit.labCurve.clcurve = mods.labCurve.clcurve;
}
- if (labCurve.cdcurve) {
- toEdit.labCurve.cdcurve = mods.labCurve.cdcurve;
- }
+ // if (labCurve.cdcurve) {
+ // toEdit.labCurve.cdcurve = mods.labCurve.cdcurve;
+ // }
if (labCurve.brightness) {
toEdit.labCurve.brightness = dontforceSet && options.baBehav[ADDSET_LC_BRIGHTNESS] ? toEdit.labCurve.brightness + mods.labCurve.brightness : mods.labCurve.brightness;
@@ -1063,26 +1111,6 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
if (labCurve.chromaticity) {
toEdit.labCurve.chromaticity = dontforceSet && options.baBehav[ADDSET_LC_CHROMATICITY] ? toEdit.labCurve.chromaticity + mods.labCurve.chromaticity : mods.labCurve.chromaticity;
}
- if (labCurve.str) {
- toEdit.labCurve.str = mods.labCurve.str;
- }
-
- if (labCurve.scal) {
- toEdit.labCurve.scal = mods.labCurve.scal;
- }
-
- if (labCurve.neigh) {
- toEdit.labCurve.neigh = mods.labCurve.neigh;
- }
- if (labCurve.gain) {
- toEdit.labCurve.gain = mods.labCurve.gain;
- }
- if (labCurve.offs) {
- toEdit.labCurve.offs = mods.labCurve.offs;
- }
- if (labCurve.vart) {
- toEdit.labCurve.vart = mods.labCurve.vart;
- }
if (labCurve.avoidcolorshift) {
toEdit.labCurve.avoidcolorshift = mods.labCurve.avoidcolorshift;
diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h
index 021b45c86..10dbfe828 100644
--- a/rtgui/paramsedited.h
+++ b/rtgui/paramsedited.h
@@ -55,12 +55,10 @@ public:
bool method;
};
-class LCurveParamsEdited
+class DehazParamsEdited
{
public:
- bool brightness;
- bool contrast;
- bool chromaticity;
+ bool enabled;
bool str;
bool scal;
bool neigh;
@@ -68,7 +66,20 @@ public:
bool offs;
bool dehazmet;
bool vart;
-
+ bool method;
+ bool transmissionCurve;
+ bool cdcurve;
+ bool retinex;
+
+};
+
+
+class LCurveParamsEdited
+{
+public:
+ bool brightness;
+ bool contrast;
+ bool chromaticity;
bool avoidcolorshift;
bool rstprotection;
bool lcurve;
@@ -81,8 +92,6 @@ public:
bool hhcurve;
bool lccurve;
bool clcurve;
- bool cdcurve;
-
bool enabled;
bool method;
};
@@ -708,6 +717,7 @@ public:
LCurveParamsEdited labCurve;
RGBCurvesParamsEdited rgbCurves;
ColorToningEdited colorToning;
+ DehazParamsEdited dehaz;
SharpeningParamsEdited sharpening;
SharpeningParamsEdited prsharpening;
SharpenEdgeParamsEdited sharpenEdge;
diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc
index c77a9cdb5..3436a9c4d 100644
--- a/rtgui/toolpanelcoord.cc
+++ b/rtgui/toolpanelcoord.cc
@@ -59,6 +59,7 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL)
colorappearance = Gtk::manage (new ColorAppearance ());
whitebalance = Gtk::manage (new WhiteBalance ());
vignetting = Gtk::manage (new Vignetting ());
+ dehaz = Gtk::manage (new Dehaz ());
gradient = Gtk::manage (new Gradient ());
pcvignette = Gtk::manage (new PCVignette ());
perspective = Gtk::manage (new PerspCorrection ());
@@ -125,6 +126,8 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL)
toolPanels.push_back (colortoning);
addPanel (exposurePanel, epd);
toolPanels.push_back (epd);
+ addPanel (exposurePanel, dehaz);
+ toolPanels.push_back (dehaz);
addPanel (exposurePanel, pcvignette);
toolPanels.push_back (pcvignette);
addPanel (exposurePanel, gradient);
diff --git a/rtgui/toolpanelcoord.h b/rtgui/toolpanelcoord.h
index 8362a3f37..868fad258 100644
--- a/rtgui/toolpanelcoord.h
+++ b/rtgui/toolpanelcoord.h
@@ -51,6 +51,7 @@
#include "perspective.h"
#include "rotate.h"
#include "vignetting.h"
+#include "dehaz.h"
#include "gradient.h"
#include "pcvignette.h"
#include "toolbar.h"
@@ -101,6 +102,7 @@ protected:
WhiteBalance* whitebalance;
Vignetting* vignetting;
Gradient* gradient;
+ Dehaz* dehaz;
PCVignette* pcvignette;
LensGeometry* lensgeom;
LensProfilePanel* lensProf;