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_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.
|
||||
|
@ -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];
|
||||
|
@ -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 ();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user