Fixed - refreshing the preview in the Median NR module - issue2014 issue2423
This commit is contained in:
parent
1bb6a81db2
commit
5229b9142d
@ -1175,8 +1175,9 @@ TP_DIRPYRDENOISE_LM;Luminance only
|
|||||||
TP_DIRPYRDENOISE_LUMA;Luminance
|
TP_DIRPYRDENOISE_LUMA;Luminance
|
||||||
TP_DIRPYRDENOISE_MEDMETHOD;Median method
|
TP_DIRPYRDENOISE_MEDMETHOD;Median method
|
||||||
TP_DIRPYRDENOISE_MEDTYPE;Median type
|
TP_DIRPYRDENOISE_MEDTYPE;Median type
|
||||||
TP_DIRPYRDENOISE_MED;Median - Luminance only
|
TP_DIRPYRDENOISE_MED;Median
|
||||||
TP_DIRPYRDENOISE_MED_TOOLTIP;-
|
TP_DIRPYRDENOISE_MET_TOOLTIP;Median filtering type:\n3x3, 3x3 strong and 5x5 (RGB) or 3x3, 3x3 strong, 5x5, 5x5 strong or 7x7 (L only and Lab) in the treatment - Increases noise reduction.
|
||||||
|
TP_DIRPYRDENOISE_MED_TOOLTIP;Enabled median denoising
|
||||||
TP_DIRPYRDENOISE_METHOD;Method
|
TP_DIRPYRDENOISE_METHOD;Method
|
||||||
TP_DIRPYRDENOISE_METHOD_TOOLTIP;For raw images either RGB or Lab methods can be used.\n\nFor non-raw images the Lab method will be used, regardless of the selection.
|
TP_DIRPYRDENOISE_METHOD_TOOLTIP;For raw images either RGB or Lab methods can be used.\n\nFor non-raw images the Lab method will be used, regardless of the selection.
|
||||||
TP_DIRPYRDENOISE_METM_TOOLTIP;When using the "Luminance only" and "Lab" methods, median filtering will be performed just after the wavelet step in the noise reduction pipeline.\nWhen using the "RGB" mode, it will be performed at the very end of the noise reduction pipeline.
|
TP_DIRPYRDENOISE_METM_TOOLTIP;When using the "Luminance only" and "Lab" methods, median filtering will be performed just after the wavelet step in the noise reduction pipeline.\nWhen using the "RGB" mode, it will be performed at the very end of the noise reduction pipeline.
|
||||||
|
@ -234,14 +234,14 @@ float media(float *elements, int N)
|
|||||||
|
|
||||||
const short int imheight=src->height, imwidth=src->width;
|
const short int imheight=src->height, imwidth=src->width;
|
||||||
|
|
||||||
if (dnparams.luma==0 && dnparams.chroma==0 && dnparams.methodmed=="none" ) {
|
if (dnparams.luma==0 && dnparams.chroma==0 && !dnparams.median ) {
|
||||||
//nothing to do; copy src to dst or do nothing in case src == dst
|
//nothing to do; copy src to dst or do nothing in case src == dst
|
||||||
if(src != dst)
|
if(src != dst)
|
||||||
memcpy(dst->data,src->data,dst->width*dst->height*3*sizeof(float));
|
memcpy(dst->data,src->data,dst->width*dst->height*3*sizeof(float));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dnparams.luma!=0 || dnparams.chroma!=0 || dnparams.methodmed=="Lab" || dnparams.methodmed=="Lonly") {
|
if (dnparams.luma!=0 || dnparams.chroma!=0 || dnparams.methodmed=="Lab" || dnparams.methodmed=="Lonly" ) {
|
||||||
perf=false;
|
perf=false;
|
||||||
if(dnparams.dmethod=="RGB") perf=true;//RGB mode
|
if(dnparams.dmethod=="RGB") perf=true;//RGB mode
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
@ -589,7 +589,7 @@ float media(float *elements, int N)
|
|||||||
float realblue2 = interm_med + intermblue2; if (realblue2 < 0.f) realblue2=0.01f;
|
float realblue2 = interm_med + intermblue2; if (realblue2 < 0.f) realblue2=0.01f;
|
||||||
float noisevarab_b = SQR(realblue);
|
float noisevarab_b = SQR(realblue);
|
||||||
bool execwavelet=true;
|
bool execwavelet=true;
|
||||||
if(noisevarL < 0.00007f && interm_med < 0.1f && (dnparams.methodmed=="Lab" || dnparams.methodmed=="Lonly")) execwavelet=false;//do not exec wavelet if sliders luminance and chroma are very small and median need
|
if(noisevarL < 0.00007f && interm_med < 0.1f && dnparams.median && (dnparams.methodmed=="Lab" || dnparams.methodmed=="Lonly")) execwavelet=false;//do not exec wavelet if sliders luminance and chroma are very small and median need
|
||||||
//we considered user don't want wavelet
|
//we considered user don't want wavelet
|
||||||
if(execwavelet) {//gain time if user choose only median sliders L <=1 slider chrom master < 1
|
if(execwavelet) {//gain time if user choose only median sliders L <=1 slider chrom master < 1
|
||||||
{ // enclosing this code in a block frees about 120 MB before allocating 20 MB after this block (measured with D700 NEF)
|
{ // enclosing this code in a block frees about 120 MB before allocating 20 MB after this block (measured with D700 NEF)
|
||||||
@ -636,7 +636,8 @@ float media(float *elements, int N)
|
|||||||
else if(dnparams.methodmed=="Lab") metchoice=2;
|
else if(dnparams.methodmed=="Lab") metchoice=2;
|
||||||
|
|
||||||
//median on Luminance Lab only
|
//median on Luminance Lab only
|
||||||
if(metchoice==1 || metchoice ==2) {
|
if( (metchoice==1 || metchoice==2) && dnparams.median) {
|
||||||
|
//printf("Lab et Lonly \n");
|
||||||
for(int iteration=1;iteration<=dnparams.passes;iteration++){
|
for(int iteration=1;iteration<=dnparams.passes;iteration++){
|
||||||
//printf("pas=%i\n",iteration);
|
//printf("pas=%i\n",iteration);
|
||||||
int wid=labdn->W;
|
int wid=labdn->W;
|
||||||
@ -664,6 +665,9 @@ float media(float *elements, int N)
|
|||||||
methmedL = 4;
|
methmedL = 4;
|
||||||
borderL = 3;
|
borderL = 3;
|
||||||
}
|
}
|
||||||
|
if (metchoice==1 || metchoice==2)
|
||||||
|
{ /*printf("LONLY methmedL=%d\n", methmedL);*/
|
||||||
|
|
||||||
if(methmedL < 2) {
|
if(methmedL < 2) {
|
||||||
for (int i=1; i<hei-1; i++) {
|
for (int i=1; i<hei-1; i++) {
|
||||||
float pp[9],results[5],temp;
|
float pp[9],results[5],temp;
|
||||||
@ -734,8 +738,8 @@ float media(float *elements, int N)
|
|||||||
labdn->L[i][j] = tmL[i][j];
|
labdn->L[i][j] = tmL[i][j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//a
|
}
|
||||||
if(metchoice==2) {
|
if(metchoice==2) {/*printf(" AB methmedL=%d\n", methmedL);*/
|
||||||
if(methmedL < 2) {
|
if(methmedL < 2) {
|
||||||
for (int i=1; i<hei-1; i++) {
|
for (int i=1; i<hei-1; i++) {
|
||||||
float pp[9],temp;
|
float pp[9],temp;
|
||||||
@ -1158,7 +1162,8 @@ float media(float *elements, int N)
|
|||||||
|
|
||||||
|
|
||||||
//median 3x3 in complement on RGB
|
//median 3x3 in complement on RGB
|
||||||
if(dnparams.methodmed=="RGB") {
|
if(dnparams.methodmed=="RGB" && dnparams.median) {
|
||||||
|
//printf("RGB den\n");
|
||||||
int wid=dst->width, hei=dst->height;
|
int wid=dst->width, hei=dst->height;
|
||||||
float** tm;
|
float** tm;
|
||||||
tm = new float*[hei];
|
tm = new float*[hei];
|
||||||
|
@ -102,7 +102,7 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this), lastenhance(false) {
|
|||||||
hsep2->show ();
|
hsep2->show ();
|
||||||
|
|
||||||
methodmed = Gtk::manage (new MyComboBoxText ());
|
methodmed = Gtk::manage (new MyComboBoxText ());
|
||||||
methodmed->append_text (M("TP_DIRPYRDENOISE_NONE"));
|
//methodmed->append_text (M("TP_DIRPYRDENOISE_NONE"));
|
||||||
methodmed->append_text (M("TP_DIRPYRDENOISE_LM"));
|
methodmed->append_text (M("TP_DIRPYRDENOISE_LM"));
|
||||||
methodmed->append_text (M("TP_DIRPYRDENOISE_LABM"));
|
methodmed->append_text (M("TP_DIRPYRDENOISE_LABM"));
|
||||||
methodmed->append_text (M("TP_DIRPYRDENOISE_RGBM"));
|
methodmed->append_text (M("TP_DIRPYRDENOISE_RGBM"));
|
||||||
@ -151,6 +151,7 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this), lastenhance(false) {
|
|||||||
pack_start (*enhance);
|
pack_start (*enhance);
|
||||||
|
|
||||||
pack_start (*hsep2);
|
pack_start (*hsep2);
|
||||||
|
pack_start (*median);
|
||||||
|
|
||||||
ctboxm->pack_start (*methodmed);
|
ctboxm->pack_start (*methodmed);
|
||||||
ctbox->pack_start (*medmethod);
|
ctbox->pack_start (*medmethod);
|
||||||
@ -160,7 +161,6 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this), lastenhance(false) {
|
|||||||
pack_start (*ctboxrgb);
|
pack_start (*ctboxrgb);
|
||||||
pack_start (*passes);
|
pack_start (*passes);
|
||||||
|
|
||||||
// pack_start (*median);
|
|
||||||
|
|
||||||
// pack_start (*perform);
|
// pack_start (*perform);
|
||||||
enhanConn = enhance->signal_toggled().connect( sigc::mem_fun(*this, &DirPyrDenoise::enhanceChanged) );
|
enhanConn = enhance->signal_toggled().connect( sigc::mem_fun(*this, &DirPyrDenoise::enhanceChanged) );
|
||||||
@ -184,14 +184,14 @@ void DirPyrDenoise::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
dmethod->set_active (1);
|
dmethod->set_active (1);
|
||||||
|
|
||||||
methodmed->set_active (0);
|
methodmed->set_active (0);
|
||||||
if (pp->dirpyrDenoise.methodmed=="none")
|
// if (pp->dirpyrDenoise.methodmed=="none")
|
||||||
|
// methodmed->set_active (0);
|
||||||
|
if (pp->dirpyrDenoise.methodmed=="Lonly")
|
||||||
methodmed->set_active (0);
|
methodmed->set_active (0);
|
||||||
else if (pp->dirpyrDenoise.methodmed=="Lonly")
|
|
||||||
methodmed->set_active (1);
|
|
||||||
else if (pp->dirpyrDenoise.methodmed=="Lab")
|
else if (pp->dirpyrDenoise.methodmed=="Lab")
|
||||||
methodmed->set_active (2);
|
methodmed->set_active (1);
|
||||||
else if (pp->dirpyrDenoise.methodmed=="RGB")
|
else if (pp->dirpyrDenoise.methodmed=="RGB")
|
||||||
methodmed->set_active (3);
|
methodmed->set_active (2);
|
||||||
methodmedChanged();
|
methodmedChanged();
|
||||||
|
|
||||||
medmethod->set_active (0);
|
medmethod->set_active (0);
|
||||||
@ -229,7 +229,7 @@ void DirPyrDenoise::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
if (!pedited->dirpyrDenoise.medmethod)
|
if (!pedited->dirpyrDenoise.medmethod)
|
||||||
medmethod->set_active (4);
|
medmethod->set_active (4);
|
||||||
if (!pedited->dirpyrDenoise.methodmed)
|
if (!pedited->dirpyrDenoise.methodmed)
|
||||||
methodmed->set_active (3);
|
methodmed->set_active (2);
|
||||||
|
|
||||||
luma->setEditedState (pedited->dirpyrDenoise.luma ? Edited : UnEdited);
|
luma->setEditedState (pedited->dirpyrDenoise.luma ? Edited : UnEdited);
|
||||||
Ldetail->setEditedState (pedited->dirpyrDenoise.Ldetail ? Edited : UnEdited);
|
Ldetail->setEditedState (pedited->dirpyrDenoise.Ldetail ? Edited : UnEdited);
|
||||||
@ -291,7 +291,7 @@ void DirPyrDenoise::write (ProcParams* pp, ParamsEdited* pedited) {
|
|||||||
pedited->dirpyrDenoise.dmethod = dmethod->get_active_row_number() != 2;
|
pedited->dirpyrDenoise.dmethod = dmethod->get_active_row_number() != 2;
|
||||||
pedited->dirpyrDenoise.medmethod = medmethod->get_active_row_number() != 4;
|
pedited->dirpyrDenoise.medmethod = medmethod->get_active_row_number() != 4;
|
||||||
pedited->dirpyrDenoise.rgbmethod = rgbmethod->get_active_row_number() != 2;
|
pedited->dirpyrDenoise.rgbmethod = rgbmethod->get_active_row_number() != 2;
|
||||||
pedited->dirpyrDenoise.methodmed = methodmed->get_active_row_number() != 3;
|
pedited->dirpyrDenoise.methodmed = methodmed->get_active_row_number() != 2;
|
||||||
pedited->dirpyrDenoise.luma = luma->getEditedState ();
|
pedited->dirpyrDenoise.luma = luma->getEditedState ();
|
||||||
pedited->dirpyrDenoise.Ldetail = Ldetail->getEditedState ();
|
pedited->dirpyrDenoise.Ldetail = Ldetail->getEditedState ();
|
||||||
pedited->dirpyrDenoise.chroma = chroma->getEditedState ();
|
pedited->dirpyrDenoise.chroma = chroma->getEditedState ();
|
||||||
@ -309,13 +309,13 @@ void DirPyrDenoise::write (ProcParams* pp, ParamsEdited* pedited) {
|
|||||||
else if (dmethod->get_active_row_number()==1)
|
else if (dmethod->get_active_row_number()==1)
|
||||||
pp->dirpyrDenoise.dmethod = "Lab";
|
pp->dirpyrDenoise.dmethod = "Lab";
|
||||||
|
|
||||||
if (methodmed->get_active_row_number()==0)
|
// if (methodmed->get_active_row_number()==0)
|
||||||
pp->dirpyrDenoise.methodmed = "none";
|
// pp->dirpyrDenoise.methodmed = "none";
|
||||||
else if (methodmed->get_active_row_number()==1)
|
if (methodmed->get_active_row_number()==0)
|
||||||
pp->dirpyrDenoise.methodmed = "Lonly";
|
pp->dirpyrDenoise.methodmed = "Lonly";
|
||||||
else if (methodmed->get_active_row_number()==2)
|
else if (methodmed->get_active_row_number()==1)
|
||||||
pp->dirpyrDenoise.methodmed = "Lab";
|
pp->dirpyrDenoise.methodmed = "Lab";
|
||||||
else if (methodmed->get_active_row_number()==3)
|
else if (methodmed->get_active_row_number()==2)
|
||||||
pp->dirpyrDenoise.methodmed = "RGB";
|
pp->dirpyrDenoise.methodmed = "RGB";
|
||||||
|
|
||||||
|
|
||||||
@ -352,15 +352,15 @@ void DirPyrDenoise::dmethodChanged () {
|
|||||||
void DirPyrDenoise::medmethodChanged () {
|
void DirPyrDenoise::medmethodChanged () {
|
||||||
|
|
||||||
|
|
||||||
if (listener && (multiImage||enabled->get_active()) ) {
|
if (listener && (multiImage||enabled->get_active()) && median->get_active() ) {
|
||||||
listener->panelChanged (EvDPDNmedmet, medmethod->get_active_text ());
|
listener->panelChanged (EvDPDNmedmet, medmethod->get_active_text ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DirPyrDenoise::rgbmethodChanged () {
|
void DirPyrDenoise::rgbmethodChanged () {
|
||||||
ctboxrgb->hide();
|
ctboxrgb->hide();
|
||||||
if(methodmed->get_active_row_number()==3) ctboxrgb->show();
|
if(methodmed->get_active_row_number()==2) ctboxrgb->show();
|
||||||
if (listener && (multiImage||enabled->get_active()) ) {
|
if (listener && (multiImage||enabled->get_active()) && median->get_active()) {
|
||||||
listener->panelChanged (EvDPDNrgbmet, rgbmethod->get_active_text ());
|
listener->panelChanged (EvDPDNrgbmet, rgbmethod->get_active_text ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -368,10 +368,10 @@ void DirPyrDenoise::rgbmethodChanged () {
|
|||||||
|
|
||||||
|
|
||||||
void DirPyrDenoise::methodmedChanged () {
|
void DirPyrDenoise::methodmedChanged () {
|
||||||
if(methodmed->get_active_row_number()==3) {ctboxrgb->show();ctbox->hide();}
|
if(methodmed->get_active_row_number()==2) {ctboxrgb->show();ctbox->hide();}
|
||||||
else {ctboxrgb->hide();ctbox->show();}
|
else {ctboxrgb->hide();ctbox->show();}
|
||||||
|
|
||||||
if (listener && (multiImage||enabled->get_active()) ) {
|
if (listener && (multiImage||enabled->get_active()) && median->get_active()) {
|
||||||
listener->panelChanged (EvDPDNmetmed, methodmed->get_active_text ());
|
listener->panelChanged (EvDPDNmetmed, methodmed->get_active_text ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -424,7 +424,7 @@ void DirPyrDenoise::adjusterChanged (Adjuster* a, double newval) {
|
|||||||
listener->panelChanged (EvDPDNbluechro, costr);
|
listener->panelChanged (EvDPDNbluechro, costr);
|
||||||
else if (a==gamma)
|
else if (a==gamma)
|
||||||
listener->panelChanged (EvDPDNGamma, costr);
|
listener->panelChanged (EvDPDNGamma, costr);
|
||||||
else if (a==passes)
|
else if (a==passes && median->get_active())
|
||||||
listener->panelChanged (EvDPDNpasses, costr);
|
listener->panelChanged (EvDPDNpasses, costr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -492,9 +492,15 @@ void DirPyrDenoise::medianChanged () {
|
|||||||
|
|
||||||
if (listener) {
|
if (listener) {
|
||||||
if (median->get_active ())
|
if (median->get_active ())
|
||||||
listener->panelChanged (EvDPDNmedian, M("GENERAL_ENABLED"));
|
{ listener->panelChanged (EvDPDNmedian, M("GENERAL_ENABLED"));
|
||||||
|
// medmethodChanged ();rgbmethodChanged ();methodmedChanged ();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
listener->panelChanged (EvDPDNmedian, M("GENERAL_DISABLED"));
|
{ listener->panelChanged (EvDPDNmedian, M("GENERAL_DISABLED"));
|
||||||
|
// medmethodChanged ();rgbmethodChanged ();methodmedChanged ();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user