Issue 2844: Wavelet improvements to Edge Sharpness and Denoise and Refine, also some language file fixes.
This commit is contained in:
parent
6f2078ea1b
commit
82da6f3fb6
@ -576,14 +576,14 @@ HISTORY_MSG_343;W - Chroma levels
|
|||||||
HISTORY_MSG_344;W - Meth chroma sl/cur
|
HISTORY_MSG_344;W - Meth chroma sl/cur
|
||||||
HISTORY_MSG_345;W - ES - Local contrast
|
HISTORY_MSG_345;W - ES - Local contrast
|
||||||
HISTORY_MSG_346;W - ES - Local contrast method
|
HISTORY_MSG_346;W - ES - Local contrast method
|
||||||
HISTORY_MSG_347;W - Denoise - Level 0
|
HISTORY_MSG_347;W - Denoise - Level 1
|
||||||
HISTORY_MSG_348;W - Denoise - Level 1
|
HISTORY_MSG_348;W - Denoise - Level 2
|
||||||
HISTORY_MSG_349;W - Denoise - Level 2
|
HISTORY_MSG_349;W - Denoise - Level 3
|
||||||
HISTORY_MSG_350;W - ES - Edge detection
|
HISTORY_MSG_350;W - ES - Edge detection
|
||||||
HISTORY_MSG_351;W - Residual - HH curve
|
HISTORY_MSG_351;W - Residual - HH curve
|
||||||
HISTORY_MSG_352;W - Background
|
HISTORY_MSG_352;W - Background
|
||||||
HISTORY_MSG_353;W - ES - Gradient sensitivity
|
HISTORY_MSG_353;W - ES - Gradient sensitivity
|
||||||
HISTORY_MSG_354;W - ES - Enhance
|
HISTORY_MSG_354;W - ES - Enhanced
|
||||||
HISTORY_MSG_355;W - ES - Threshold low
|
HISTORY_MSG_355;W - ES - Threshold low
|
||||||
HISTORY_MSG_356;W - ES - Threshold high
|
HISTORY_MSG_356;W - ES - Threshold high
|
||||||
HISTORY_MSG_357;W - Denoise - Link with ES
|
HISTORY_MSG_357;W - Denoise - Link with ES
|
||||||
@ -632,6 +632,10 @@ HISTORY_MSG_399;W - Residual sub-tool
|
|||||||
HISTORY_MSG_400;W - Final sub-tool
|
HISTORY_MSG_400;W - Final sub-tool
|
||||||
HISTORY_MSG_401;W - Toning sub-tool
|
HISTORY_MSG_401;W - Toning sub-tool
|
||||||
HISTORY_MSG_402;W - Denoise sub-tool
|
HISTORY_MSG_402;W - Denoise sub-tool
|
||||||
|
HISTORY_MSG_403;W - ES - Edge sensitivity
|
||||||
|
HISTORY_MSG_404;W - ES - Base amplification
|
||||||
|
HISTORY_MSG_405;W - Denoise - Level 4
|
||||||
|
HISTORY_MSG_406;W - ES - Neighboring pixels
|
||||||
HISTORY_NEWSNAPSHOT;Add
|
HISTORY_NEWSNAPSHOT;Add
|
||||||
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: <b>Alt-s</b>
|
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: <b>Alt-s</b>
|
||||||
HISTORY_SNAPSHOTS;Snapshots
|
HISTORY_SNAPSHOTS;Snapshots
|
||||||
@ -1691,9 +1695,9 @@ TP_WAVELET_B2;Residual
|
|||||||
TP_WAVELET_BACKGROUND;Background
|
TP_WAVELET_BACKGROUND;Background
|
||||||
TP_WAVELET_BACUR;Curve
|
TP_WAVELET_BACUR;Curve
|
||||||
TP_WAVELET_BALANCE;Contrast balance d/v-h
|
TP_WAVELET_BALANCE;Contrast balance d/v-h
|
||||||
TP_WAVELET_BALANCE_TOOLTIP;Alters the balance between the wavelet directions: vertical-horizontal and diagonal.\nIf contrast, chromaticity or residual tone mapping are activated, the effect due to balance is amplified.
|
TP_WAVELET_BALANCE_TOOLTIP;Alters the balance between the wavelet directions: vertical-horizontal and diagonal.\nIf contrast, chroma or residual tone mapping are activated, the effect due to balance is amplified.
|
||||||
TP_WAVELET_BALCHRO;Chroma balance
|
TP_WAVELET_BALCHRO;Chroma balance
|
||||||
TP_WAVELET_BALCHRO_TOOLTIP;If enabled, the 'Contrast balance' curve or slider also modifies chromaticity balance.
|
TP_WAVELET_BALCHRO_TOOLTIP;If enabled, the 'Contrast balance' curve or slider also modifies chroma balance.
|
||||||
TP_WAVELET_BANONE;None
|
TP_WAVELET_BANONE;None
|
||||||
TP_WAVELET_BASLI;Slider
|
TP_WAVELET_BASLI;Slider
|
||||||
TP_WAVELET_BATYPE;Contrast balance method
|
TP_WAVELET_BATYPE;Contrast balance method
|
||||||
@ -1701,14 +1705,14 @@ TP_WAVELET_CBENAB;Toning and Color Balance
|
|||||||
TP_WAVELET_CBTYPE;Toning and Color Balance
|
TP_WAVELET_CBTYPE;Toning and Color Balance
|
||||||
TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted
|
TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted
|
||||||
TP_WAVELET_CCURVE;Local contrast
|
TP_WAVELET_CCURVE;Local contrast
|
||||||
TP_WAVELET_CH1;Whole chromaticity range
|
TP_WAVELET_CH1;Whole chroma range
|
||||||
TP_WAVELET_CH2;Saturated/pastel
|
TP_WAVELET_CH2;Saturated/pastel
|
||||||
TP_WAVELET_CH3;Link contrast levels
|
TP_WAVELET_CH3;Link contrast levels
|
||||||
TP_WAVELET_CHCU;Curve
|
TP_WAVELET_CHCU;Curve
|
||||||
TP_WAVELET_CHRO;Saturated/pastel threshold
|
TP_WAVELET_CHRO;Saturated/pastel threshold
|
||||||
TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold between saturated and pastel colors.\n1-x: saturated\nx-9: pastel\n\nIf the value exceeds the amount of wavelet levels you are using then it will be ignored.
|
TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold between saturated and pastel colors.\n1-x: saturated\nx-9: pastel\n\nIf the value exceeds the amount of wavelet levels you are using then it will be ignored.
|
||||||
TP_WAVELET_CHR;Chroma-contrast link strength
|
TP_WAVELET_CHR;Chroma-contrast link strength
|
||||||
TP_WAVELET_CHR_TOOLTIP;Adjusts chromaticity as a function of "contrast levels" and "chroma-contrast link strength"
|
TP_WAVELET_CHR_TOOLTIP;Adjusts chroma as a function of "contrast levels" and "chroma-contrast link strength"
|
||||||
TP_WAVELET_CHSL;Sliders
|
TP_WAVELET_CHSL;Sliders
|
||||||
TP_WAVELET_CHTYPE;Chrominance method
|
TP_WAVELET_CHTYPE;Chrominance method
|
||||||
TP_WAVELET_COLORT;Opacity Red-Green
|
TP_WAVELET_COLORT;Opacity Red-Green
|
||||||
@ -1743,6 +1747,7 @@ TP_WAVELET_DONE;Vertical
|
|||||||
TP_WAVELET_DTHR;Diagonal
|
TP_WAVELET_DTHR;Diagonal
|
||||||
TP_WAVELET_DTWO;Horizontal
|
TP_WAVELET_DTWO;Horizontal
|
||||||
TP_WAVELET_EDCU;Curve
|
TP_WAVELET_EDCU;Curve
|
||||||
|
TP_WAVELET_EDGEAMPLI;Base amplification
|
||||||
TP_WAVELET_EDGCONT;Local contrast
|
TP_WAVELET_EDGCONT;Local contrast
|
||||||
TP_WAVELET_EDGCONT_TOOLTIP;Adjusting the points to the left decreases contrast, and to the right increases it.\nBottom-left, Top-Left, Top-Right, Bottom-right represent respectively local contast for low values, mean, mean+stdev, maxima
|
TP_WAVELET_EDGCONT_TOOLTIP;Adjusting the points to the left decreases contrast, and to the right increases it.\nBottom-left, Top-Left, Top-Right, Bottom-right represent respectively local contast for low values, mean, mean+stdev, maxima
|
||||||
TP_WAVELET_EDGEDETECTTHR2;Threshold high (detection)
|
TP_WAVELET_EDGEDETECTTHR2;Threshold high (detection)
|
||||||
@ -1752,6 +1757,7 @@ TP_WAVELET_EDGEDETECT;Gradient sensitivity
|
|||||||
TP_WAVELET_EDGEDETECT_TOOLTIP;Moving the slider to the right increases edge sensitivity. This affects local contrast, edge settings and noise.
|
TP_WAVELET_EDGEDETECT_TOOLTIP;Moving the slider to the right increases edge sensitivity. This affects local contrast, edge settings and noise.
|
||||||
TP_WAVELET_EDGE;Edge Sharpness
|
TP_WAVELET_EDGE;Edge Sharpness
|
||||||
TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
|
TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
|
||||||
|
TP_WAVELET_EDGESENSI;Edge sensitivity
|
||||||
TP_WAVELET_EDGTHRESH;Detail
|
TP_WAVELET_EDGTHRESH;Detail
|
||||||
TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
|
TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
|
||||||
TP_WAVELET_EDRAD;Radius
|
TP_WAVELET_EDRAD;Radius
|
||||||
@ -1772,7 +1778,7 @@ TP_WAVELET_ITER;Delta balance levels
|
|||||||
TP_WAVELET_ITER_TOOLTIP;Left: increase low levels and reduce high levels,\nRight: reduce low levels and increase high levels.
|
TP_WAVELET_ITER_TOOLTIP;Left: increase low levels and reduce high levels,\nRight: reduce low levels and increase high levels.
|
||||||
TP_WAVELET_LABEL;Wavelet Levels
|
TP_WAVELET_LABEL;Wavelet Levels
|
||||||
TP_WAVELET_LARGEST;Coarsest
|
TP_WAVELET_LARGEST;Coarsest
|
||||||
TP_WAVELET_LEVCH;Chromaticity
|
TP_WAVELET_LEVCH;Chroma
|
||||||
TP_WAVELET_LEVDIR_ALL;All levels in all directions
|
TP_WAVELET_LEVDIR_ALL;All levels in all directions
|
||||||
TP_WAVELET_LEVDIR_INF;Below or equal the level
|
TP_WAVELET_LEVDIR_INF;Below or equal the level
|
||||||
TP_WAVELET_LEVDIR_ONE;One level
|
TP_WAVELET_LEVDIR_ONE;One level
|
||||||
@ -1784,30 +1790,37 @@ TP_WAVELET_LEVLABEL;Preview maximum possible levels = %1
|
|||||||
TP_WAVELET_LEVONE;Level 2
|
TP_WAVELET_LEVONE;Level 2
|
||||||
TP_WAVELET_LEVTWO;Level 3
|
TP_WAVELET_LEVTWO;Level 3
|
||||||
TP_WAVELET_LEVZERO;Level 1
|
TP_WAVELET_LEVZERO;Level 1
|
||||||
|
TP_WAVELET_LEVTHRE;Level 4
|
||||||
TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength
|
TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength
|
||||||
TP_WAVELET_LIPST;Enhanced algorithm
|
TP_WAVELET_LIPST;Enhanced algoritm
|
||||||
TP_WAVELET_LIPST_TOOLTIP;This algorithm uses Lipschitz regularity to increase edge detection quality at a cost of increased processing time and memory requirements.
|
TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced.
|
||||||
TP_WAVELET_LOWLIGHT;Shadow luminance range
|
TP_WAVELET_LOWLIGHT;Shadow luminance range
|
||||||
TP_WAVELET_MEDGREINF;First level
|
TP_WAVELET_MEDGREINF;First level
|
||||||
TP_WAVELET_MEDILEV;Edge detection
|
TP_WAVELET_MEDILEV;Edge detection
|
||||||
|
TP_WAVELET_MEDILEV_TOOLTIP;When you enable Edge Detection, it is recommanded:\n- to disabled low contrast levels to avoid artifacts,\n- to use high values of gradient sensitivity.\n\nYou can modulate the strength with 'refine' from Denoise and Refine.
|
||||||
TP_WAVELET_MEDI;Reduce artifacts in blue sky
|
TP_WAVELET_MEDI;Reduce artifacts in blue sky
|
||||||
TP_WAVELET_NEUTRAL;Neutral
|
TP_WAVELET_NEUTRAL;Neutral
|
||||||
TP_WAVELET_NOISE;Denoise and Refine
|
TP_WAVELET_NOISE;Denoise and Refine
|
||||||
TP_WAVELET_NOIS;Denoise
|
TP_WAVELET_NOIS;Denoise
|
||||||
|
TP_WAVELET_NPNONE;None
|
||||||
|
TP_WAVELET_NPLOW;Low
|
||||||
|
TP_WAVELET_NPHIGH;High
|
||||||
|
TP_WAVELET_NPTYPE;Neighboring pixels
|
||||||
|
TP_WAVELET_NPTYPE_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced.
|
||||||
TP_WAVELET_OPACITYWL;Final local contrast
|
TP_WAVELET_OPACITYWL;Final local contrast
|
||||||
TP_WAVELET_OPACITYWL_TOOLTIP;Modify the final local contrast at the end of the wavelet treatment.\n\nThe left side represents the smallest local contrast, progressing to the largest local contrast on the right.
|
TP_WAVELET_OPACITYWL_TOOLTIP;Modify the final local contrast at the end of the wavelet treatment.\n\nThe left side represents the smallest local contrast, progressing to the largest local contrast on the right.
|
||||||
TP_WAVELET_OPACITYW;Contrast balance d/v-h curve
|
TP_WAVELET_OPACITYW;Contrast balance d/v-h curve
|
||||||
TP_WAVELET_OPACITY;Opacity Blue-Yellow
|
TP_WAVELET_OPACITY;Opacity Blue-Yellow
|
||||||
TP_WAVELET_PASTEL;Pastel chromaticity
|
TP_WAVELET_PASTEL;Pastel chroma
|
||||||
TP_WAVELET_PROC;Process
|
TP_WAVELET_PROC;Process
|
||||||
TP_WAVELET_RE1;Reinforced
|
TP_WAVELET_RE1;Reinforced
|
||||||
TP_WAVELET_RE2;Unchanged
|
TP_WAVELET_RE2;Unchanged
|
||||||
TP_WAVELET_RE3;Reduced
|
TP_WAVELET_RE3;Reduced
|
||||||
TP_WAVELET_RESCHRO;Chromaticity
|
TP_WAVELET_RESCHRO;Chroma
|
||||||
TP_WAVELET_RESCONH;Highlights
|
TP_WAVELET_RESCONH;Highlights
|
||||||
TP_WAVELET_RESCON;Shadows
|
TP_WAVELET_RESCON;Shadows
|
||||||
TP_WAVELET_RESID;Residual Image
|
TP_WAVELET_RESID;Residual Image
|
||||||
TP_WAVELET_SAT;Saturated chromaticity
|
TP_WAVELET_SAT;Saturated chroma
|
||||||
TP_WAVELET_SETTINGS;Wavelet Settings
|
TP_WAVELET_SETTINGS;Wavelet Settings
|
||||||
TP_WAVELET_SKIN;Skin targetting/protection
|
TP_WAVELET_SKIN;Skin targetting/protection
|
||||||
TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected.
|
TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected.
|
||||||
|
@ -1880,7 +1880,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(wavelet_decomposit
|
|||||||
|
|
||||||
float ** WavCoeffs_L = WaveletCoeffs_L.level_coeffs(lvl);
|
float ** WavCoeffs_L = WaveletCoeffs_L.level_coeffs(lvl);
|
||||||
if (lvl==maxlvl-1) {
|
if (lvl==maxlvl-1) {
|
||||||
float vari[3];
|
float vari[4];
|
||||||
int edge=0;
|
int edge=0;
|
||||||
ShrinkAllL(WaveletCoeffs_L, buffer, lvl, dir, noisevarlum, madL[lvl], NULL, edge );
|
ShrinkAllL(WaveletCoeffs_L, buffer, lvl, dir, noisevarlum, madL[lvl], NULL, edge );
|
||||||
} else {
|
} else {
|
||||||
@ -2079,7 +2079,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposi
|
|||||||
{
|
{
|
||||||
|
|
||||||
int maxlvl = min(WaveletCoeffs_L.maxlevel(),5);
|
int maxlvl = min(WaveletCoeffs_L.maxlevel(),5);
|
||||||
if(edge==1) maxlvl=3;//for refine denoise edge wavelet
|
if(edge==1) maxlvl=4;//for refine denoise edge wavelet
|
||||||
int maxWL = 0, maxHL = 0;
|
int maxWL = 0, maxHL = 0;
|
||||||
for (int lvl=0; lvl<maxlvl; lvl++) {
|
for (int lvl=0; lvl<maxlvl; lvl++) {
|
||||||
if(WaveletCoeffs_L.level_W(lvl) > maxWL)
|
if(WaveletCoeffs_L.level_W(lvl) > maxWL)
|
||||||
@ -2092,11 +2092,12 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposi
|
|||||||
#pragma omp parallel num_threads(denoiseNestedLevels) if(denoiseNestedLevels>1)
|
#pragma omp parallel num_threads(denoiseNestedLevels) if(denoiseNestedLevels>1)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
float *buffer[3];
|
float *buffer[4];
|
||||||
buffer[0] = new (std::nothrow) float[maxWL*maxHL+32];
|
buffer[0] = new (std::nothrow) float[maxWL*maxHL+32];
|
||||||
buffer[1] = new (std::nothrow) float[maxWL*maxHL+64];
|
buffer[1] = new (std::nothrow) float[maxWL*maxHL+64];
|
||||||
buffer[2] = new (std::nothrow) float[maxWL*maxHL+96];
|
buffer[2] = new (std::nothrow) float[maxWL*maxHL+96];
|
||||||
if(buffer[0] == NULL || buffer[1] == NULL || buffer[2] == NULL) {
|
buffer[3] = new (std::nothrow) float[maxWL*maxHL+128];
|
||||||
|
if(buffer[0] == NULL || buffer[1] == NULL || buffer[2] == NULL || buffer[3] == NULL) {
|
||||||
memoryAllocationFailed = true;
|
memoryAllocationFailed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2110,7 +2111,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(int i=2;i>=0;i--)
|
for(int i=3;i>=0;i--)
|
||||||
if(buffer[i] != NULL)
|
if(buffer[i] != NULL)
|
||||||
delete [] buffer[i];
|
delete [] buffer[i];
|
||||||
}
|
}
|
||||||
@ -2180,7 +2181,7 @@ SSEFUNCTION void ImProcFunctions::ShrinkAllL(wavelet_decomposition &WaveletCoeff
|
|||||||
int H_L = WaveletCoeffs_L.level_H(level);
|
int H_L = WaveletCoeffs_L.level_H(level);
|
||||||
|
|
||||||
float ** WavCoeffs_L = WaveletCoeffs_L.level_coeffs(level);
|
float ** WavCoeffs_L = WaveletCoeffs_L.level_coeffs(level);
|
||||||
|
// printf("OK lev=%d\n",level);
|
||||||
float mad_L = madL[dir-1] ;
|
float mad_L = madL[dir-1] ;
|
||||||
if(edge==1) {
|
if(edge==1) {
|
||||||
noisevarlum = blurBuffer; // we need one buffer, but fortunately we don't have to allocate a new one because we can use blurBuffer
|
noisevarlum = blurBuffer; // we need one buffer, but fortunately we don't have to allocate a new one because we can use blurBuffer
|
||||||
|
@ -95,7 +95,7 @@ struct cont_params {
|
|||||||
float b_lsl,t_lsl,b_rsl,t_rsl;
|
float b_lsl,t_lsl,b_rsl,t_rsl;
|
||||||
float b_lhl,t_lhl,b_rhl,t_rhl;
|
float b_lhl,t_lhl,b_rhl,t_rhl;
|
||||||
float edg_low, edg_mean, edg_sd, edg_max;
|
float edg_low, edg_mean, edg_sd, edg_max;
|
||||||
float lev0s, lev0n, lev1s, lev1n, lev2s, lev2n;
|
float lev0s, lev0n, lev1s, lev1n, lev2s, lev2n, lev3s, lev3n;
|
||||||
float b_lpast,t_lpast,b_rpast,t_rpast;
|
float b_lpast,t_lpast,b_rpast,t_rpast;
|
||||||
float b_lsat,t_lsat,b_rsat,t_rsat;
|
float b_lsat,t_lsat,b_rsat,t_rsat;
|
||||||
int rad;
|
int rad;
|
||||||
@ -150,7 +150,10 @@ struct cont_params {
|
|||||||
bool toningena;
|
bool toningena;
|
||||||
bool noiseena;
|
bool noiseena;
|
||||||
int maxilev;
|
int maxilev;
|
||||||
|
float edgsens;
|
||||||
|
float edgampl;
|
||||||
|
int neigh;
|
||||||
|
bool lipp;
|
||||||
};
|
};
|
||||||
|
|
||||||
int wavNestedLevels = 1;
|
int wavNestedLevels = 1;
|
||||||
@ -179,7 +182,12 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
|
|||||||
if(params->wavelet.Medgreinf=="more") cp.reinforce = 1;
|
if(params->wavelet.Medgreinf=="more") cp.reinforce = 1;
|
||||||
if(params->wavelet.Medgreinf=="none") cp.reinforce = 2;
|
if(params->wavelet.Medgreinf=="none") cp.reinforce = 2;
|
||||||
if(params->wavelet.Medgreinf=="less") cp.reinforce = 3;
|
if(params->wavelet.Medgreinf=="less") cp.reinforce = 3;
|
||||||
cp.lip3 = params->wavelet.lipst;
|
|
||||||
|
if(params->wavelet.NPmethod=="none") cp.lip3 = false;
|
||||||
|
if(params->wavelet.NPmethod=="low") {cp.lip3 = true;cp.neigh=0;}
|
||||||
|
if(params->wavelet.NPmethod=="high") {cp.lip3 = true;cp.neigh=1;}
|
||||||
|
|
||||||
|
cp.lipp = params->wavelet.lipst;
|
||||||
cp.diag = params->wavelet.tmr;
|
cp.diag = params->wavelet.tmr;
|
||||||
cp.balan = (float)params->wavelet.balance;
|
cp.balan = (float)params->wavelet.balance;
|
||||||
cp.ite = params->wavelet.iter;
|
cp.ite = params->wavelet.iter;
|
||||||
@ -222,6 +230,13 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
|
|||||||
cp.eddet=(float) params->wavelet.edgedetect;
|
cp.eddet=(float) params->wavelet.edgedetect;
|
||||||
cp.eddetthr=(float) params->wavelet.edgedetectthr;
|
cp.eddetthr=(float) params->wavelet.edgedetectthr;
|
||||||
cp.eddetthrHi=(float) params->wavelet.edgedetectthr2;
|
cp.eddetthrHi=(float) params->wavelet.edgedetectthr2;
|
||||||
|
|
||||||
|
cp.edgsens=60.f;
|
||||||
|
cp.edgampl=10.f;
|
||||||
|
if(cp.lipp) {
|
||||||
|
cp.edgsens=(float) params->wavelet.edgesensi;
|
||||||
|
cp.edgampl=(float) params->wavelet.edgeampli;
|
||||||
|
}
|
||||||
int N=imheight*imwidth;
|
int N=imheight*imwidth;
|
||||||
int maxmul=params->wavelet.thres;
|
int maxmul=params->wavelet.thres;
|
||||||
cp.maxilev=maxmul;
|
cp.maxilev=maxmul;
|
||||||
@ -385,6 +400,8 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
|
|||||||
cp.lev1n =static_cast<float>(params->wavelet.level1noise.value[1]);
|
cp.lev1n =static_cast<float>(params->wavelet.level1noise.value[1]);
|
||||||
cp.lev2s =static_cast<float>(params->wavelet.level2noise.value[0]);
|
cp.lev2s =static_cast<float>(params->wavelet.level2noise.value[0]);
|
||||||
cp.lev2n =static_cast<float>(params->wavelet.level2noise.value[1]);
|
cp.lev2n =static_cast<float>(params->wavelet.level2noise.value[1]);
|
||||||
|
cp.lev3s =static_cast<float>(params->wavelet.level3noise.value[0]);
|
||||||
|
cp.lev3n =static_cast<float>(params->wavelet.level3noise.value[1]);
|
||||||
|
|
||||||
cp.detectedge = false;
|
cp.detectedge = false;
|
||||||
cp.detectedge = params->wavelet.medianlev;
|
cp.detectedge = params->wavelet.medianlev;
|
||||||
@ -643,7 +660,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
|
|||||||
|
|
||||||
int levwavL = levwav;
|
int levwavL = levwav;
|
||||||
bool ref0=false;
|
bool ref0=false;
|
||||||
if((cp.lev0s > 0.f || cp.lev1s > 0.f || cp.lev2s > 0.f) && cp.noiseena) ref0=true;
|
if((cp.lev0s > 0.f || cp.lev1s > 0.f || cp.lev2s > 0.f || cp.lev3s > 0.f) && cp.noiseena) ref0=true;
|
||||||
|
|
||||||
// printf("LevwavL before: %d\n",levwavL);
|
// printf("LevwavL before: %d\n",levwavL);
|
||||||
if(cp.contrast == 0.f && cp.tonemap==false && cp.conres == 0.f && cp.conresH == 0.f && cp.val ==0 && !ref0 && params->wavelet.CLmethod=="all") { // no processing of residual L or edge=> we probably can reduce the number of levels
|
if(cp.contrast == 0.f && cp.tonemap==false && cp.conres == 0.f && cp.conresH == 0.f && cp.val ==0 && !ref0 && params->wavelet.CLmethod=="all") { // no processing of residual L or edge=> we probably can reduce the number of levels
|
||||||
@ -651,7 +668,12 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
|
|||||||
levwavL--;
|
levwavL--;
|
||||||
}
|
}
|
||||||
// printf("LevwavL after: %d\n",levwavL);
|
// printf("LevwavL after: %d\n",levwavL);
|
||||||
if(levwavL < 3) levwavL=3;//to allow edge => I always allocate 3 levels..because if user select wavelet it is to do something !!
|
// if(cp.noiseena){
|
||||||
|
if(levwavL < 4 ) levwavL=4;//to allow edge => I always allocate 3 (4) levels..because if user select wavelet it is to do something !!
|
||||||
|
// }
|
||||||
|
// else {
|
||||||
|
// if(levwavL < 3) levwavL=3;//to allow edge => I always allocate 3 (4) levels..because if user select wavelet it is to do something !!
|
||||||
|
// }
|
||||||
if(levwavL > 0) {
|
if(levwavL > 0) {
|
||||||
wavelet_decomposition* Ldecomp = new wavelet_decomposition (labco->data, labco->W, labco->H, levwavL, 1, skip, max(1,wavNestedLevels), DaubLen );
|
wavelet_decomposition* Ldecomp = new wavelet_decomposition (labco->data, labco->W, labco->H, levwavL, 1, skip, max(1,wavNestedLevels), DaubLen );
|
||||||
if(!Ldecomp->memoryAllocationFailed) {
|
if(!Ldecomp->memoryAllocationFailed) {
|
||||||
@ -661,7 +683,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
|
|||||||
#ifdef _RT_NESTED_OPENMP
|
#ifdef _RT_NESTED_OPENMP
|
||||||
#pragma omp parallel for schedule(dynamic) collapse(2) num_threads(wavNestedLevels) if(wavNestedLevels>1)
|
#pragma omp parallel for schedule(dynamic) collapse(2) num_threads(wavNestedLevels) if(wavNestedLevels>1)
|
||||||
#endif
|
#endif
|
||||||
for (int lvl=0; lvl<3; lvl++) {
|
for (int lvl=0; lvl<4; lvl++) {
|
||||||
for (int dir=1; dir<4; dir++) {
|
for (int dir=1; dir<4; dir++) {
|
||||||
int Wlvl_L = Ldecomp->level_W(lvl);
|
int Wlvl_L = Ldecomp->level_W(lvl);
|
||||||
int Hlvl_L = Ldecomp->level_H(lvl);
|
int Hlvl_L = Ldecomp->level_H(lvl);
|
||||||
@ -673,7 +695,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
|
|||||||
}
|
}
|
||||||
int ind=0;
|
int ind=0;
|
||||||
bool ref=false;
|
bool ref=false;
|
||||||
if((cp.lev0s > 0.f || cp.lev1s > 0.f || cp.lev2s > 0.f) && cp.noiseena) ref=true;
|
if((cp.lev0s > 0.f || cp.lev1s > 0.f || cp.lev2s > 0.f || cp.lev3s > 0.f) && cp.noiseena) ref=true;
|
||||||
bool contr=false;
|
bool contr=false;
|
||||||
for(int f=0;f<levwavL;f++) {
|
for(int f=0;f<levwavL;f++) {
|
||||||
if(cp.mul[f]!=0.f) contr=true;
|
if(cp.mul[f]!=0.f) contr=true;
|
||||||
@ -682,16 +704,18 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
|
|||||||
Evaluate2(*Ldecomp, cp, ind, mean, meanN, sigma, sigmaN, MaxP, MaxN, madL);
|
Evaluate2(*Ldecomp, cp, ind, mean, meanN, sigma, sigmaN, MaxP, MaxN, madL);
|
||||||
}
|
}
|
||||||
//init for edge and denoise
|
//init for edge and denoise
|
||||||
float vari[3];
|
float vari[4];
|
||||||
|
|
||||||
vari[0]=8.f*SQR((cp.lev0n/125.0)*(1.0+ cp.lev0n/25.0));
|
vari[0]=8.f*SQR((cp.lev0n/125.0)*(1.0+ cp.lev0n/25.0));
|
||||||
vari[1]=8.f*SQR((cp.lev1n/125.0)*(1.0+ cp.lev1n/25.0));
|
vari[1]=8.f*SQR((cp.lev1n/125.0)*(1.0+ cp.lev1n/25.0));
|
||||||
vari[2]=8.f*SQR((cp.lev2n/125.0)*(1.0+ cp.lev2n/25.0));
|
vari[2]=8.f*SQR((cp.lev2n/125.0)*(1.0+ cp.lev2n/25.0));
|
||||||
|
vari[3]=8.f*SQR((cp.lev3n/125.0)*(1.0+ cp.lev3n/25.0));
|
||||||
int edge=1;
|
int edge=1;
|
||||||
if((cp.lev0n > 0.1f || cp.lev1n > 0.1f || cp.lev2n > 0.1f) && cp.noiseena) {
|
if((cp.lev0n > 0.1f || cp.lev1n > 0.1f || cp.lev2n > 0.1f || cp.lev3n > 0.1f) && cp.noiseena) {
|
||||||
vari[0] = max(0.0001f,vari[0]);
|
vari[0] = max(0.0001f,vari[0]);
|
||||||
vari[1] = max(0.0001f,vari[1]);
|
vari[1] = max(0.0001f,vari[1]);
|
||||||
vari[2] = max(0.0001f,vari[2]);
|
vari[2] = max(0.0001f,vari[2]);
|
||||||
|
vari[3] = max(0.0001f,vari[3]);
|
||||||
float* noisevarlum = NULL; // we need a dummy to pass it to WaveletDenoiseAllL
|
float* noisevarlum = NULL; // we need a dummy to pass it to WaveletDenoiseAllL
|
||||||
if(!WaveletDenoiseAllL(*Ldecomp, noisevarlum, madL, vari, edge))//
|
if(!WaveletDenoiseAllL(*Ldecomp, noisevarlum, madL, vari, edge))//
|
||||||
memoryAllocationFailed = true;
|
memoryAllocationFailed = true;
|
||||||
@ -1111,7 +1135,7 @@ omp_set_nested(oldNested);
|
|||||||
maxLP/=3;
|
maxLP/=3;
|
||||||
maxLN/=3;
|
maxLN/=3;
|
||||||
MADL/=3;
|
MADL/=3;
|
||||||
if(level < 3) MADL=sqrt(MADL);else MADL=0.f;
|
if(level < 4) MADL=sqrt(MADL);else MADL=0.f;
|
||||||
mean[level]=AvL;
|
mean[level]=AvL;
|
||||||
meanN[level]=AvN;
|
meanN[level]=AvN;
|
||||||
sigma[level]=SL;
|
sigma[level]=SL;
|
||||||
@ -1423,20 +1447,23 @@ if(cp.tonemap && cp.contmet==2 && cp.resena) {
|
|||||||
float al=(multL-1.f)/(av-min0);
|
float al=(multL-1.f)/(av-min0);
|
||||||
float bl=1.f-min0*al;
|
float bl=1.f-min0*al;
|
||||||
float factorx=1.f;
|
float factorx=1.f;
|
||||||
float *koeLi[9];
|
// float *koeLi[9];
|
||||||
float maxkoeLi[9];
|
// float maxkoeLi[9];
|
||||||
|
float *koeLi[12];
|
||||||
|
float maxkoeLi[12];
|
||||||
|
|
||||||
float *koeLibuffer = NULL;
|
float *koeLibuffer = NULL;
|
||||||
bool lipschitz =false;
|
bool lipschitz =false;
|
||||||
lipschitz=true;
|
lipschitz=true;
|
||||||
|
|
||||||
if(lipschitz==true) {
|
if(lipschitz==true) {
|
||||||
for(int y=0;y<9;y++) maxkoeLi[y]=0.f;
|
for(int y=0;y<12;y++) maxkoeLi[y]=0.f;//9
|
||||||
koeLibuffer = new float[9*H_L*W_L];
|
koeLibuffer = new float[12*H_L*W_L];//12
|
||||||
for (int i=0; i<9; i++) {
|
for (int i=0; i<12; i++) {//9
|
||||||
koeLi[i] = &koeLibuffer[i*W_L*H_L];
|
koeLi[i] = &koeLibuffer[i*W_L*H_L];
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int j=0;j<9;j++)
|
for(int j=0;j<12;j++)//9
|
||||||
for (int i=0; i<W_L*H_L; i++)
|
for (int i=0; i<W_L*H_L; i++)
|
||||||
koeLi[j][i]=0.f;
|
koeLi[j][i]=0.f;
|
||||||
}
|
}
|
||||||
@ -1523,10 +1550,12 @@ if(cp.tonemap && cp.contmet==1 && cp.resena) {
|
|||||||
// One can 1) change all parameters and found good parameters;
|
// One can 1) change all parameters and found good parameters;
|
||||||
//one can also chnage in calckoe
|
//one can also chnage in calckoe
|
||||||
float edd=settings->ed_detec;
|
float edd=settings->ed_detec;
|
||||||
float eddlow=settings->ed_low;
|
float eddlow=settings->ed_low;//5 to 40
|
||||||
float eddlipinfl=settings->ed_lipinfl;
|
// float eddlipinfl=settings->ed_lipinfl;
|
||||||
float eddlipampl=settings->ed_lipampl;
|
// float eddlipampl=settings->ed_lipampl;
|
||||||
|
float eddlipinfl=0.005f*cp.edgsens + 0.4f;
|
||||||
|
float eddlipampl=1.f + cp.edgampl/50.f;
|
||||||
|
// float eddlow=5.f + cp.edgampl/2.f;//settings->ed_low;//5 to 40
|
||||||
|
|
||||||
|
|
||||||
if(cp.detectedge && lipschitz==true) { //enabled Lipschitz control...more memory..more time...
|
if(cp.detectedge && lipschitz==true) { //enabled Lipschitz control...more memory..more time...
|
||||||
@ -1538,7 +1567,7 @@ if(cp.detectedge && lipschitz==true) { //enabled Lipschitz control...more memory
|
|||||||
#ifdef _RT_NESTED_OPENMP
|
#ifdef _RT_NESTED_OPENMP
|
||||||
#pragma omp for schedule(dynamic) collapse(2)
|
#pragma omp for schedule(dynamic) collapse(2)
|
||||||
#endif
|
#endif
|
||||||
for (int lvl=0; lvl<3; lvl++) {
|
for (int lvl=0; lvl<4; lvl++) {
|
||||||
for (int dir=1; dir<4; dir++) {
|
for (int dir=1; dir<4; dir++) {
|
||||||
int W_L = WaveletCoeffs_L.level_W(lvl);
|
int W_L = WaveletCoeffs_L.level_W(lvl);
|
||||||
int H_L = WaveletCoeffs_L.level_H(lvl);
|
int H_L = WaveletCoeffs_L.level_H(lvl);
|
||||||
@ -1551,8 +1580,7 @@ if(cp.detectedge && lipschitz==true) { //enabled Lipschitz control...more memory
|
|||||||
delete [] tmCBuffer;
|
delete [] tmCBuffer;
|
||||||
|
|
||||||
float aamp=1.f+cp.eddetthrHi/100.f;
|
float aamp=1.f+cp.eddetthrHi/100.f;
|
||||||
|
for (int lvl=0; lvl<4; lvl++) {
|
||||||
for (int lvl=0; lvl<3; lvl++) {
|
|
||||||
#ifdef _RT_NESTED_OPENMP
|
#ifdef _RT_NESTED_OPENMP
|
||||||
#pragma omp for schedule(dynamic,16)
|
#pragma omp for schedule(dynamic,16)
|
||||||
#endif
|
#endif
|
||||||
@ -1560,16 +1588,29 @@ if(cp.detectedge && lipschitz==true) { //enabled Lipschitz control...more memory
|
|||||||
for (int j=1; j<W_L-1; j++) {
|
for (int j=1; j<W_L-1; j++) {
|
||||||
//treatment of koeLi and maxkoeLi
|
//treatment of koeLi and maxkoeLi
|
||||||
float interm = 0.f;
|
float interm = 0.f;
|
||||||
|
if(cp.lip3 && cp.lipp){
|
||||||
|
// comparaison betwwen pixel and neighbours
|
||||||
|
float kneigh, somm;
|
||||||
|
if(cp.neigh==0) {kneigh=38.f;somm=50.f;}
|
||||||
|
else if(cp.neigh==1) {kneigh=28.f;somm=40.f;}
|
||||||
|
for (int dir=1; dir<4; dir++) {//neighbours proxi
|
||||||
|
koeLi[lvl*3 + dir-1][i*W_L + j] = (kneigh*koeLi[lvl*3 + dir-1][i*W_L + j] + 2.f*koeLi[lvl*3+dir-1][(i-1)*W_L + j] + 2.f*koeLi[lvl*3 + dir-1][(i+1)*W_L + j]
|
||||||
|
+ 2.f*koeLi[lvl*3 + dir-1][i*W_L + j+1] + 2.f*koeLi[lvl*3 + dir-1][i*W_L + j-1] + koeLi[lvl*3 + dir-1][(i-1)*W_L + j-1]
|
||||||
|
+ koeLi[lvl*3 + dir-1][(i-1)*W_L + j+1] +koeLi[lvl*3 +dir-1][(i+1)*W_L + j-1] +koeLi[lvl*3 + dir-1][(i+1)*W_L + j+1])/somm;
|
||||||
|
}
|
||||||
|
}
|
||||||
for (int dir=1; dir<4; dir++) {
|
for (int dir=1; dir<4; dir++) {
|
||||||
//here I evaluate combinaison of vert / diag / horiz...we are with multiplicators of the signal
|
//here I evaluate combinaison of vert / diag / horiz...we are with multiplicators of the signal
|
||||||
interm += SQR(koeLi[lvl*3 + dir-1][i*W_L + j]);
|
interm += SQR(koeLi[lvl*3 + dir-1][i*W_L + j]);
|
||||||
}
|
}
|
||||||
interm = sqrt(interm);
|
interm = sqrt(interm);
|
||||||
|
|
||||||
// interm /= 1.732f;//interm = pseudo variance koeLi
|
// interm /= 1.732f;//interm = pseudo variance koeLi
|
||||||
interm *= 0.57736721f;
|
interm *= 0.57736721f;
|
||||||
float kampli = 1.f;
|
float kampli = 1.f;
|
||||||
float eps=0.0001f;
|
float eps=0.0001f;
|
||||||
// I think this double ratio (alph, beta) is better than arctg
|
// I think this double ratio (alph, beta) is better than arctg
|
||||||
|
|
||||||
float alph = koeLi[lvl*3][i*W_L + j] / (koeLi[lvl*3 + 1][i*W_L + j]+eps);//ratio between horizontal and vertical
|
float alph = koeLi[lvl*3][i*W_L + j] / (koeLi[lvl*3 + 1][i*W_L + j]+eps);//ratio between horizontal and vertical
|
||||||
float beta = koeLi[lvl*3+2][i*W_L + j] / (koeLi[lvl*3 + 1][i*W_L + j]+eps);//ratio between diagonal and horizontal
|
float beta = koeLi[lvl*3+2][i*W_L + j] / (koeLi[lvl*3 + 1][i*W_L + j]+eps);//ratio between diagonal and horizontal
|
||||||
|
|
||||||
@ -1598,12 +1639,14 @@ if(cp.detectedge && lipschitz==true) { //enabled Lipschitz control...more memory
|
|||||||
if(alph > eddlipinfl) {AmpLip=alipinfl*alph+blipinfl;kampli=SQR(bet)*AmpLip*aamp;}//If beta low reduce kampli
|
if(alph > eddlipinfl) {AmpLip=alipinfl*alph+blipinfl;kampli=SQR(bet)*AmpLip*aamp;}//If beta low reduce kampli
|
||||||
else {AmpLip=(1.f/eddlipinfl)*SQR(SQR(alph*bet));kampli=AmpLip/aamp;}//Strong Reduce if beta low
|
else {AmpLip=(1.f/eddlipinfl)*SQR(SQR(alph*bet));kampli=AmpLip/aamp;}//Strong Reduce if beta low
|
||||||
// comparaison betwwen pixel and neighbours to do ==> I think 3 dir above is better
|
// comparaison betwwen pixel and neighbours to do ==> I think 3 dir above is better
|
||||||
|
/* if(cp.lip3){
|
||||||
//koeLi[lvl*3][i*W_L + j] koeLi[lvl*3][(i-1)*W_L + j] koeLi[lvl*3][(i+1)*W_L + j]
|
koeLi[lvl*3][i*W_L + j] = (koeLi[lvl*3][i*W_L + j] + koeLi[lvl*3][(i-1)*W_L + j] + koeLi[lvl*3][(i+1)*W_L + j]
|
||||||
// koeLi[lvl*3][i*W_L + j+1] koeLi[lvl*3][i*W_L + j-1]) koeLi[lvl*3][(i-1)*W_L + j-1]
|
+ koeLi[lvl*3][i*W_L + j+1] + koeLi[lvl*3][i*W_L + j-1] + koeLi[lvl*3][(i-1)*W_L + j-1]
|
||||||
// koeLi[lvl*3][(i-1)*W_L + j+1] koeLi[lvl*3][(i+1)*W_L + j-1] koeLi[lvl*3][(i+1)*W_L + j+1])
|
+ koeLi[lvl*3][(i-1)*W_L + j+1] +koeLi[lvl*3][(i+1)*W_L + j-1] +koeLi[lvl*3][(i+1)*W_L + j+1])/9.f;
|
||||||
|
}
|
||||||
|
*/
|
||||||
// apply to each direction Wavelet level : horizontal / vertiacle / diagonal
|
// apply to each direction Wavelet level : horizontal / vertiacle / diagonal
|
||||||
|
//interm += SQR(koeLi[lvl*3 + dir-1][i*W_L + j]);
|
||||||
|
|
||||||
interm*=kampli;
|
interm*=kampli;
|
||||||
if(interm < cp.eddetthr/eddlow) interm = 0.01f;//eliminate too low values
|
if(interm < cp.eddetthr/eddlow) interm = 0.01f;//eliminate too low values
|
||||||
@ -1845,7 +1888,7 @@ if(cp.detectedge && lipschitz==true) { //enabled Lipschitz control...more memory
|
|||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
void ImProcFunctions::calckoe(float ** WavCoeffs_LL, struct cont_params cp, float *koeLi[9], int level, int dir, int W_L, int H_L, float edd, float *maxkoeLi, float **tmC){
|
void ImProcFunctions::calckoe(float ** WavCoeffs_LL, struct cont_params cp, float *koeLi[12], int level, int dir, int W_L, int H_L, float edd, float *maxkoeLi, float **tmC){
|
||||||
int borderL = 2;
|
int borderL = 2;
|
||||||
// printf("cpedth=%f\n",cp.eddetthr);
|
// printf("cpedth=%f\n",cp.eddetthr);
|
||||||
if(cp.eddetthr < 30.f) {
|
if(cp.eddetthr < 30.f) {
|
||||||
@ -1901,6 +1944,8 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, struct cont_params cp, floa
|
|||||||
|
|
||||||
else if(cp.eddetthr >= 75.f) {
|
else if(cp.eddetthr >= 75.f) {
|
||||||
borderL = 2;
|
borderL = 2;
|
||||||
|
//if(cp.lip3 && level > 1) {
|
||||||
|
if(level > 1) {// do not activate 5x5 if level 0 or 1
|
||||||
|
|
||||||
for (int i=2; i<H_L-2; i++) {
|
for (int i=2; i<H_L-2; i++) {
|
||||||
for (int j=2; j<W_L-2; j++) {
|
for (int j=2; j<W_L-2; j++) {
|
||||||
@ -1945,6 +1990,7 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, struct cont_params cp, floa
|
|||||||
// apply to each direction Wavelet level : horizontal / vertiacle / diagonal
|
// apply to each direction Wavelet level : horizontal / vertiacle / diagonal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2139,7 +2185,7 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, struct cont_params cp, floa
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImProcFunctions::ContAllL (float *koeLi[9], float *maxkoeLi, bool lipschitz, int maxlvl, LabImage * labco, float ** varhue, float **varchrom, float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, struct cont_params cp,
|
void ImProcFunctions::ContAllL (float *koeLi[12], float *maxkoeLi, bool lipschitz, int maxlvl, LabImage * labco, float ** varhue, float **varchrom, float ** WavCoeffs_L, float * WavCoeffs_L0, int level, int dir, struct cont_params cp,
|
||||||
int W_L, int H_L, int skip, float *mean, float *meanN, float *sigma, float *sigmaN, float *MaxP, float *MaxN, const WavCurve & wavCLVCcurve, const WavOpacityCurveW & waOpacityCurveW, FlatCurve* ChCurve, bool Chutili)
|
int W_L, int H_L, int skip, float *mean, float *meanN, float *sigma, float *sigmaN, float *MaxP, float *MaxN, const WavCurve & wavCLVCcurve, const WavOpacityCurveW & waOpacityCurveW, FlatCurve* ChCurve, bool Chutili)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -2256,6 +2302,7 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, struct cont_params cp, floa
|
|||||||
if(level==0) refin *= (1.f + cp.lev0s/50.f);// we can change this sensibility!
|
if(level==0) refin *= (1.f + cp.lev0s/50.f);// we can change this sensibility!
|
||||||
if(level==1) refin *= (1.f + cp.lev1s/50.f);
|
if(level==1) refin *= (1.f + cp.lev1s/50.f);
|
||||||
if(level==2) refin *= (1.f + cp.lev2s/50.f);
|
if(level==2) refin *= (1.f + cp.lev2s/50.f);
|
||||||
|
if(level==3) refin *= (1.f + cp.lev3s/50.f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
float edgePrecalc = 1.f + refin; //estimate edge "pseudo variance"
|
float edgePrecalc = 1.f + refin; //estimate edge "pseudo variance"
|
||||||
@ -2285,7 +2332,7 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, struct cont_params cp, floa
|
|||||||
else edge=(edgePrecalc*(1.f+koe[k]))/(1.f+0.9f*maxkoe);
|
else edge=(edgePrecalc*(1.f+koe[k]))/(1.f+0.9f*maxkoe);
|
||||||
}
|
}
|
||||||
if(lipschitz==true) {
|
if(lipschitz==true) {
|
||||||
if(level < 3) edge = 1.f +(edgePrecalc-1.f)*(koeLi[level*3][k])/(1.f+0.9f*maxkoeLi[level*3+ dir-1]);
|
if(level < 4) edge = 1.f +(edgePrecalc-1.f)*(koeLi[level*3][k])/(1.f+0.9f*maxkoeLi[level*3+ dir-1]);
|
||||||
else edge = edgePrecalc;
|
else edge = edgePrecalc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2369,7 +2416,7 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, struct cont_params cp, floa
|
|||||||
else edge=(edgePrecalc*(1.f+koe[k]))/(1.f+0.9f*maxkoe);
|
else edge=(edgePrecalc*(1.f+koe[k]))/(1.f+0.9f*maxkoe);
|
||||||
}
|
}
|
||||||
if(lipschitz==true) {
|
if(lipschitz==true) {
|
||||||
if(level < 3) edge = 1.f +(edgePrecalc-1.f)*(koeLi[level*3][k])/(1.f+0.9f*maxkoeLi[level*3+ dir-1]);
|
if(level < 4) edge = 1.f +(edgePrecalc-1.f)*(koeLi[level*3][k])/(1.f+0.9f*maxkoeLi[level*3+ dir-1]);
|
||||||
else edge = edgePrecalc;
|
else edge = edgePrecalc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2441,6 +2488,7 @@ void ImProcFunctions::calckoe(float ** WavCoeffs_LL, struct cont_params cp, floa
|
|||||||
if(level==0) refine = cp.lev0s/40.f;
|
if(level==0) refine = cp.lev0s/40.f;
|
||||||
if(level==1) refine = cp.lev1s/40.f;
|
if(level==1) refine = cp.lev1s/40.f;
|
||||||
if(level==2) refine = cp.lev2s/40.f;
|
if(level==2) refine = cp.lev2s/40.f;
|
||||||
|
if(level==3) refine = cp.lev3s/40.f;
|
||||||
WavCoeffs_L[dir][i]*=(1.f + refine);
|
WavCoeffs_L[dir][i]*=(1.f + refine);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -427,7 +427,10 @@ enum ProcEvent {
|
|||||||
EvWavenafin=399,
|
EvWavenafin=399,
|
||||||
EvWavenatoning=400,
|
EvWavenatoning=400,
|
||||||
EvWavenanoise=401,
|
EvWavenanoise=401,
|
||||||
|
EvWavedgesensi=402,
|
||||||
|
EvWavedgeampli=403,
|
||||||
|
EvWavlev3nois=404,
|
||||||
|
EvWavNPmet=405,
|
||||||
NUMOFEVENTS
|
NUMOFEVENTS
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -414,7 +414,7 @@ void ColorToningParams::getCurves(ColorGradientCurve &colorCurveLUT, OpacityCurv
|
|||||||
//WaveletParams::WaveletParams (): hueskin(-5, 25, 170, 120, false), hueskin2(-260, -250, -130, -140, false), hllev(50, 75, 100, 98, false), bllev(0, 2, 50, 25, false), pastlev(0, 2, 30, 20, false), satlev(30, 45, 130, 100, false), edgcont(0, 20, 100, 75, false){
|
//WaveletParams::WaveletParams (): hueskin(-5, 25, 170, 120, false), hueskin2(-260, -250, -130, -140, false), hllev(50, 75, 100, 98, false), bllev(0, 2, 50, 25, false), pastlev(0, 2, 30, 20, false), satlev(30, 45, 130, 100, false), edgcont(0, 20, 100, 75, false){
|
||||||
|
|
||||||
WaveletParams::WaveletParams (): hueskin(-5, 25, 170, 120, false), hueskin2(-260, -250, -130, -140, false), hllev(50, 75, 100, 98, false), bllev(0, 2, 50, 25, false),
|
WaveletParams::WaveletParams (): hueskin(-5, 25, 170, 120, false), hueskin2(-260, -250, -130, -140, false), hllev(50, 75, 100, 98, false), bllev(0, 2, 50, 25, false),
|
||||||
pastlev(0, 2, 30, 20, false), satlev(30, 45, 130, 100, false), edgcont(bl, tl, br, tr, false), /* edgcont(0, 10, 75, 40, false),*/level0noise(0, 0, false),level1noise(0, 0, false), level2noise(0, 0, false){
|
pastlev(0, 2, 30, 20, false), satlev(30, 45, 130, 100, false), edgcont(bl, tl, br, tr, false), /* edgcont(0, 10, 75, 40, false),*/level0noise(0, 0, false),level1noise(0, 0, false), level2noise(0, 0, false),level3noise(0, 0, false){
|
||||||
setDefaults ();
|
setDefaults ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -509,8 +509,9 @@ void WaveletParams::setDefaults() {
|
|||||||
CHmethod = "without";
|
CHmethod = "without";
|
||||||
CHSLmethod = "SL";
|
CHSLmethod = "SL";
|
||||||
EDmethod = "CU";
|
EDmethod = "CU";
|
||||||
|
NPmethod = "none";
|
||||||
BAmethod = "none";
|
BAmethod = "none";
|
||||||
TMmethod = "none";
|
TMmethod = "cont";
|
||||||
HSmethod = "with";
|
HSmethod = "with";
|
||||||
CLmethod = "all";
|
CLmethod = "all";
|
||||||
Backmethod = "grey";
|
Backmethod = "grey";
|
||||||
@ -538,9 +539,11 @@ void WaveletParams::setDefaults() {
|
|||||||
hueskin2.setValues(-260, -250, -130, -140);
|
hueskin2.setValues(-260, -250, -130, -140);
|
||||||
threshold=5;
|
threshold=5;
|
||||||
threshold2=4;
|
threshold2=4;
|
||||||
edgedetect=80;
|
edgedetect=90;
|
||||||
edgedetectthr=20;
|
edgedetectthr=20;
|
||||||
edgedetectthr2=0;
|
edgedetectthr2=0;
|
||||||
|
edgesensi=60;
|
||||||
|
edgeampli=10;
|
||||||
hllev.setValues(50, 75, 100, 98);
|
hllev.setValues(50, 75, 100, 98);
|
||||||
bllev.setValues(0, 2, 50, 25);
|
bllev.setValues(0, 2, 50, 25);
|
||||||
pastlev.setValues(0, 2, 30, 20);
|
pastlev.setValues(0, 2, 30, 20);
|
||||||
@ -550,6 +553,7 @@ void WaveletParams::setDefaults() {
|
|||||||
level0noise.setValues(0, 0);
|
level0noise.setValues(0, 0);
|
||||||
level1noise.setValues(0, 0);
|
level1noise.setValues(0, 0);
|
||||||
level2noise.setValues(0, 0);
|
level2noise.setValues(0, 0);
|
||||||
|
level3noise.setValues(0, 0);
|
||||||
hhcurve.clear ();
|
hhcurve.clear ();
|
||||||
hhcurve.push_back(FCT_Linear);
|
hhcurve.push_back(FCT_Linear);
|
||||||
Chcurve.clear ();
|
Chcurve.clear ();
|
||||||
@ -1700,17 +1704,25 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2, bool fnameAbsol
|
|||||||
Glib::ArrayHandle<double> thresh (wavelet.level2noise.value, 2, Glib::OWNERSHIP_NONE);
|
Glib::ArrayHandle<double> thresh (wavelet.level2noise.value, 2, Glib::OWNERSHIP_NONE);
|
||||||
keyFile.set_double_list("Wavelet", "Level2noise", thresh);
|
keyFile.set_double_list("Wavelet", "Level2noise", thresh);
|
||||||
}
|
}
|
||||||
|
if (!pedited || pedited->wavelet.level3noise) {
|
||||||
|
Glib::ArrayHandle<double> thresh (wavelet.level3noise.value, 2, Glib::OWNERSHIP_NONE);
|
||||||
|
keyFile.set_double_list("Wavelet", "Level3noise", thresh);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!pedited || pedited->wavelet.threshold) keyFile.set_integer ("Wavelet", "ThresholdHighlight", wavelet.threshold);
|
if (!pedited || pedited->wavelet.threshold) keyFile.set_integer ("Wavelet", "ThresholdHighlight", wavelet.threshold);
|
||||||
if (!pedited || pedited->wavelet.threshold2) keyFile.set_integer ("Wavelet", "ThresholdShadow", wavelet.threshold2);
|
if (!pedited || pedited->wavelet.threshold2) keyFile.set_integer ("Wavelet", "ThresholdShadow", wavelet.threshold2);
|
||||||
if (!pedited || pedited->wavelet.edgedetect) keyFile.set_integer ("Wavelet", "Edgedetect", wavelet.edgedetect);
|
if (!pedited || pedited->wavelet.edgedetect) keyFile.set_integer ("Wavelet", "Edgedetect", wavelet.edgedetect);
|
||||||
if (!pedited || pedited->wavelet.edgedetectthr) keyFile.set_integer ("Wavelet", "Edgedetectthr", wavelet.edgedetectthr);
|
if (!pedited || pedited->wavelet.edgedetectthr) keyFile.set_integer ("Wavelet", "Edgedetectthr", wavelet.edgedetectthr);
|
||||||
if (!pedited || pedited->wavelet.edgedetectthr2) keyFile.set_integer ("Wavelet", "EdgedetectthrHi", wavelet.edgedetectthr2);
|
if (!pedited || pedited->wavelet.edgedetectthr2) keyFile.set_integer ("Wavelet", "EdgedetectthrHi", wavelet.edgedetectthr2);
|
||||||
|
if (!pedited || pedited->wavelet.edgesensi) keyFile.set_integer ("Wavelet", "Edgesensi", wavelet.edgesensi);
|
||||||
|
if (!pedited || pedited->wavelet.edgeampli) keyFile.set_integer ("Wavelet", "Edgeampli", wavelet.edgeampli);
|
||||||
if (!pedited || pedited->wavelet.chroma) keyFile.set_integer ("Wavelet", "ThresholdChroma", wavelet.chroma);
|
if (!pedited || pedited->wavelet.chroma) keyFile.set_integer ("Wavelet", "ThresholdChroma", wavelet.chroma);
|
||||||
if (!pedited || pedited->wavelet.CHmethod) keyFile.set_string ("Wavelet", "CHromaMethod", wavelet.CHmethod);
|
if (!pedited || pedited->wavelet.CHmethod) keyFile.set_string ("Wavelet", "CHromaMethod", wavelet.CHmethod);
|
||||||
if (!pedited || pedited->wavelet.Medgreinf) keyFile.set_string ("Wavelet", "Medgreinf", wavelet.Medgreinf);
|
if (!pedited || pedited->wavelet.Medgreinf) keyFile.set_string ("Wavelet", "Medgreinf", wavelet.Medgreinf);
|
||||||
if (!pedited || pedited->wavelet.CHSLmethod) keyFile.set_string ("Wavelet", "CHSLromaMethod", wavelet.CHSLmethod);
|
if (!pedited || pedited->wavelet.CHSLmethod) keyFile.set_string ("Wavelet", "CHSLromaMethod", wavelet.CHSLmethod);
|
||||||
if (!pedited || pedited->wavelet.EDmethod) keyFile.set_string ("Wavelet", "EDMethod", wavelet.EDmethod);
|
if (!pedited || pedited->wavelet.EDmethod) keyFile.set_string ("Wavelet", "EDMethod", wavelet.EDmethod);
|
||||||
|
if (!pedited || pedited->wavelet.NPmethod) keyFile.set_string ("Wavelet", "NPMethod", wavelet.NPmethod);
|
||||||
if (!pedited || pedited->wavelet.BAmethod) keyFile.set_string ("Wavelet", "BAMethod", wavelet.BAmethod);
|
if (!pedited || pedited->wavelet.BAmethod) keyFile.set_string ("Wavelet", "BAMethod", wavelet.BAmethod);
|
||||||
if (!pedited || pedited->wavelet.TMmethod) keyFile.set_string ("Wavelet", "TMMethod", wavelet.TMmethod);
|
if (!pedited || pedited->wavelet.TMmethod) keyFile.set_string ("Wavelet", "TMMethod", wavelet.TMmethod);
|
||||||
if (!pedited || pedited->wavelet.chro) keyFile.set_integer ("Wavelet", "ChromaLink", wavelet.chro);
|
if (!pedited || pedited->wavelet.chro) keyFile.set_integer ("Wavelet", "ChromaLink", wavelet.chro);
|
||||||
@ -2571,6 +2583,7 @@ if (keyFile.has_group ("Wavelet")) {
|
|||||||
if (keyFile.has_key ("Wavelet", "Medgreinf")) {wavelet.Medgreinf = keyFile.get_string ("Wavelet", "Medgreinf"); if (pedited) pedited->wavelet.Medgreinf = true; }
|
if (keyFile.has_key ("Wavelet", "Medgreinf")) {wavelet.Medgreinf = keyFile.get_string ("Wavelet", "Medgreinf"); if (pedited) pedited->wavelet.Medgreinf = true; }
|
||||||
if (keyFile.has_key ("Wavelet", "CHSLromaMethod")) {wavelet.CHSLmethod = keyFile.get_string ("Wavelet", "CHSLromaMethod"); if (pedited) pedited->wavelet.CHSLmethod = true; }
|
if (keyFile.has_key ("Wavelet", "CHSLromaMethod")) {wavelet.CHSLmethod = keyFile.get_string ("Wavelet", "CHSLromaMethod"); if (pedited) pedited->wavelet.CHSLmethod = true; }
|
||||||
if (keyFile.has_key ("Wavelet", "EDMethod")) {wavelet.EDmethod = keyFile.get_string ("Wavelet", "EDMethod"); if (pedited) pedited->wavelet.EDmethod = true; }
|
if (keyFile.has_key ("Wavelet", "EDMethod")) {wavelet.EDmethod = keyFile.get_string ("Wavelet", "EDMethod"); if (pedited) pedited->wavelet.EDmethod = true; }
|
||||||
|
if (keyFile.has_key ("Wavelet", "NPMethod")) {wavelet.NPmethod = keyFile.get_string ("Wavelet", "NPMethod"); if (pedited) pedited->wavelet.NPmethod = true; }
|
||||||
if (keyFile.has_key ("Wavelet", "BAMethod")) {wavelet.BAmethod = keyFile.get_string ("Wavelet", "BAMethod"); if (pedited) pedited->wavelet.BAmethod = true; }
|
if (keyFile.has_key ("Wavelet", "BAMethod")) {wavelet.BAmethod = keyFile.get_string ("Wavelet", "BAMethod"); if (pedited) pedited->wavelet.BAmethod = true; }
|
||||||
if (keyFile.has_key ("Wavelet", "TMMethod")) {wavelet.TMmethod = keyFile.get_string ("Wavelet", "TMMethod"); if (pedited) pedited->wavelet.TMmethod = true; }
|
if (keyFile.has_key ("Wavelet", "TMMethod")) {wavelet.TMmethod = keyFile.get_string ("Wavelet", "TMMethod"); if (pedited) pedited->wavelet.TMmethod = true; }
|
||||||
if (keyFile.has_key ("Wavelet", "HSMethod")) {wavelet.HSmethod = keyFile.get_string ("Wavelet", "HSMethod"); if (pedited) pedited->wavelet.HSmethod = true; }
|
if (keyFile.has_key ("Wavelet", "HSMethod")) {wavelet.HSmethod = keyFile.get_string ("Wavelet", "HSMethod"); if (pedited) pedited->wavelet.HSmethod = true; }
|
||||||
@ -2588,6 +2601,8 @@ if (keyFile.has_group ("Wavelet")) {
|
|||||||
if (keyFile.has_key ("Wavelet", "Edgedetect")) {wavelet.edgedetect = keyFile.get_integer ("Wavelet", "Edgedetect"); if (pedited) pedited->wavelet.edgedetect = true; }
|
if (keyFile.has_key ("Wavelet", "Edgedetect")) {wavelet.edgedetect = keyFile.get_integer ("Wavelet", "Edgedetect"); if (pedited) pedited->wavelet.edgedetect = true; }
|
||||||
if (keyFile.has_key ("Wavelet", "Edgedetectthr")) {wavelet.edgedetectthr = keyFile.get_integer ("Wavelet", "Edgedetectthr"); if (pedited) pedited->wavelet.edgedetectthr = true; }
|
if (keyFile.has_key ("Wavelet", "Edgedetectthr")) {wavelet.edgedetectthr = keyFile.get_integer ("Wavelet", "Edgedetectthr"); if (pedited) pedited->wavelet.edgedetectthr = true; }
|
||||||
if (keyFile.has_key ("Wavelet", "EdgedetectthrHi")) {wavelet.edgedetectthr2 = keyFile.get_integer ("Wavelet", "EdgedetectthrHi"); if (pedited) pedited->wavelet.edgedetectthr2 = true; }
|
if (keyFile.has_key ("Wavelet", "EdgedetectthrHi")) {wavelet.edgedetectthr2 = keyFile.get_integer ("Wavelet", "EdgedetectthrHi"); if (pedited) pedited->wavelet.edgedetectthr2 = true; }
|
||||||
|
if (keyFile.has_key ("Wavelet", "Edgesensi")) {wavelet.edgesensi = keyFile.get_integer ("Wavelet", "Edgesensi"); if (pedited) pedited->wavelet.edgesensi = true; }
|
||||||
|
if (keyFile.has_key ("Wavelet", "Edgeampli")) {wavelet.edgeampli = keyFile.get_integer ("Wavelet", "Edgeampli"); if (pedited) pedited->wavelet.edgeampli = true; }
|
||||||
if (keyFile.has_key ("Wavelet", "ThresholdChroma")) {wavelet.chroma = keyFile.get_integer ("Wavelet", "ThresholdChroma"); if (pedited) pedited->wavelet.chroma = true; }
|
if (keyFile.has_key ("Wavelet", "ThresholdChroma")) {wavelet.chroma = keyFile.get_integer ("Wavelet", "ThresholdChroma"); if (pedited) pedited->wavelet.chroma = true; }
|
||||||
if (keyFile.has_key ("Wavelet", "ChromaLink")) {wavelet.chro = keyFile.get_integer ("Wavelet", "ChromaLink"); if (pedited) pedited->wavelet.chro = true; }
|
if (keyFile.has_key ("Wavelet", "ChromaLink")) {wavelet.chro = keyFile.get_integer ("Wavelet", "ChromaLink"); if (pedited) pedited->wavelet.chro = true; }
|
||||||
if (keyFile.has_key ("Wavelet", "Contrast")) {wavelet.contrast = keyFile.get_integer ("Wavelet", "Contrast"); if (pedited) pedited->wavelet.contrast = true; }
|
if (keyFile.has_key ("Wavelet", "Contrast")) {wavelet.contrast = keyFile.get_integer ("Wavelet", "Contrast"); if (pedited) pedited->wavelet.contrast = true; }
|
||||||
@ -2645,6 +2660,12 @@ if (keyFile.has_group ("Wavelet")) {
|
|||||||
wavelet.level2noise.setValues(thresh.data()[0], thresh.data()[1]);
|
wavelet.level2noise.setValues(thresh.data()[0], thresh.data()[1]);
|
||||||
if (pedited) pedited->wavelet.level2noise = true;
|
if (pedited) pedited->wavelet.level2noise = true;
|
||||||
}
|
}
|
||||||
|
if (keyFile.has_key ("Wavelet", "Level3noise")) {
|
||||||
|
Glib::ArrayHandle<double> thresh = keyFile.get_double_list ("Wavelet", "Level3noise");
|
||||||
|
wavelet.level3noise.setValues(thresh.data()[0], thresh.data()[1]);
|
||||||
|
if (pedited) pedited->wavelet.level3noise = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (keyFile.has_key ("Wavelet", "Pastlev")) {
|
if (keyFile.has_key ("Wavelet", "Pastlev")) {
|
||||||
Glib::ArrayHandle<int> thresh = keyFile.get_integer_list ("Wavelet", "Pastlev");
|
Glib::ArrayHandle<int> thresh = keyFile.get_integer_list ("Wavelet", "Pastlev");
|
||||||
@ -3234,6 +3255,7 @@ bool ProcParams::operator== (const ProcParams& other) {
|
|||||||
&& wavelet.CHmethod == other.wavelet.CHmethod
|
&& wavelet.CHmethod == other.wavelet.CHmethod
|
||||||
&& wavelet.CHSLmethod == other.wavelet.CHSLmethod
|
&& wavelet.CHSLmethod == other.wavelet.CHSLmethod
|
||||||
&& wavelet.EDmethod == other.wavelet.EDmethod
|
&& wavelet.EDmethod == other.wavelet.EDmethod
|
||||||
|
&& wavelet.NPmethod == other.wavelet.NPmethod
|
||||||
&& wavelet.BAmethod == other.wavelet.BAmethod
|
&& wavelet.BAmethod == other.wavelet.BAmethod
|
||||||
&& wavelet.TMmethod == other.wavelet.TMmethod
|
&& wavelet.TMmethod == other.wavelet.TMmethod
|
||||||
&& wavelet.HSmethod == other.wavelet.HSmethod
|
&& wavelet.HSmethod == other.wavelet.HSmethod
|
||||||
@ -3274,6 +3296,8 @@ bool ProcParams::operator== (const ProcParams& other) {
|
|||||||
&& wavelet.edgedetect == other.wavelet.edgedetect
|
&& wavelet.edgedetect == other.wavelet.edgedetect
|
||||||
&& wavelet.edgedetectthr == other.wavelet.edgedetectthr
|
&& wavelet.edgedetectthr == other.wavelet.edgedetectthr
|
||||||
&& wavelet.edgedetectthr2 == other.wavelet.edgedetectthr2
|
&& wavelet.edgedetectthr2 == other.wavelet.edgedetectthr2
|
||||||
|
&& wavelet.edgesensi == other.wavelet.edgesensi
|
||||||
|
&& wavelet.edgeampli == other.wavelet.edgeampli
|
||||||
&& wavelet.hueskin == other.wavelet.hueskin
|
&& wavelet.hueskin == other.wavelet.hueskin
|
||||||
&& wavelet.hueskin2 == other.wavelet.hueskin2
|
&& wavelet.hueskin2 == other.wavelet.hueskin2
|
||||||
&& wavelet.hllev == other.wavelet.hllev
|
&& wavelet.hllev == other.wavelet.hllev
|
||||||
@ -3282,6 +3306,7 @@ bool ProcParams::operator== (const ProcParams& other) {
|
|||||||
&& wavelet.level0noise == other.wavelet.level0noise
|
&& wavelet.level0noise == other.wavelet.level0noise
|
||||||
&& wavelet.level1noise == other.wavelet.level1noise
|
&& wavelet.level1noise == other.wavelet.level1noise
|
||||||
&& wavelet.level2noise == other.wavelet.level2noise
|
&& wavelet.level2noise == other.wavelet.level2noise
|
||||||
|
&& wavelet.level3noise == other.wavelet.level3noise
|
||||||
&& wavelet.pastlev == other.wavelet.pastlev
|
&& wavelet.pastlev == other.wavelet.pastlev
|
||||||
&& wavelet.satlev == other.wavelet.satlev
|
&& wavelet.satlev == other.wavelet.satlev
|
||||||
&& wavelet.opacityCurveRG == other.wavelet.opacityCurveRG
|
&& wavelet.opacityCurveRG == other.wavelet.opacityCurveRG
|
||||||
|
@ -909,6 +909,7 @@ class WaveletParams {
|
|||||||
Glib::ustring Medgreinf;
|
Glib::ustring Medgreinf;
|
||||||
Glib::ustring CHSLmethod;
|
Glib::ustring CHSLmethod;
|
||||||
Glib::ustring EDmethod;
|
Glib::ustring EDmethod;
|
||||||
|
Glib::ustring NPmethod;
|
||||||
Glib::ustring BAmethod;
|
Glib::ustring BAmethod;
|
||||||
Glib::ustring TMmethod;
|
Glib::ustring TMmethod;
|
||||||
Glib::ustring Dirmethod;
|
Glib::ustring Dirmethod;
|
||||||
@ -928,6 +929,8 @@ class WaveletParams {
|
|||||||
int edgedetect;
|
int edgedetect;
|
||||||
int edgedetectthr;
|
int edgedetectthr;
|
||||||
int edgedetectthr2;
|
int edgedetectthr2;
|
||||||
|
int edgesensi;
|
||||||
|
int edgeampli;
|
||||||
int contrast;
|
int contrast;
|
||||||
int edgrad;
|
int edgrad;
|
||||||
int edgval;
|
int edgval;
|
||||||
@ -945,6 +948,7 @@ class WaveletParams {
|
|||||||
Threshold<double> level0noise;
|
Threshold<double> level0noise;
|
||||||
Threshold<double> level1noise;
|
Threshold<double> level1noise;
|
||||||
Threshold<double> level2noise;
|
Threshold<double> level2noise;
|
||||||
|
Threshold<double> level3noise;
|
||||||
|
|
||||||
|
|
||||||
WaveletParams ();
|
WaveletParams ();
|
||||||
|
@ -423,7 +423,11 @@ DIRPYREQUALIZER, // EvWavenaedge
|
|||||||
DIRPYREQUALIZER, // EvWavenares
|
DIRPYREQUALIZER, // EvWavenares
|
||||||
DIRPYREQUALIZER, // EvWavenafin
|
DIRPYREQUALIZER, // EvWavenafin
|
||||||
DIRPYREQUALIZER, // EvWavenatoning
|
DIRPYREQUALIZER, // EvWavenatoning
|
||||||
DIRPYREQUALIZER // EvWavenanoise
|
DIRPYREQUALIZER, // EvWavenanoise
|
||||||
|
DIRPYREQUALIZER, // EvWavedgesensi
|
||||||
|
DIRPYREQUALIZER, // EvWavedgeampli
|
||||||
|
DIRPYREQUALIZER, //EvWavlev3nois
|
||||||
|
DIRPYREQUALIZER //EvWavNPmet
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -379,6 +379,7 @@ void ParamsEdited::set (bool v) {
|
|||||||
wavelet.CHmethod = v;
|
wavelet.CHmethod = v;
|
||||||
wavelet.CHSLmethod = v;
|
wavelet.CHSLmethod = v;
|
||||||
wavelet.EDmethod = v;
|
wavelet.EDmethod = v;
|
||||||
|
wavelet.NPmethod = v;
|
||||||
wavelet.BAmethod = v;
|
wavelet.BAmethod = v;
|
||||||
wavelet.TMmethod = v;
|
wavelet.TMmethod = v;
|
||||||
wavelet.HSmethod = v;
|
wavelet.HSmethod = v;
|
||||||
@ -396,6 +397,8 @@ void ParamsEdited::set (bool v) {
|
|||||||
wavelet.edgedetect = v;
|
wavelet.edgedetect = v;
|
||||||
wavelet.edgedetectthr = v;
|
wavelet.edgedetectthr = v;
|
||||||
wavelet.edgedetectthr2 = v;
|
wavelet.edgedetectthr2 = v;
|
||||||
|
wavelet.edgesensi = v;
|
||||||
|
wavelet.edgeampli = v;
|
||||||
wavelet.chroma = v;
|
wavelet.chroma = v;
|
||||||
wavelet.chro = v;
|
wavelet.chro = v;
|
||||||
wavelet.contrast = v;
|
wavelet.contrast = v;
|
||||||
@ -413,6 +416,7 @@ void ParamsEdited::set (bool v) {
|
|||||||
wavelet.level0noise = v;
|
wavelet.level0noise = v;
|
||||||
wavelet.level1noise = v;
|
wavelet.level1noise = v;
|
||||||
wavelet.level2noise = v;
|
wavelet.level2noise = v;
|
||||||
|
wavelet.level3noise = v;
|
||||||
wavelet.ccwcurve = v;
|
wavelet.ccwcurve = v;
|
||||||
wavelet.opacityCurveRG = v;
|
wavelet.opacityCurveRG = v;
|
||||||
wavelet.opacityCurveBY = v;
|
wavelet.opacityCurveBY = v;
|
||||||
@ -824,6 +828,7 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
|
|||||||
wavelet.CHmethod = wavelet.CHmethod && p.wavelet.CHmethod == other.wavelet.CHmethod;
|
wavelet.CHmethod = wavelet.CHmethod && p.wavelet.CHmethod == other.wavelet.CHmethod;
|
||||||
wavelet.CHSLmethod = wavelet.CHSLmethod && p.wavelet.CHSLmethod == other.wavelet.CHSLmethod;
|
wavelet.CHSLmethod = wavelet.CHSLmethod && p.wavelet.CHSLmethod == other.wavelet.CHSLmethod;
|
||||||
wavelet.EDmethod = wavelet.EDmethod && p.wavelet.EDmethod == other.wavelet.EDmethod;
|
wavelet.EDmethod = wavelet.EDmethod && p.wavelet.EDmethod == other.wavelet.EDmethod;
|
||||||
|
wavelet.NPmethod = wavelet.NPmethod && p.wavelet.NPmethod == other.wavelet.NPmethod;
|
||||||
wavelet.BAmethod = wavelet.BAmethod && p.wavelet.BAmethod == other.wavelet.BAmethod;
|
wavelet.BAmethod = wavelet.BAmethod && p.wavelet.BAmethod == other.wavelet.BAmethod;
|
||||||
wavelet.TMmethod = wavelet.TMmethod && p.wavelet.TMmethod == other.wavelet.TMmethod;
|
wavelet.TMmethod = wavelet.TMmethod && p.wavelet.TMmethod == other.wavelet.TMmethod;
|
||||||
wavelet.HSmethod = wavelet.HSmethod && p.wavelet.HSmethod == other.wavelet.HSmethod;
|
wavelet.HSmethod = wavelet.HSmethod && p.wavelet.HSmethod == other.wavelet.HSmethod;
|
||||||
@ -840,6 +845,8 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
|
|||||||
wavelet.edgedetect = wavelet.edgedetect && p.wavelet.edgedetect == other.wavelet.edgedetect;
|
wavelet.edgedetect = wavelet.edgedetect && p.wavelet.edgedetect == other.wavelet.edgedetect;
|
||||||
wavelet.edgedetectthr = wavelet.edgedetectthr && p.wavelet.edgedetectthr == other.wavelet.edgedetectthr;
|
wavelet.edgedetectthr = wavelet.edgedetectthr && p.wavelet.edgedetectthr == other.wavelet.edgedetectthr;
|
||||||
wavelet.edgedetectthr2 = wavelet.edgedetectthr2 && p.wavelet.edgedetectthr2 == other.wavelet.edgedetectthr2;
|
wavelet.edgedetectthr2 = wavelet.edgedetectthr2 && p.wavelet.edgedetectthr2 == other.wavelet.edgedetectthr2;
|
||||||
|
wavelet.edgesensi = wavelet.edgesensi && p.wavelet.edgesensi == other.wavelet.edgesensi;
|
||||||
|
wavelet.edgeampli = wavelet.edgeampli && p.wavelet.edgeampli == other.wavelet.edgeampli;
|
||||||
wavelet.thres = wavelet.thres && p.wavelet.thres == other.wavelet.thres;
|
wavelet.thres = wavelet.thres && p.wavelet.thres == other.wavelet.thres;
|
||||||
wavelet.chroma = wavelet.chroma && p.wavelet.chroma == other.wavelet.chroma;
|
wavelet.chroma = wavelet.chroma && p.wavelet.chroma == other.wavelet.chroma;
|
||||||
wavelet.chro = wavelet.chro && p.wavelet.chro == other.wavelet.chro;
|
wavelet.chro = wavelet.chro && p.wavelet.chro == other.wavelet.chro;
|
||||||
@ -857,6 +864,7 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
|
|||||||
wavelet.level0noise = wavelet.level0noise && p.wavelet.level0noise == other.wavelet.level0noise;
|
wavelet.level0noise = wavelet.level0noise && p.wavelet.level0noise == other.wavelet.level0noise;
|
||||||
wavelet.level1noise = wavelet.level1noise && p.wavelet.level1noise == other.wavelet.level1noise;
|
wavelet.level1noise = wavelet.level1noise && p.wavelet.level1noise == other.wavelet.level1noise;
|
||||||
wavelet.level2noise = wavelet.level2noise && p.wavelet.level2noise == other.wavelet.level2noise;
|
wavelet.level2noise = wavelet.level2noise && p.wavelet.level2noise == other.wavelet.level2noise;
|
||||||
|
wavelet.level3noise = wavelet.level3noise && p.wavelet.level3noise == other.wavelet.level3noise;
|
||||||
wavelet.pastlev = wavelet.pastlev && p.wavelet.pastlev == other.wavelet.pastlev;
|
wavelet.pastlev = wavelet.pastlev && p.wavelet.pastlev == other.wavelet.pastlev;
|
||||||
wavelet.satlev = wavelet.satlev && p.wavelet.satlev == other.wavelet.satlev;
|
wavelet.satlev = wavelet.satlev && p.wavelet.satlev == other.wavelet.satlev;
|
||||||
wavelet.ccwcurve = wavelet.ccwcurve && p.wavelet.ccwcurve == other.wavelet.ccwcurve;
|
wavelet.ccwcurve = wavelet.ccwcurve && p.wavelet.ccwcurve == other.wavelet.ccwcurve;
|
||||||
@ -1271,6 +1279,7 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
|||||||
if (wavelet.CHmethod) toEdit.wavelet.CHmethod = mods.wavelet.CHmethod;
|
if (wavelet.CHmethod) toEdit.wavelet.CHmethod = mods.wavelet.CHmethod;
|
||||||
if (wavelet.CHSLmethod) toEdit.wavelet.CHSLmethod = mods.wavelet.CHSLmethod;
|
if (wavelet.CHSLmethod) toEdit.wavelet.CHSLmethod = mods.wavelet.CHSLmethod;
|
||||||
if (wavelet.EDmethod) toEdit.wavelet.EDmethod = mods.wavelet.EDmethod;
|
if (wavelet.EDmethod) toEdit.wavelet.EDmethod = mods.wavelet.EDmethod;
|
||||||
|
if (wavelet.NPmethod) toEdit.wavelet.NPmethod = mods.wavelet.NPmethod;
|
||||||
if (wavelet.BAmethod) toEdit.wavelet.BAmethod = mods.wavelet.BAmethod;
|
if (wavelet.BAmethod) toEdit.wavelet.BAmethod = mods.wavelet.BAmethod;
|
||||||
if (wavelet.TMmethod) toEdit.wavelet.TMmethod = mods.wavelet.TMmethod;
|
if (wavelet.TMmethod) toEdit.wavelet.TMmethod = mods.wavelet.TMmethod;
|
||||||
if (wavelet.HSmethod) toEdit.wavelet.HSmethod = mods.wavelet.HSmethod;
|
if (wavelet.HSmethod) toEdit.wavelet.HSmethod = mods.wavelet.HSmethod;
|
||||||
@ -1286,6 +1295,7 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
|||||||
if (wavelet.level0noise) toEdit.wavelet.level0noise = mods.wavelet.level0noise;
|
if (wavelet.level0noise) toEdit.wavelet.level0noise = mods.wavelet.level0noise;
|
||||||
if (wavelet.level1noise) toEdit.wavelet.level1noise = mods.wavelet.level1noise;
|
if (wavelet.level1noise) toEdit.wavelet.level1noise = mods.wavelet.level1noise;
|
||||||
if (wavelet.level2noise) toEdit.wavelet.level2noise = mods.wavelet.level2noise;
|
if (wavelet.level2noise) toEdit.wavelet.level2noise = mods.wavelet.level2noise;
|
||||||
|
if (wavelet.level3noise) toEdit.wavelet.level3noise = mods.wavelet.level3noise;
|
||||||
if (wavelet.pastlev) toEdit.wavelet.pastlev = mods.wavelet.pastlev;
|
if (wavelet.pastlev) toEdit.wavelet.pastlev = mods.wavelet.pastlev;
|
||||||
if (wavelet.satlev) toEdit.wavelet.satlev = mods.wavelet.satlev;
|
if (wavelet.satlev) toEdit.wavelet.satlev = mods.wavelet.satlev;
|
||||||
if (wavelet.ccwcurve) toEdit.wavelet.ccwcurve = mods.wavelet.ccwcurve;
|
if (wavelet.ccwcurve) toEdit.wavelet.ccwcurve = mods.wavelet.ccwcurve;
|
||||||
@ -1314,6 +1324,8 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
|||||||
if (wavelet.skinprotect)toEdit.wavelet.skinprotect= dontforceSet && options.baBehav[ADDSET_WA_SKINPROTECT] ? toEdit.wavelet.skinprotect + mods.wavelet.skinprotect : mods.wavelet.skinprotect;
|
if (wavelet.skinprotect)toEdit.wavelet.skinprotect= dontforceSet && options.baBehav[ADDSET_WA_SKINPROTECT] ? toEdit.wavelet.skinprotect + mods.wavelet.skinprotect : mods.wavelet.skinprotect;
|
||||||
if (wavelet.hueskin) toEdit.wavelet.hueskin = mods.wavelet.hueskin;
|
if (wavelet.hueskin) toEdit.wavelet.hueskin = mods.wavelet.hueskin;
|
||||||
if (wavelet.hueskin2) toEdit.wavelet.hueskin2 = mods.wavelet.hueskin2;
|
if (wavelet.hueskin2) toEdit.wavelet.hueskin2 = mods.wavelet.hueskin2;
|
||||||
|
if (wavelet.edgesensi) toEdit.wavelet.edgesensi = mods.wavelet.edgesensi;
|
||||||
|
if (wavelet.edgeampli) toEdit.wavelet.edgeampli = mods.wavelet.edgeampli;
|
||||||
if (wavelet.resconH)toEdit.wavelet.resconH= dontforceSet && options.baBehav[ADDSET_WA_RESCONH] ? toEdit.wavelet.resconH + mods.wavelet.resconH : mods.wavelet.resconH;
|
if (wavelet.resconH)toEdit.wavelet.resconH= dontforceSet && options.baBehav[ADDSET_WA_RESCONH] ? toEdit.wavelet.resconH + mods.wavelet.resconH : mods.wavelet.resconH;
|
||||||
if (wavelet.reschro)toEdit.wavelet.reschro= dontforceSet && options.baBehav[ADDSET_WA_RESCHRO] ? toEdit.wavelet.reschro + mods.wavelet.reschro : mods.wavelet.reschro;
|
if (wavelet.reschro)toEdit.wavelet.reschro= dontforceSet && options.baBehav[ADDSET_WA_RESCHRO] ? toEdit.wavelet.reschro + mods.wavelet.reschro : mods.wavelet.reschro;
|
||||||
if (wavelet.tmrs)toEdit.wavelet.tmrs= dontforceSet && options.baBehav[ADDSET_WA_TMRS] ? toEdit.wavelet.tmrs + mods.wavelet.tmrs : mods.wavelet.tmrs;
|
if (wavelet.tmrs)toEdit.wavelet.tmrs= dontforceSet && options.baBehav[ADDSET_WA_TMRS] ? toEdit.wavelet.tmrs + mods.wavelet.tmrs : mods.wavelet.tmrs;
|
||||||
|
@ -498,6 +498,7 @@ class WaveletParamsEdited {
|
|||||||
bool CHSLmethod;
|
bool CHSLmethod;
|
||||||
bool EDmethod;
|
bool EDmethod;
|
||||||
bool BAmethod;
|
bool BAmethod;
|
||||||
|
bool NPmethod;
|
||||||
bool TMmethod;
|
bool TMmethod;
|
||||||
bool HSmethod;
|
bool HSmethod;
|
||||||
bool CLmethod;
|
bool CLmethod;
|
||||||
@ -518,6 +519,8 @@ class WaveletParamsEdited {
|
|||||||
bool edgedetect;
|
bool edgedetect;
|
||||||
bool edgedetectthr;
|
bool edgedetectthr;
|
||||||
bool edgedetectthr2;
|
bool edgedetectthr2;
|
||||||
|
bool edgesensi;
|
||||||
|
bool edgeampli;
|
||||||
bool chro;
|
bool chro;
|
||||||
bool chroma;
|
bool chroma;
|
||||||
bool contrast;
|
bool contrast;
|
||||||
@ -535,6 +538,7 @@ class WaveletParamsEdited {
|
|||||||
bool level0noise;
|
bool level0noise;
|
||||||
bool level1noise;
|
bool level1noise;
|
||||||
bool level2noise;
|
bool level2noise;
|
||||||
|
bool level3noise;
|
||||||
bool ccwcurve;
|
bool ccwcurve;
|
||||||
bool opacityCurveBY;
|
bool opacityCurveBY;
|
||||||
bool opacityCurveRG;
|
bool opacityCurveRG;
|
||||||
|
163
rtgui/wavelet.cc
163
rtgui/wavelet.cc
@ -96,7 +96,7 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
|||||||
strength = Gtk::manage (new Adjuster (M("TP_WAVELET_STRENGTH"), 0, 100, 1, 100));
|
strength = Gtk::manage (new Adjuster (M("TP_WAVELET_STRENGTH"), 0, 100, 1, 100));
|
||||||
strength->setAdjusterListener (this);
|
strength->setAdjusterListener (this);
|
||||||
|
|
||||||
thres = Gtk::manage (new Adjuster (M("TP_WAVELET_LEVELS"), 3, 9, 1, 7));
|
thres = Gtk::manage (new Adjuster (M("TP_WAVELET_LEVELS"), 4, 9, 1, 7));//3
|
||||||
thres->set_tooltip_text (M("TP_WAVELET_LEVELS_TOOLTIP"));
|
thres->set_tooltip_text (M("TP_WAVELET_LEVELS_TOOLTIP"));
|
||||||
thres->setAdjusterListener (this);
|
thres->setAdjusterListener (this);
|
||||||
|
|
||||||
@ -392,9 +392,14 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
|||||||
level2noise->setAdjusterListener (this);
|
level2noise->setAdjusterListener (this);
|
||||||
level2noise->setUpdatePolicy(RTUP_DYNAMIC);
|
level2noise->setUpdatePolicy(RTUP_DYNAMIC);
|
||||||
|
|
||||||
|
level3noise = Gtk::manage (new ThresholdAdjuster (M("TP_WAVELET_LEVTHRE"), -30., 100., 0., M("TP_WAVELET_STREN"), 1., 0., 100., 0., M("TP_WAVELET_NOIS"), 1., NULL, false));
|
||||||
|
level3noise->setAdjusterListener (this);
|
||||||
|
level3noise->setUpdatePolicy(RTUP_DYNAMIC);
|
||||||
|
|
||||||
noiseBox->pack_start( *level0noise, Gtk::PACK_SHRINK, 0);
|
noiseBox->pack_start( *level0noise, Gtk::PACK_SHRINK, 0);
|
||||||
noiseBox->pack_start( *level1noise, Gtk::PACK_SHRINK, 0);
|
noiseBox->pack_start( *level1noise, Gtk::PACK_SHRINK, 0);
|
||||||
noiseBox->pack_start( *level2noise, Gtk::PACK_SHRINK, 0);
|
noiseBox->pack_start( *level2noise, Gtk::PACK_SHRINK, 0);
|
||||||
|
noiseBox->pack_start( *level3noise, Gtk::PACK_SHRINK, 0);
|
||||||
|
|
||||||
// Edge Sharpness
|
// Edge Sharpness
|
||||||
Gtk::VBox * edgBox = Gtk::manage (new Gtk::VBox());
|
Gtk::VBox * edgBox = Gtk::manage (new Gtk::VBox());
|
||||||
@ -472,6 +477,7 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
|||||||
medianlev = Gtk::manage (new Gtk::CheckButton (M("TP_WAVELET_MEDILEV")));
|
medianlev = Gtk::manage (new Gtk::CheckButton (M("TP_WAVELET_MEDILEV")));
|
||||||
medianlev->set_active (true);
|
medianlev->set_active (true);
|
||||||
medianlevConn = medianlev->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::medianlevToggled) );
|
medianlevConn = medianlev->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::medianlevToggled) );
|
||||||
|
medianlev->set_tooltip_text (M("TP_WAVELET_MEDILEV_TOOLTIP"));
|
||||||
|
|
||||||
Gtk::HSeparator *separatored1 = Gtk::manage (new Gtk::HSeparator());
|
Gtk::HSeparator *separatored1 = Gtk::manage (new Gtk::HSeparator());
|
||||||
edgBox->pack_start(*separatored1, Gtk::PACK_SHRINK, 2);
|
edgBox->pack_start(*separatored1, Gtk::PACK_SHRINK, 2);
|
||||||
@ -481,7 +487,7 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
|||||||
edgBox->pack_start (*eddebox);
|
edgBox->pack_start (*eddebox);
|
||||||
edgBox->pack_start(*medianlev);
|
edgBox->pack_start(*medianlev);
|
||||||
|
|
||||||
edgedetect = Gtk::manage (new Adjuster (M("TP_WAVELET_EDGEDETECT"), 0, 100, 1, 80));
|
edgedetect = Gtk::manage (new Adjuster (M("TP_WAVELET_EDGEDETECT"), 0, 100, 1, 90));
|
||||||
edgedetect->setAdjusterListener (this);
|
edgedetect->setAdjusterListener (this);
|
||||||
edgedetect->set_tooltip_text (M("TP_WAVELET_EDGEDETECT_TOOLTIP"));
|
edgedetect->set_tooltip_text (M("TP_WAVELET_EDGEDETECT_TOOLTIP"));
|
||||||
edgBox->pack_start(*edgedetect);
|
edgBox->pack_start(*edgedetect);
|
||||||
@ -496,10 +502,48 @@ Wavelet::Wavelet () : FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"),
|
|||||||
edgedetectthr2->setAdjusterListener (this);
|
edgedetectthr2->setAdjusterListener (this);
|
||||||
edgBox->pack_start(*edgedetectthr2);
|
edgBox->pack_start(*edgedetectthr2);
|
||||||
|
|
||||||
|
|
||||||
|
separatoredge = Gtk::manage (new Gtk::HSeparator());
|
||||||
|
|
||||||
|
edgBox->pack_start(*separatoredge, Gtk::PACK_SHRINK, 2);
|
||||||
|
|
||||||
lipst = Gtk::manage (new Gtk::CheckButton (M("TP_WAVELET_LIPST")));
|
lipst = Gtk::manage (new Gtk::CheckButton (M("TP_WAVELET_LIPST")));
|
||||||
lipst->set_active (true);
|
lipst->set_active (true);
|
||||||
lipstConn = lipst->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::lipstToggled) );
|
lipstConn = lipst->signal_toggled().connect( sigc::mem_fun(*this, &Wavelet::lipstToggled) );
|
||||||
lipst->set_tooltip_text (M("TP_WAVELET_LIPST_TOOLTIP"));
|
// lipst->set_tooltip_text (M("TP_WAVELET_LIPST_TOOLTIP"));
|
||||||
|
edgBox->pack_start(*lipst);
|
||||||
|
|
||||||
|
edgesensi = Gtk::manage (new Adjuster (M("TP_WAVELET_EDGESENSI"), 0, 100, 1, 60));
|
||||||
|
edgesensi->setAdjusterListener (this);
|
||||||
|
edgBox->pack_start(*edgesensi);
|
||||||
|
|
||||||
|
|
||||||
|
edgeampli = Gtk::manage (new Adjuster (M("TP_WAVELET_EDGEAMPLI"), 0, 100, 1, 10));
|
||||||
|
edgeampli->setAdjusterListener (this);
|
||||||
|
edgBox->pack_start(*edgeampli);
|
||||||
|
|
||||||
|
|
||||||
|
Gtk::VBox * ctboxES = Gtk::manage (new Gtk::VBox());
|
||||||
|
|
||||||
|
ctboxES->set_border_width(4);
|
||||||
|
ctboxES->set_spacing(2);
|
||||||
|
|
||||||
|
ctboxNP = Gtk::manage (new Gtk::HBox());
|
||||||
|
|
||||||
|
labmNP = Gtk::manage (new Gtk::Label (M("TP_WAVELET_NPTYPE")+":"));
|
||||||
|
ctboxNP->pack_start (*labmNP, Gtk::PACK_SHRINK, 1);
|
||||||
|
|
||||||
|
NPmethod = Gtk::manage (new MyComboBoxText ());
|
||||||
|
NPmethod->append_text (M("TP_WAVELET_NPNONE"));
|
||||||
|
NPmethod->append_text (M("TP_WAVELET_NPLOW"));
|
||||||
|
NPmethod->append_text (M("TP_WAVELET_NPHIGH"));
|
||||||
|
NPmethodconn = NPmethod->signal_changed().connect ( sigc::mem_fun(*this, &Wavelet::NPmethodChanged) );
|
||||||
|
NPmethod->set_tooltip_text (M("TP_WAVELET_NPTYPE_TOOLTIP"));
|
||||||
|
|
||||||
|
ctboxNP->pack_start(*NPmethod);
|
||||||
|
ctboxES->pack_start(*ctboxNP);
|
||||||
|
|
||||||
|
edgBox->pack_start(*ctboxES);
|
||||||
|
|
||||||
// Gamut
|
// Gamut
|
||||||
Gtk::VBox * conBox = Gtk::manage (new Gtk::VBox());
|
Gtk::VBox * conBox = Gtk::manage (new Gtk::VBox());
|
||||||
@ -911,6 +955,7 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
CHmethodconn.block(true);
|
CHmethodconn.block(true);
|
||||||
CHSLmethodconn.block(true);
|
CHSLmethodconn.block(true);
|
||||||
EDmethodconn.block(true);
|
EDmethodconn.block(true);
|
||||||
|
NPmethodconn.block(true);
|
||||||
BAmethodconn.block(true);
|
BAmethodconn.block(true);
|
||||||
TMmethodconn.block(true);
|
TMmethodconn.block(true);
|
||||||
HSmethodconn.block(true);
|
HSmethodconn.block(true);
|
||||||
@ -964,6 +1009,13 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
else if (pp->wavelet.EDmethod=="CU")
|
else if (pp->wavelet.EDmethod=="CU")
|
||||||
EDmethod->set_active (1);
|
EDmethod->set_active (1);
|
||||||
|
|
||||||
|
if (pp->wavelet.NPmethod=="none")
|
||||||
|
NPmethod->set_active (0);
|
||||||
|
else if (pp->wavelet.NPmethod=="low")
|
||||||
|
NPmethod->set_active (1);
|
||||||
|
else if (pp->wavelet.NPmethod=="high")
|
||||||
|
NPmethod->set_active (2);
|
||||||
|
|
||||||
//BAmethod->set_active (0);
|
//BAmethod->set_active (0);
|
||||||
if (pp->wavelet.BAmethod=="none")
|
if (pp->wavelet.BAmethod=="none")
|
||||||
BAmethod->set_active (0);
|
BAmethod->set_active (0);
|
||||||
@ -1112,6 +1164,8 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
edgedetect->setValue(pp->wavelet.edgedetect);
|
edgedetect->setValue(pp->wavelet.edgedetect);
|
||||||
edgedetectthr->setValue(pp->wavelet.edgedetectthr);
|
edgedetectthr->setValue(pp->wavelet.edgedetectthr);
|
||||||
edgedetectthr2->setValue(pp->wavelet.edgedetectthr2);
|
edgedetectthr2->setValue(pp->wavelet.edgedetectthr2);
|
||||||
|
edgesensi->setValue(pp->wavelet.edgesensi);
|
||||||
|
edgeampli->setValue(pp->wavelet.edgeampli);
|
||||||
hllev->setValue<int>(pp->wavelet.hllev);
|
hllev->setValue<int>(pp->wavelet.hllev);
|
||||||
bllev->setValue<int>(pp->wavelet.bllev);
|
bllev->setValue<int>(pp->wavelet.bllev);
|
||||||
pastlev->setValue<int>(pp->wavelet.pastlev);
|
pastlev->setValue<int>(pp->wavelet.pastlev);
|
||||||
@ -1128,6 +1182,7 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
level0noise->setValue<double>(pp->wavelet.level0noise);
|
level0noise->setValue<double>(pp->wavelet.level0noise);
|
||||||
level1noise->setValue<double>(pp->wavelet.level1noise);
|
level1noise->setValue<double>(pp->wavelet.level1noise);
|
||||||
level2noise->setValue<double>(pp->wavelet.level2noise);
|
level2noise->setValue<double>(pp->wavelet.level2noise);
|
||||||
|
level3noise->setValue<double>(pp->wavelet.level3noise);
|
||||||
strength->setValue(pp->wavelet.strength);
|
strength->setValue(pp->wavelet.strength);
|
||||||
balance->setValue(pp->wavelet.balance);
|
balance->setValue(pp->wavelet.balance);
|
||||||
iter->setValue(pp->wavelet.iter);
|
iter->setValue(pp->wavelet.iter);
|
||||||
@ -1164,6 +1219,8 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
CHSLmethod->set_active_text(M("GENERAL_UNCHANGED"));
|
CHSLmethod->set_active_text(M("GENERAL_UNCHANGED"));
|
||||||
if (!pedited->wavelet.EDmethod)
|
if (!pedited->wavelet.EDmethod)
|
||||||
EDmethod->set_active_text(M("GENERAL_UNCHANGED"));
|
EDmethod->set_active_text(M("GENERAL_UNCHANGED"));
|
||||||
|
if (!pedited->wavelet.NPmethod)
|
||||||
|
NPmethod->set_active_text(M("GENERAL_UNCHANGED"));
|
||||||
if (!pedited->wavelet.BAmethod)
|
if (!pedited->wavelet.BAmethod)
|
||||||
BAmethod->set_active_text(M("GENERAL_UNCHANGED"));
|
BAmethod->set_active_text(M("GENERAL_UNCHANGED"));
|
||||||
if (!pedited->wavelet.TMmethod)
|
if (!pedited->wavelet.TMmethod)
|
||||||
@ -1207,6 +1264,8 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
edgedetect->setEditedState (pedited->wavelet.edgedetect ? Edited : UnEdited);
|
edgedetect->setEditedState (pedited->wavelet.edgedetect ? Edited : UnEdited);
|
||||||
edgedetectthr->setEditedState (pedited->wavelet.edgedetectthr ? Edited : UnEdited);
|
edgedetectthr->setEditedState (pedited->wavelet.edgedetectthr ? Edited : UnEdited);
|
||||||
edgedetectthr2->setEditedState (pedited->wavelet.edgedetectthr2 ? Edited : UnEdited);
|
edgedetectthr2->setEditedState (pedited->wavelet.edgedetectthr2 ? Edited : UnEdited);
|
||||||
|
edgesensi->setEditedState (pedited->wavelet.edgesensi ? Edited : UnEdited);
|
||||||
|
edgeampli->setEditedState (pedited->wavelet.edgeampli ? Edited : UnEdited);
|
||||||
chroma->setEditedState (pedited->wavelet.chroma ? Edited : UnEdited);
|
chroma->setEditedState (pedited->wavelet.chroma ? Edited : UnEdited);
|
||||||
chro->setEditedState (pedited->wavelet.chro ? Edited : UnEdited);
|
chro->setEditedState (pedited->wavelet.chro ? Edited : UnEdited);
|
||||||
|
|
||||||
@ -1240,6 +1299,7 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
level0noise->setEditedState (pedited->wavelet.level0noise ? Edited : UnEdited);
|
level0noise->setEditedState (pedited->wavelet.level0noise ? Edited : UnEdited);
|
||||||
level1noise->setEditedState (pedited->wavelet.level1noise ? Edited : UnEdited);
|
level1noise->setEditedState (pedited->wavelet.level1noise ? Edited : UnEdited);
|
||||||
level2noise->setEditedState (pedited->wavelet.level2noise ? Edited : UnEdited);
|
level2noise->setEditedState (pedited->wavelet.level2noise ? Edited : UnEdited);
|
||||||
|
level3noise->setEditedState (pedited->wavelet.level3noise ? Edited : UnEdited);
|
||||||
|
|
||||||
for(int i = 0; i < 9; i++) {
|
for(int i = 0; i < 9; i++) {
|
||||||
correction[i]->setEditedState (pedited->wavelet.c[i] ? Edited : UnEdited);
|
correction[i]->setEditedState (pedited->wavelet.c[i] ? Edited : UnEdited);
|
||||||
@ -1272,10 +1332,12 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
//MedgreinfUpdateUI();
|
//MedgreinfUpdateUI();
|
||||||
//CHSLmethodUpdateUI();
|
//CHSLmethodUpdateUI();
|
||||||
EDmethodUpdateUI();
|
EDmethodUpdateUI();
|
||||||
|
NPmethodUpdateUI();
|
||||||
BAmethodUpdateUI();
|
BAmethodUpdateUI();
|
||||||
TMmethodUpdateUI();
|
TMmethodUpdateUI();
|
||||||
//BackmethodUpdateUI();
|
//BackmethodUpdateUI();
|
||||||
CLmethodUpdateUI();
|
CLmethodUpdateUI();
|
||||||
|
lipstUpdateUI ();
|
||||||
//TilesmethodUpdateUI();
|
//TilesmethodUpdateUI();
|
||||||
//daubcoeffmethodUpdateUI();
|
//daubcoeffmethodUpdateUI();
|
||||||
//DirmethodUpdateUI();
|
//DirmethodUpdateUI();
|
||||||
@ -1300,6 +1362,7 @@ void Wavelet::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
CHmethodconn.block(false);
|
CHmethodconn.block(false);
|
||||||
CHSLmethodconn.block(false);
|
CHSLmethodconn.block(false);
|
||||||
EDmethodconn.block(false);
|
EDmethodconn.block(false);
|
||||||
|
NPmethodconn.block(false);
|
||||||
BAmethodconn.block(false);
|
BAmethodconn.block(false);
|
||||||
TMmethodconn.block(false);
|
TMmethodconn.block(false);
|
||||||
HSmethodconn.block(false);
|
HSmethodconn.block(false);
|
||||||
@ -1368,12 +1431,15 @@ void Wavelet::write (ProcParams* pp, ParamsEdited* pedited) {
|
|||||||
pp->wavelet.edgedetect = edgedetect->getValue();
|
pp->wavelet.edgedetect = edgedetect->getValue();
|
||||||
pp->wavelet.edgedetectthr = edgedetectthr->getValue();
|
pp->wavelet.edgedetectthr = edgedetectthr->getValue();
|
||||||
pp->wavelet.edgedetectthr2 = edgedetectthr2->getValue();
|
pp->wavelet.edgedetectthr2 = edgedetectthr2->getValue();
|
||||||
|
pp->wavelet.edgesensi = edgesensi->getValue();
|
||||||
|
pp->wavelet.edgeampli = edgeampli->getValue();
|
||||||
pp->wavelet.hllev = hllev->getValue<int> ();
|
pp->wavelet.hllev = hllev->getValue<int> ();
|
||||||
pp->wavelet.bllev = bllev->getValue<int> ();
|
pp->wavelet.bllev = bllev->getValue<int> ();
|
||||||
pp->wavelet.edgcont = edgcont->getValue<int> ();
|
pp->wavelet.edgcont = edgcont->getValue<int> ();
|
||||||
pp->wavelet.level0noise = level0noise->getValue<double> ();
|
pp->wavelet.level0noise = level0noise->getValue<double> ();
|
||||||
pp->wavelet.level1noise = level1noise->getValue<double> ();
|
pp->wavelet.level1noise = level1noise->getValue<double> ();
|
||||||
pp->wavelet.level2noise = level2noise->getValue<double> ();
|
pp->wavelet.level2noise = level2noise->getValue<double> ();
|
||||||
|
pp->wavelet.level3noise = level3noise->getValue<double> ();
|
||||||
pp->wavelet.ccwcurve = ccshape->getCurve ();
|
pp->wavelet.ccwcurve = ccshape->getCurve ();
|
||||||
pp->wavelet.opacityCurveRG = opacityShapeRG->getCurve ();
|
pp->wavelet.opacityCurveRG = opacityShapeRG->getCurve ();
|
||||||
pp->wavelet.opacityCurveBY = opacityShapeBY->getCurve ();
|
pp->wavelet.opacityCurveBY = opacityShapeBY->getCurve ();
|
||||||
@ -1426,6 +1492,7 @@ void Wavelet::write (ProcParams* pp, ParamsEdited* pedited) {
|
|||||||
pedited->wavelet.CHmethod = CHmethod->get_active_text() != M("GENERAL_UNCHANGED");
|
pedited->wavelet.CHmethod = CHmethod->get_active_text() != M("GENERAL_UNCHANGED");
|
||||||
pedited->wavelet.CHSLmethod = CHSLmethod->get_active_text() != M("GENERAL_UNCHANGED");
|
pedited->wavelet.CHSLmethod = CHSLmethod->get_active_text() != M("GENERAL_UNCHANGED");
|
||||||
pedited->wavelet.EDmethod = EDmethod->get_active_text() != M("GENERAL_UNCHANGED");
|
pedited->wavelet.EDmethod = EDmethod->get_active_text() != M("GENERAL_UNCHANGED");
|
||||||
|
pedited->wavelet.NPmethod = NPmethod->get_active_text() != M("GENERAL_UNCHANGED");
|
||||||
pedited->wavelet.BAmethod = BAmethod->get_active_text() != M("GENERAL_UNCHANGED");
|
pedited->wavelet.BAmethod = BAmethod->get_active_text() != M("GENERAL_UNCHANGED");
|
||||||
pedited->wavelet.TMmethod = TMmethod->get_active_text() != M("GENERAL_UNCHANGED");
|
pedited->wavelet.TMmethod = TMmethod->get_active_text() != M("GENERAL_UNCHANGED");
|
||||||
pedited->wavelet.HSmethod = HSmethod->get_active_text() != M("GENERAL_UNCHANGED");
|
pedited->wavelet.HSmethod = HSmethod->get_active_text() != M("GENERAL_UNCHANGED");
|
||||||
@ -1444,6 +1511,8 @@ void Wavelet::write (ProcParams* pp, ParamsEdited* pedited) {
|
|||||||
pedited->wavelet.edgedetect = edgedetect->getEditedState();
|
pedited->wavelet.edgedetect = edgedetect->getEditedState();
|
||||||
pedited->wavelet.edgedetectthr = edgedetectthr->getEditedState();
|
pedited->wavelet.edgedetectthr = edgedetectthr->getEditedState();
|
||||||
pedited->wavelet.edgedetectthr2 = edgedetectthr2->getEditedState();
|
pedited->wavelet.edgedetectthr2 = edgedetectthr2->getEditedState();
|
||||||
|
pedited->wavelet.edgesensi = edgesensi->getEditedState();
|
||||||
|
pedited->wavelet.edgeampli = edgeampli->getEditedState();
|
||||||
pedited->wavelet.chroma = chroma->getEditedState();
|
pedited->wavelet.chroma = chroma->getEditedState();
|
||||||
pedited->wavelet.chro = chro->getEditedState();
|
pedited->wavelet.chro = chro->getEditedState();
|
||||||
pedited->wavelet.contrast = contrast->getEditedState();
|
pedited->wavelet.contrast = contrast->getEditedState();
|
||||||
@ -1460,6 +1529,7 @@ void Wavelet::write (ProcParams* pp, ParamsEdited* pedited) {
|
|||||||
pedited->wavelet.level0noise = level0noise->getEditedState ();
|
pedited->wavelet.level0noise = level0noise->getEditedState ();
|
||||||
pedited->wavelet.level1noise = level1noise->getEditedState ();
|
pedited->wavelet.level1noise = level1noise->getEditedState ();
|
||||||
pedited->wavelet.level2noise = level2noise->getEditedState ();
|
pedited->wavelet.level2noise = level2noise->getEditedState ();
|
||||||
|
pedited->wavelet.level3noise = level3noise->getEditedState ();
|
||||||
pedited->wavelet.opacityCurveRG = !opacityShapeRG->isUnChanged ();
|
pedited->wavelet.opacityCurveRG = !opacityShapeRG->isUnChanged ();
|
||||||
pedited->wavelet.opacityCurveBY = !opacityShapeBY->isUnChanged ();
|
pedited->wavelet.opacityCurveBY = !opacityShapeBY->isUnChanged ();
|
||||||
pedited->wavelet.opacityCurveW = !opacityShape->isUnChanged ();
|
pedited->wavelet.opacityCurveW = !opacityShape->isUnChanged ();
|
||||||
@ -1517,6 +1587,13 @@ void Wavelet::write (ProcParams* pp, ParamsEdited* pedited) {
|
|||||||
else if (EDmethod->get_active_row_number()==1)
|
else if (EDmethod->get_active_row_number()==1)
|
||||||
pp->wavelet.EDmethod = "CU";
|
pp->wavelet.EDmethod = "CU";
|
||||||
|
|
||||||
|
if (NPmethod->get_active_row_number()==0)
|
||||||
|
pp->wavelet.NPmethod = "none";
|
||||||
|
else if (NPmethod->get_active_row_number()==1)
|
||||||
|
pp->wavelet.NPmethod = "low";
|
||||||
|
else if (NPmethod->get_active_row_number()==2)
|
||||||
|
pp->wavelet.NPmethod = "high";
|
||||||
|
|
||||||
if (BAmethod->get_active_row_number()==0)
|
if (BAmethod->get_active_row_number()==0)
|
||||||
pp->wavelet.BAmethod = "none";
|
pp->wavelet.BAmethod = "none";
|
||||||
else if (BAmethod->get_active_row_number()==1)
|
else if (BAmethod->get_active_row_number()==1)
|
||||||
@ -1630,6 +1707,8 @@ void Wavelet::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi
|
|||||||
edgedetect->setDefault (defParams->wavelet.edgedetect);
|
edgedetect->setDefault (defParams->wavelet.edgedetect);
|
||||||
edgedetectthr->setDefault (defParams->wavelet.edgedetectthr);
|
edgedetectthr->setDefault (defParams->wavelet.edgedetectthr);
|
||||||
edgedetectthr2->setDefault (defParams->wavelet.edgedetectthr2);
|
edgedetectthr2->setDefault (defParams->wavelet.edgedetectthr2);
|
||||||
|
edgesensi->setDefault (defParams->wavelet.edgesensi);
|
||||||
|
edgeampli->setDefault (defParams->wavelet.edgeampli);
|
||||||
chroma->setDefault (defParams->wavelet.chroma);
|
chroma->setDefault (defParams->wavelet.chroma);
|
||||||
chro->setDefault (defParams->wavelet.chro);
|
chro->setDefault (defParams->wavelet.chro);
|
||||||
contrast->setDefault (defParams->wavelet.contrast);
|
contrast->setDefault (defParams->wavelet.contrast);
|
||||||
@ -1648,6 +1727,7 @@ void Wavelet::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi
|
|||||||
level0noise->setDefault<double> (defParams->wavelet.level0noise);
|
level0noise->setDefault<double> (defParams->wavelet.level0noise);
|
||||||
level1noise->setDefault<double> (defParams->wavelet.level1noise);
|
level1noise->setDefault<double> (defParams->wavelet.level1noise);
|
||||||
level2noise->setDefault<double> (defParams->wavelet.level2noise);
|
level2noise->setDefault<double> (defParams->wavelet.level2noise);
|
||||||
|
level3noise->setDefault<double> (defParams->wavelet.level3noise);
|
||||||
|
|
||||||
greenlow->setDefault (defParams->wavelet.greenlow);
|
greenlow->setDefault (defParams->wavelet.greenlow);
|
||||||
bluelow->setDefault (defParams->wavelet.bluelow);
|
bluelow->setDefault (defParams->wavelet.bluelow);
|
||||||
@ -1677,6 +1757,8 @@ void Wavelet::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi
|
|||||||
edgedetect->setDefaultEditedState(pedited->wavelet.edgedetect ? Edited : UnEdited);
|
edgedetect->setDefaultEditedState(pedited->wavelet.edgedetect ? Edited : UnEdited);
|
||||||
edgedetectthr->setDefaultEditedState(pedited->wavelet.edgedetectthr ? Edited : UnEdited);
|
edgedetectthr->setDefaultEditedState(pedited->wavelet.edgedetectthr ? Edited : UnEdited);
|
||||||
edgedetectthr2->setDefaultEditedState(pedited->wavelet.edgedetectthr2 ? Edited : UnEdited);
|
edgedetectthr2->setDefaultEditedState(pedited->wavelet.edgedetectthr2 ? Edited : UnEdited);
|
||||||
|
edgesensi->setDefaultEditedState(pedited->wavelet.edgesensi ? Edited : UnEdited);
|
||||||
|
edgeampli->setDefaultEditedState(pedited->wavelet.edgeampli ? Edited : UnEdited);
|
||||||
chroma->setDefaultEditedState(pedited->wavelet.chroma ? Edited : UnEdited);
|
chroma->setDefaultEditedState(pedited->wavelet.chroma ? Edited : UnEdited);
|
||||||
chro->setDefaultEditedState(pedited->wavelet.chro ? Edited : UnEdited);
|
chro->setDefaultEditedState(pedited->wavelet.chro ? Edited : UnEdited);
|
||||||
contrast->setDefaultEditedState(pedited->wavelet.contrast ? Edited : UnEdited);
|
contrast->setDefaultEditedState(pedited->wavelet.contrast ? Edited : UnEdited);
|
||||||
@ -1699,6 +1781,7 @@ void Wavelet::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi
|
|||||||
level0noise->setDefaultEditedState(pedited->wavelet.level0noise ? Edited : UnEdited);
|
level0noise->setDefaultEditedState(pedited->wavelet.level0noise ? Edited : UnEdited);
|
||||||
level1noise->setDefaultEditedState(pedited->wavelet.level1noise ? Edited : UnEdited);
|
level1noise->setDefaultEditedState(pedited->wavelet.level1noise ? Edited : UnEdited);
|
||||||
level2noise->setDefaultEditedState(pedited->wavelet.level2noise ? Edited : UnEdited);
|
level2noise->setDefaultEditedState(pedited->wavelet.level2noise ? Edited : UnEdited);
|
||||||
|
level3noise->setDefaultEditedState(pedited->wavelet.level3noise ? Edited : UnEdited);
|
||||||
|
|
||||||
for (int i = 0; i < 9; i++) {
|
for (int i = 0; i < 9; i++) {
|
||||||
correction[i]->setDefaultEditedState(pedited->wavelet.c[i] ? Edited : UnEdited);
|
correction[i]->setDefaultEditedState(pedited->wavelet.c[i] ? Edited : UnEdited);
|
||||||
@ -1721,6 +1804,8 @@ void Wavelet::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi
|
|||||||
edgedetect->setDefaultEditedState(Irrelevant);
|
edgedetect->setDefaultEditedState(Irrelevant);
|
||||||
edgedetectthr->setDefaultEditedState(Irrelevant);
|
edgedetectthr->setDefaultEditedState(Irrelevant);
|
||||||
edgedetectthr2->setDefaultEditedState(Irrelevant);
|
edgedetectthr2->setDefaultEditedState(Irrelevant);
|
||||||
|
edgesensi->setDefaultEditedState(Irrelevant);
|
||||||
|
edgeampli->setDefaultEditedState(Irrelevant);
|
||||||
chroma->setDefaultEditedState(Irrelevant);
|
chroma->setDefaultEditedState(Irrelevant);
|
||||||
chro->setDefaultEditedState(Irrelevant);
|
chro->setDefaultEditedState(Irrelevant);
|
||||||
contrast->setDefaultEditedState(Irrelevant);
|
contrast->setDefaultEditedState(Irrelevant);
|
||||||
@ -1738,6 +1823,7 @@ void Wavelet::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi
|
|||||||
level0noise->setDefaultEditedState (Irrelevant);
|
level0noise->setDefaultEditedState (Irrelevant);
|
||||||
level1noise->setDefaultEditedState (Irrelevant);
|
level1noise->setDefaultEditedState (Irrelevant);
|
||||||
level2noise->setDefaultEditedState (Irrelevant);
|
level2noise->setDefaultEditedState (Irrelevant);
|
||||||
|
level3noise->setDefaultEditedState (Irrelevant);
|
||||||
pastlev->setDefaultEditedState (Irrelevant);
|
pastlev->setDefaultEditedState (Irrelevant);
|
||||||
satlev->setDefaultEditedState (Irrelevant);
|
satlev->setDefaultEditedState (Irrelevant);
|
||||||
strength->setDefaultEditedState (Irrelevant);
|
strength->setDefaultEditedState (Irrelevant);
|
||||||
@ -1764,6 +1850,10 @@ void Wavelet::adjusterChanged (ThresholdAdjuster* a, double newBottom, double ne
|
|||||||
listener->panelChanged (EvWavlev2nois,
|
listener->panelChanged (EvWavlev2nois,
|
||||||
Glib::ustring::compose(Glib::ustring(M("TP_WAVELET_NOIS")+": %1"+"\n"+M("TP_WAVELET_STREN")+": %2"), int(newTop), int(newBottom)));
|
Glib::ustring::compose(Glib::ustring(M("TP_WAVELET_NOIS")+": %1"+"\n"+M("TP_WAVELET_STREN")+": %2"), int(newTop), int(newBottom)));
|
||||||
}
|
}
|
||||||
|
else if(a==level3noise) {
|
||||||
|
listener->panelChanged (EvWavlev3nois,
|
||||||
|
Glib::ustring::compose(Glib::ustring(M("TP_WAVELET_NOIS")+": %1"+"\n"+M("TP_WAVELET_STREN")+": %2"), int(newTop), int(newBottom)));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1913,6 +2003,20 @@ void Wavelet::EDmethodChanged() {
|
|||||||
listener->panelChanged (EvWavEDmet, EDmethod->get_active_text ());
|
listener->panelChanged (EvWavEDmet, EDmethod->get_active_text ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Wavelet::NPmethodUpdateUI() {
|
||||||
|
if (!batchMode) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void Wavelet::NPmethodChanged() {
|
||||||
|
NPmethodUpdateUI();
|
||||||
|
if (listener && (multiImage||getEnabled()) ) {
|
||||||
|
listener->panelChanged (EvWavNPmet, NPmethod->get_active_text ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Wavelet::BAmethodUpdateUI() {
|
void Wavelet::BAmethodUpdateUI() {
|
||||||
if (!batchMode) {
|
if (!batchMode) {
|
||||||
if(BAmethod->get_active_row_number()==0 ) {//none
|
if(BAmethod->get_active_row_number()==0 ) {//none
|
||||||
@ -2082,6 +2186,7 @@ void Wavelet::setBatchMode (bool batchMode) {
|
|||||||
Medgreinf->append_text (M("GENERAL_UNCHANGED"));
|
Medgreinf->append_text (M("GENERAL_UNCHANGED"));
|
||||||
CHSLmethod->append_text (M("GENERAL_UNCHANGED"));
|
CHSLmethod->append_text (M("GENERAL_UNCHANGED"));
|
||||||
EDmethod->append_text (M("GENERAL_UNCHANGED"));
|
EDmethod->append_text (M("GENERAL_UNCHANGED"));
|
||||||
|
NPmethod->append_text (M("GENERAL_UNCHANGED"));
|
||||||
BAmethod->append_text (M("GENERAL_UNCHANGED"));
|
BAmethod->append_text (M("GENERAL_UNCHANGED"));
|
||||||
TMmethod->append_text (M("GENERAL_UNCHANGED"));
|
TMmethod->append_text (M("GENERAL_UNCHANGED"));
|
||||||
HSmethod->append_text (M("GENERAL_UNCHANGED"));
|
HSmethod->append_text (M("GENERAL_UNCHANGED"));
|
||||||
@ -2106,6 +2211,8 @@ void Wavelet::setBatchMode (bool batchMode) {
|
|||||||
edgedetect->showEditedCB ();
|
edgedetect->showEditedCB ();
|
||||||
edgedetectthr->showEditedCB ();
|
edgedetectthr->showEditedCB ();
|
||||||
edgedetectthr2->showEditedCB ();
|
edgedetectthr2->showEditedCB ();
|
||||||
|
edgesensi->showEditedCB ();
|
||||||
|
edgeampli->showEditedCB ();
|
||||||
chroma->showEditedCB ();
|
chroma->showEditedCB ();
|
||||||
chro->showEditedCB ();
|
chro->showEditedCB ();
|
||||||
contrast->showEditedCB ();
|
contrast->showEditedCB ();
|
||||||
@ -2128,6 +2235,7 @@ void Wavelet::setBatchMode (bool batchMode) {
|
|||||||
level0noise->showEditedCB ();
|
level0noise->showEditedCB ();
|
||||||
level1noise->showEditedCB ();
|
level1noise->showEditedCB ();
|
||||||
level2noise->showEditedCB ();
|
level2noise->showEditedCB ();
|
||||||
|
level3noise->showEditedCB ();
|
||||||
|
|
||||||
ToolPanel::setBatchMode (batchMode);
|
ToolPanel::setBatchMode (batchMode);
|
||||||
|
|
||||||
@ -2201,6 +2309,10 @@ void Wavelet::adjusterChanged (Adjuster* a, double newval) {
|
|||||||
listener->panelChanged (EvWavedgedetectthr, edgedetectthr->getTextValue());
|
listener->panelChanged (EvWavedgedetectthr, edgedetectthr->getTextValue());
|
||||||
else if (a == edgedetectthr2 )
|
else if (a == edgedetectthr2 )
|
||||||
listener->panelChanged (EvWavedgedetectthr2, edgedetectthr2->getTextValue());
|
listener->panelChanged (EvWavedgedetectthr2, edgedetectthr2->getTextValue());
|
||||||
|
else if (a == edgesensi )
|
||||||
|
listener->panelChanged (EvWavedgesensi, edgesensi->getTextValue());
|
||||||
|
else if (a == edgeampli )
|
||||||
|
listener->panelChanged (EvWavedgeampli, edgeampli->getTextValue());
|
||||||
else if (a == edgrad )
|
else if (a == edgrad )
|
||||||
listener->panelChanged (EvWavedgrad, edgrad->getTextValue());
|
listener->panelChanged (EvWavedgrad, edgrad->getTextValue());
|
||||||
else if (a == edgval )
|
else if (a == edgval )
|
||||||
@ -2321,17 +2433,30 @@ void Wavelet::medianlevUpdateUI () {
|
|||||||
if (!batchMode) {
|
if (!batchMode) {
|
||||||
if (medianlev->get_active ()){
|
if (medianlev->get_active ()){
|
||||||
edgedetect->show();
|
edgedetect->show();
|
||||||
//lipst->show();
|
lipst->show();
|
||||||
|
separatoredge->show();
|
||||||
|
|
||||||
edgedetectthr->show();
|
edgedetectthr->show();
|
||||||
edgedetectthr2->show();
|
edgedetectthr2->show();
|
||||||
//if (lipst->get_active ()) edgedetectthr2->show();
|
// edgesensi->show();
|
||||||
//else edgedetectthr2->hide();
|
// edgeampli->show();
|
||||||
|
// NPmethod->show();
|
||||||
|
// labmNP->show();
|
||||||
|
if (lipst->get_active ()) {edgesensi->show();edgeampli->show();NPmethod->show(); labmNP->show();}
|
||||||
|
|
||||||
|
else {edgesensi->hide();edgeampli->hide();NPmethod->hide(); labmNP->hide();}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
edgedetect->hide();
|
edgedetect->hide();
|
||||||
//lipst->hide();
|
lipst->hide();
|
||||||
edgedetectthr->hide();
|
edgedetectthr->hide();
|
||||||
edgedetectthr2->hide();
|
edgedetectthr2->hide();
|
||||||
|
edgesensi->hide();
|
||||||
|
edgeampli->hide();
|
||||||
|
separatoredge->hide();
|
||||||
|
NPmethod->hide();
|
||||||
|
labmNP->hide();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2430,16 +2555,25 @@ void Wavelet::cbenabToggled () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
void Wavelet::lipstUpdateUI () {
|
void Wavelet::lipstUpdateUI () {
|
||||||
if (!batchMode) {
|
if (!batchMode) {
|
||||||
if (lipst->get_active ())
|
if (lipst->get_active ()) {
|
||||||
edgedetectthr2->show();
|
NPmethod->show();
|
||||||
else
|
edgesensi->show();
|
||||||
edgedetectthr2->hide();
|
edgeampli->show();
|
||||||
|
labmNP->show();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NPmethod->hide();
|
||||||
|
edgesensi->hide();
|
||||||
|
edgeampli->hide();
|
||||||
|
labmNP->hide();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
void Wavelet::lipstToggled () {
|
void Wavelet::lipstToggled () {
|
||||||
|
|
||||||
@ -2455,7 +2589,7 @@ void Wavelet::lipstToggled () {
|
|||||||
|
|
||||||
lastlipst = lipst->get_active ();
|
lastlipst = lipst->get_active ();
|
||||||
}
|
}
|
||||||
//lipstUpdateUI();
|
lipstUpdateUI();
|
||||||
|
|
||||||
if (listener && (multiImage || getEnabled ())) {
|
if (listener && (multiImage || getEnabled ())) {
|
||||||
if (lipst->get_inconsistent())
|
if (lipst->get_inconsistent())
|
||||||
@ -2607,7 +2741,6 @@ void Wavelet::setAdjusterBehavior (bool multiplieradd, bool thresholdadd, bool t
|
|||||||
|
|
||||||
|
|
||||||
void Wavelet::neutralPressed () {
|
void Wavelet::neutralPressed () {
|
||||||
|
|
||||||
for (int i = 0; i < 9; i++) {
|
for (int i = 0; i < 9; i++) {
|
||||||
correction[i]->setValue(0);
|
correction[i]->setValue(0);
|
||||||
adjusterChanged(correction[i], 0);
|
adjusterChanged(correction[i], 0);
|
||||||
|
@ -46,6 +46,7 @@ protected:
|
|||||||
Gtk::HSeparator* separator3;
|
Gtk::HSeparator* separator3;
|
||||||
Gtk::HSeparator* separatorCB;
|
Gtk::HSeparator* separatorCB;
|
||||||
Gtk::HSeparator* separatorNeutral;
|
Gtk::HSeparator* separatorNeutral;
|
||||||
|
Gtk::HSeparator* separatoredge;
|
||||||
|
|
||||||
CurveEditorGroup* opaCurveEditorG;
|
CurveEditorGroup* opaCurveEditorG;
|
||||||
FlatCurveEditor* opacityShapeRG;
|
FlatCurveEditor* opacityShapeRG;
|
||||||
@ -114,12 +115,15 @@ protected:
|
|||||||
ThresholdAdjuster* level0noise;
|
ThresholdAdjuster* level0noise;
|
||||||
ThresholdAdjuster* level1noise;
|
ThresholdAdjuster* level1noise;
|
||||||
ThresholdAdjuster* level2noise;
|
ThresholdAdjuster* level2noise;
|
||||||
|
ThresholdAdjuster* level3noise;
|
||||||
|
|
||||||
Adjuster* threshold;
|
Adjuster* threshold;
|
||||||
Adjuster* threshold2;
|
Adjuster* threshold2;
|
||||||
Adjuster* edgedetect;
|
Adjuster* edgedetect;
|
||||||
Adjuster* edgedetectthr;
|
Adjuster* edgedetectthr;
|
||||||
Adjuster* edgedetectthr2;
|
Adjuster* edgedetectthr2;
|
||||||
|
Adjuster* edgesensi;
|
||||||
|
Adjuster* edgeampli;
|
||||||
MyComboBoxText* Lmethod;
|
MyComboBoxText* Lmethod;
|
||||||
sigc::connection Lmethodconn;
|
sigc::connection Lmethodconn;
|
||||||
MyComboBoxText* CHmethod;
|
MyComboBoxText* CHmethod;
|
||||||
@ -130,6 +134,8 @@ protected:
|
|||||||
sigc::connection EDmethodconn;
|
sigc::connection EDmethodconn;
|
||||||
MyComboBoxText* BAmethod;
|
MyComboBoxText* BAmethod;
|
||||||
sigc::connection BAmethodconn;
|
sigc::connection BAmethodconn;
|
||||||
|
MyComboBoxText* NPmethod;
|
||||||
|
sigc::connection NPmethodconn;
|
||||||
MyComboBoxText* TMmethod;
|
MyComboBoxText* TMmethod;
|
||||||
sigc::connection TMmethodconn;
|
sigc::connection TMmethodconn;
|
||||||
MyComboBoxText* HSmethod;
|
MyComboBoxText* HSmethod;
|
||||||
@ -173,6 +179,7 @@ protected:
|
|||||||
Gtk::Label* labmED;
|
Gtk::Label* labmED;
|
||||||
Gtk::Label* labmTM;
|
Gtk::Label* labmTM;
|
||||||
Gtk::Label* labmBA;
|
Gtk::Label* labmBA;
|
||||||
|
Gtk::Label* labmNP;
|
||||||
Gtk::Label* labmedgr;
|
Gtk::Label* labmedgr;
|
||||||
Gtk::Label* labmednois;
|
Gtk::Label* labmednois;
|
||||||
MyExpander* expchroma;
|
MyExpander* expchroma;
|
||||||
@ -197,6 +204,7 @@ protected:
|
|||||||
Gtk::HBox* tilesizeHBox;
|
Gtk::HBox* tilesizeHBox;
|
||||||
|
|
||||||
Gtk::HBox* ctboxFI;
|
Gtk::HBox* ctboxFI;
|
||||||
|
Gtk::HBox* ctboxNP;
|
||||||
Gtk::HBox* ctboxch;
|
Gtk::HBox* ctboxch;
|
||||||
Gtk::HBox* edbox;
|
Gtk::HBox* edbox;
|
||||||
Gtk::HBox* ednoisbox;
|
Gtk::HBox* ednoisbox;
|
||||||
@ -249,6 +257,7 @@ private:
|
|||||||
|
|
||||||
virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller);
|
virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller);
|
||||||
void BAmethodChanged ();
|
void BAmethodChanged ();
|
||||||
|
void NPmethodChanged ();
|
||||||
void BackmethodChanged ();
|
void BackmethodChanged ();
|
||||||
void CHSLmethodChanged ();
|
void CHSLmethodChanged ();
|
||||||
void CHmethodChanged ();
|
void CHmethodChanged ();
|
||||||
@ -281,6 +290,7 @@ private:
|
|||||||
void CHmethodUpdateUI();
|
void CHmethodUpdateUI();
|
||||||
// void CHSLmethodChangedUI();
|
// void CHSLmethodChangedUI();
|
||||||
void EDmethodUpdateUI();
|
void EDmethodUpdateUI();
|
||||||
|
void NPmethodUpdateUI();
|
||||||
void BAmethodUpdateUI();
|
void BAmethodUpdateUI();
|
||||||
void TMmethodUpdateUI();
|
void TMmethodUpdateUI();
|
||||||
// void BackmethodUpdateUI();
|
// void BackmethodUpdateUI();
|
||||||
@ -294,7 +304,7 @@ private:
|
|||||||
void enabledUpdateUI ();
|
void enabledUpdateUI ();
|
||||||
void medianlevUpdateUI ();
|
void medianlevUpdateUI ();
|
||||||
void cbenabUpdateUI ();
|
void cbenabUpdateUI ();
|
||||||
// void lipstUpdateUI ();
|
void lipstUpdateUI ();
|
||||||
|
|
||||||
|
|
||||||
void enableToggled(MyExpander *expander);
|
void enableToggled(MyExpander *expander);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user