Fixed - refreshing the preview in the Median NR module - issue2014 issue2423

This commit is contained in:
jdc 2014-07-24 21:23:27 +02:00
parent 1bb6a81db2
commit 5229b9142d
3 changed files with 43 additions and 31 deletions

View File

@ -1175,8 +1175,9 @@ TP_DIRPYRDENOISE_LM;Luminance only
TP_DIRPYRDENOISE_LUMA;Luminance
TP_DIRPYRDENOISE_MEDMETHOD;Median method
TP_DIRPYRDENOISE_MEDTYPE;Median type
TP_DIRPYRDENOISE_MED;Median - Luminance only
TP_DIRPYRDENOISE_MED_TOOLTIP;-
TP_DIRPYRDENOISE_MED;Median
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_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.

View File

@ -234,14 +234,14 @@ float media(float *elements, int N)
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
if(src != dst)
memcpy(dst->data,src->data,dst->width*dst->height*3*sizeof(float));
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;
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 noisevarab_b = SQR(realblue);
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
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)
@ -636,7 +636,8 @@ float media(float *elements, int N)
else if(dnparams.methodmed=="Lab") metchoice=2;
//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++){
//printf("pas=%i\n",iteration);
int wid=labdn->W;
@ -664,6 +665,9 @@ float media(float *elements, int N)
methmedL = 4;
borderL = 3;
}
if (metchoice==1 || metchoice==2)
{ /*printf("LONLY methmedL=%d\n", methmedL);*/
if(methmedL < 2) {
for (int i=1; i<hei-1; i++) {
float pp[9],results[5],temp;
@ -734,8 +738,8 @@ float media(float *elements, int N)
labdn->L[i][j] = tmL[i][j];
}
}
//a
if(metchoice==2) {
}
if(metchoice==2) {/*printf(" AB methmedL=%d\n", methmedL);*/
if(methmedL < 2) {
for (int i=1; i<hei-1; i++) {
float pp[9],temp;
@ -1158,7 +1162,8 @@ float media(float *elements, int N)
//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;
float** tm;
tm = new float*[hei];

View File

@ -102,7 +102,7 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this), lastenhance(false) {
hsep2->show ();
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_LABM"));
methodmed->append_text (M("TP_DIRPYRDENOISE_RGBM"));
@ -151,6 +151,7 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this), lastenhance(false) {
pack_start (*enhance);
pack_start (*hsep2);
pack_start (*median);
ctboxm->pack_start (*methodmed);
ctbox->pack_start (*medmethod);
@ -160,7 +161,6 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this), lastenhance(false) {
pack_start (*ctboxrgb);
pack_start (*passes);
// pack_start (*median);
// pack_start (*perform);
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);
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);
else if (pp->dirpyrDenoise.methodmed=="Lonly")
methodmed->set_active (1);
else if (pp->dirpyrDenoise.methodmed=="Lab")
methodmed->set_active (2);
methodmed->set_active (1);
else if (pp->dirpyrDenoise.methodmed=="RGB")
methodmed->set_active (3);
methodmed->set_active (2);
methodmedChanged();
medmethod->set_active (0);
@ -229,7 +229,7 @@ void DirPyrDenoise::read (const ProcParams* pp, const ParamsEdited* pedited) {
if (!pedited->dirpyrDenoise.medmethod)
medmethod->set_active (4);
if (!pedited->dirpyrDenoise.methodmed)
methodmed->set_active (3);
methodmed->set_active (2);
luma->setEditedState (pedited->dirpyrDenoise.luma ? 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.medmethod = medmethod->get_active_row_number() != 4;
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.Ldetail = Ldetail->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)
pp->dirpyrDenoise.dmethod = "Lab";
if (methodmed->get_active_row_number()==0)
pp->dirpyrDenoise.methodmed = "none";
else if (methodmed->get_active_row_number()==1)
// if (methodmed->get_active_row_number()==0)
// pp->dirpyrDenoise.methodmed = "none";
if (methodmed->get_active_row_number()==0)
pp->dirpyrDenoise.methodmed = "Lonly";
else if (methodmed->get_active_row_number()==2)
else if (methodmed->get_active_row_number()==1)
pp->dirpyrDenoise.methodmed = "Lab";
else if (methodmed->get_active_row_number()==3)
else if (methodmed->get_active_row_number()==2)
pp->dirpyrDenoise.methodmed = "RGB";
@ -352,15 +352,15 @@ void DirPyrDenoise::dmethodChanged () {
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 ());
}
}
void DirPyrDenoise::rgbmethodChanged () {
ctboxrgb->hide();
if(methodmed->get_active_row_number()==3) ctboxrgb->show();
if (listener && (multiImage||enabled->get_active()) ) {
if(methodmed->get_active_row_number()==2) ctboxrgb->show();
if (listener && (multiImage||enabled->get_active()) && median->get_active()) {
listener->panelChanged (EvDPDNrgbmet, rgbmethod->get_active_text ());
}
}
@ -368,10 +368,10 @@ void DirPyrDenoise::rgbmethodChanged () {
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();}
if (listener && (multiImage||enabled->get_active()) ) {
if (listener && (multiImage||enabled->get_active()) && median->get_active()) {
listener->panelChanged (EvDPDNmetmed, methodmed->get_active_text ());
}
}
@ -424,7 +424,7 @@ void DirPyrDenoise::adjusterChanged (Adjuster* a, double newval) {
listener->panelChanged (EvDPDNbluechro, costr);
else if (a==gamma)
listener->panelChanged (EvDPDNGamma, costr);
else if (a==passes)
else if (a==passes && median->get_active())
listener->panelChanged (EvDPDNpasses, costr);
}
}
@ -492,9 +492,15 @@ void DirPyrDenoise::medianChanged () {
if (listener) {
if (median->get_active ())
listener->panelChanged (EvDPDNmedian, M("GENERAL_ENABLED"));
{ listener->panelChanged (EvDPDNmedian, M("GENERAL_ENABLED"));
// medmethodChanged ();rgbmethodChanged ();methodmedChanged ();
}
else
listener->panelChanged (EvDPDNmedian, M("GENERAL_DISABLED"));
{ listener->panelChanged (EvDPDNmedian, M("GENERAL_DISABLED"));
// medmethodChanged ();rgbmethodChanged ();methodmedChanged ();
}
}
}