Add linear mode to HSL
This commit is contained in:
parent
528d85b1f9
commit
e82c79bd8a
@ -1560,7 +1560,8 @@ TP_DEHAZ_MLABEL_TOOLTIP;Should be near of min=0 max=32768\nRestored image with n
|
|||||||
TP_DEHAZ_TLABEL;TR m=%1 M=%2 Me=%3 Si=%4 Tm=%5 TM=%6
|
TP_DEHAZ_TLABEL;TR m=%1 M=%2 Me=%3 Si=%4 Tm=%5 TM=%6
|
||||||
TP_DEHAZ_TLABEL_TOOLTIP;Transmission map result\nm=Mini M=Maxi used by Variance\nMe=Mean Si=Sigma\nTm=Min TM=Max of Transmission map
|
TP_DEHAZ_TLABEL_TOOLTIP;Transmission map result\nm=Mini M=Maxi used by Variance\nMe=Mean Si=Sigma\nTm=Min TM=Max of Transmission map
|
||||||
TP_DEHAZ_LABSPACE;L*a*b*
|
TP_DEHAZ_LABSPACE;L*a*b*
|
||||||
TP_DEHAZ_HSLSPACE;HSL
|
TP_DEHAZ_HSLSPACE;HSL-Log
|
||||||
|
TP_DEHAZ_HSLSPACELIN;HSL-Lin
|
||||||
TP_DEHAZ_STR;Strength
|
TP_DEHAZ_STR;Strength
|
||||||
TP_DEHAZ_STR_TOOLTIP;Mixture in proportion to the original image and that obtained by Retinex algoritm
|
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_RETIN;Complete Retinex algoritm
|
||||||
|
@ -207,8 +207,9 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, int width
|
|||||||
float delta;
|
float delta;
|
||||||
float eps = 2.f;
|
float eps = 2.f;
|
||||||
bool useHsl = deh.dehazcolorspace == "HSL";
|
bool useHsl = deh.dehazcolorspace == "HSL";
|
||||||
|
bool useHslLin = deh.dehazcolorspace == "HSLLIN";
|
||||||
float gain2 = (float) deh.gain / 100.f; //def =1 not use
|
float gain2 = (float) deh.gain / 100.f; //def =1 not use
|
||||||
// gain2 = useHsl ? gain2 * 0.5f : gain2;
|
gain2 = useHslLin ? gain2 * 0.5f : gain2;
|
||||||
float offse = (float) deh.offs; //def = 0 not use
|
float offse = (float) deh.offs; //def = 0 not use
|
||||||
int scal = deh.scal; //def=3
|
int scal = deh.scal; //def=3
|
||||||
int nei = (int) 2.8f * deh.neigh; //def = 220
|
int nei = (int) 2.8f * deh.neigh; //def = 220
|
||||||
@ -216,7 +217,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, int width
|
|||||||
float strength = (float) deh.str / 100.f; // Blend with original L channel data
|
float strength = (float) deh.str / 100.f; // Blend with original L channel data
|
||||||
float limD = (float) deh.limd;
|
float limD = (float) deh.limd;
|
||||||
limD = pow(limD, 1.7f);//about 2500 enough
|
limD = pow(limD, 1.7f);//about 2500 enough
|
||||||
// limD *= useHsl ? 10.f : 1.f;
|
limD *= useHslLin ? 10.f : 1.f;
|
||||||
float ilimD = 1.f / limD;
|
float ilimD = 1.f / limD;
|
||||||
int modedehaz = 0; // default to 0 ( deh.dehazmet == "uni" )
|
int modedehaz = 0; // default to 0 ( deh.dehazmet == "uni" )
|
||||||
bool execcur = false;
|
bool execcur = false;
|
||||||
@ -283,9 +284,9 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, int width
|
|||||||
for (int i = 0; i < H_L; i++) {
|
for (int i = 0; i < H_L; i++) {
|
||||||
int j = 0;
|
int j = 0;
|
||||||
#ifdef __SSE2__
|
#ifdef __SSE2__
|
||||||
if(useHsl) {
|
if(useHslLin) {
|
||||||
for (; j < W_L - 3; j += 4) {
|
for (; j < W_L - 3; j += 4) {
|
||||||
_mm_storeu_ps(&luminance[i][j], LVFU(luminance[i][j]) + pondv * xlogf(LIMV(LVFU(src[i][j]) / LVFU(out[i][j]), limMinv, limMaxv) ));
|
_mm_storeu_ps(&luminance[i][j], LVFU(luminance[i][j]) + pondv * (LIMV(LVFU(src[i][j]) / LVFU(out[i][j]), limMinv, limMaxv) ));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (; j < W_L - 3; j += 4) {
|
for (; j < W_L - 3; j += 4) {
|
||||||
@ -293,9 +294,9 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, int width
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if(useHsl) {
|
if(useHslLin) {
|
||||||
for (; j < W_L; j++) {
|
for (; j < W_L; j++) {
|
||||||
luminance[i][j] += pond * xlogf(LIM(src[i][j] / out[i][j], ilimD, limD));
|
luminance[i][j] += pond * (LIM(src[i][j] / out[i][j], ilimD, limD));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (; j < W_L; j++) {
|
for (; j < W_L; j++) {
|
||||||
|
@ -1841,13 +1841,15 @@ void RawImageSource::dehaz(RAWParams raw, ColorManagementParams cmp, DehazParams
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool useHsl = deh.dehazcolorspace == "HSL";
|
bool useHsl = deh.dehazcolorspace == "HSL";
|
||||||
if(useHsl) {
|
bool useHslLin = deh.dehazcolorspace == "HSLLIN";
|
||||||
|
if(useHsl || useHslLin) {
|
||||||
for (int i = border; i < H - border; i++ )
|
for (int i = border; i < H - border; i++ )
|
||||||
for (int j = border; j < W - border; j++) {
|
for (int j = border; j < W - border; j++) {
|
||||||
float H,S,L;
|
float H,S,L;
|
||||||
//rgb=>lab
|
//rgb=>lab
|
||||||
Color::rgb2hsl(red[i][j], green[i][j], blue[i][j],H,S,L);
|
Color::rgb2hsl(red[i][j], green[i][j], blue[i][j],H,S,L);
|
||||||
L *= 65535.f;
|
// L *= 65535.f;
|
||||||
|
L *= 32768.f;
|
||||||
labTmp[i - border][j - border] = L;
|
labTmp[i - border][j - border] = L;
|
||||||
|
|
||||||
if(dehaHcontlutili) {
|
if(dehaHcontlutili) {
|
||||||
@ -1889,12 +1891,13 @@ void RawImageSource::dehaz(RAWParams raw, ColorManagementParams cmp, DehazParams
|
|||||||
|
|
||||||
delete [] labTmpBuffer;
|
delete [] labTmpBuffer;
|
||||||
|
|
||||||
if(useHsl) {
|
if(useHsl || useHslLin) {
|
||||||
for (int i = border; i < H - border; i++ ) {
|
for (int i = border; i < H - border; i++ ) {
|
||||||
int j = border;
|
int j = border;
|
||||||
for (; j < W - border; j++) {
|
for (; j < W - border; j++) {
|
||||||
float R, G, B;
|
float R, G, B;
|
||||||
Color::hsl2rgb(labdeha->a[i - border][j - border],labdeha->b[i - border][j - border],labdeha->L[i - border][j - border]/65535.f,R,G,B);
|
// Color::hsl2rgb(labdeha->a[i - border][j - border],labdeha->b[i - border][j - border],labdeha->L[i - border][j - border]/65535.f,R,G,B);
|
||||||
|
Color::hsl2rgb(labdeha->a[i - border][j - border],labdeha->b[i - border][j - border],labdeha->L[i - border][j - border]/32768.f,R,G,B);
|
||||||
red[i][j] = R;
|
red[i][j] = R;
|
||||||
green[i][j] = G;
|
green[i][j] = G;
|
||||||
blue[i][j] = B;
|
blue[i][j] = B;
|
||||||
|
@ -48,6 +48,7 @@ Dehaz::Dehaz () : FoldableToolPanel(this, "dehaz", M("TP_DEHAZ_LABEL"), false, t
|
|||||||
dehazcolorspace = Gtk::manage (new MyComboBoxText ());
|
dehazcolorspace = Gtk::manage (new MyComboBoxText ());
|
||||||
dehazcolorspace->append_text (M("TP_DEHAZ_LABSPACE"));
|
dehazcolorspace->append_text (M("TP_DEHAZ_LABSPACE"));
|
||||||
dehazcolorspace->append_text (M("TP_DEHAZ_HSLSPACE"));
|
dehazcolorspace->append_text (M("TP_DEHAZ_HSLSPACE"));
|
||||||
|
dehazcolorspace->append_text (M("TP_DEHAZ_HSLSPACELIN"));
|
||||||
dehazcolorspace->set_active(0);
|
dehazcolorspace->set_active(0);
|
||||||
dehazmetConn = dehazcolorspace->signal_changed().connect ( sigc::mem_fun(*this, &Dehaz::dehazColorSpaceChanged) );
|
dehazmetConn = dehazcolorspace->signal_changed().connect ( sigc::mem_fun(*this, &Dehaz::dehazColorSpaceChanged) );
|
||||||
dehazcolorspace->set_tooltip_markup (M("TP_DEHAZ_COLORSPACE_TOOLTIP"));
|
dehazcolorspace->set_tooltip_markup (M("TP_DEHAZ_COLORSPACE_TOOLTIP"));
|
||||||
@ -373,8 +374,9 @@ void Dehaz::read (const ProcParams* pp, const ParamsEdited* pedited)
|
|||||||
dehazcolorspace->set_active (0);
|
dehazcolorspace->set_active (0);
|
||||||
} else if (pp->dehaz.dehazcolorspace == "HSL") {
|
} else if (pp->dehaz.dehazcolorspace == "HSL") {
|
||||||
dehazcolorspace->set_active (1);
|
dehazcolorspace->set_active (1);
|
||||||
|
} else if (pp->dehaz.dehazcolorspace == "HSLLIN") {
|
||||||
|
dehazcolorspace->set_active (2);
|
||||||
}
|
}
|
||||||
|
|
||||||
retinexConn.block(false);
|
retinexConn.block(false);
|
||||||
retinexChanged ();
|
retinexChanged ();
|
||||||
retinexConn.block(false);
|
retinexConn.block(false);
|
||||||
@ -479,6 +481,8 @@ void Dehaz::write (ProcParams* pp, ParamsEdited* pedited)
|
|||||||
pp->dehaz.dehazcolorspace = "Lab";
|
pp->dehaz.dehazcolorspace = "Lab";
|
||||||
} else if (dehazcolorspace->get_active_row_number() == 1) {
|
} else if (dehazcolorspace->get_active_row_number() == 1) {
|
||||||
pp->dehaz.dehazcolorspace = "HSL";
|
pp->dehaz.dehazcolorspace = "HSL";
|
||||||
|
} else if (dehazcolorspace->get_active_row_number() == 2) {
|
||||||
|
pp->dehaz.dehazcolorspace = "HSLLIN";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user