Local adjustments - denoise improvments (#6705)
* Init improvment LA denoise * First display luma chroma residual noise * Clean code denoise iplocallab.cc * Change windows.yml with old version january 2023 * Clean code - change calculation denoise - GUI * Improve labels tooltip denoise * Clean code * Change tooltip * Set auto denoise - main - chroma auto to 50% when LA denoise is used * Change GUI denoise with expanders * Change labels * Change reference remianing noise in percentage * Change tooltip and labels * Change values in preview remaining noise * Clean comment code - chnage tooltips * Change windows.yml and appimage.yml publish_pre_dev labels * Update windows.yml * Restore windows.yml * Restore windows.yml and clean code * Revert change Noise Reduction link with Local denoise * Revert all changes on Noise-reduction linked with Local adjustments
This commit is contained in:
parent
6a11c59b79
commit
be2d5ce11f
2
.github/workflows/appimage.yml
vendored
2
.github/workflows/appimage.yml
vendored
@ -11,7 +11,7 @@ on:
|
|||||||
- dev
|
- dev
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
env:
|
env:
|
||||||
publish_pre_dev_labels: '[]'
|
publish_pre_dev_labels: '["Beep6581:ladenoise_improv"]'
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
|
2
.github/workflows/windows.yml
vendored
2
.github/workflows/windows.yml
vendored
@ -11,7 +11,7 @@ on:
|
|||||||
- dev
|
- dev
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
env:
|
env:
|
||||||
publish_pre_dev_labels: '[]'
|
publish_pre_dev_labels: '["Beep6581:ladenoise_improv"]'
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: windows-2022
|
runs-on: windows-2022
|
||||||
|
@ -2839,13 +2839,15 @@ TP_LOCALLAB_DENOIMASK;Denoise chroma mask
|
|||||||
TP_LOCALLAB_DENOIMASK_TOOLTIP;For all tools, allows you to control the chromatic noise level of the mask.\nUseful for better control of chrominance and to avoid artifacts when using the LC(h) curve.
|
TP_LOCALLAB_DENOIMASK_TOOLTIP;For all tools, allows you to control the chromatic noise level of the mask.\nUseful for better control of chrominance and to avoid artifacts when using the LC(h) curve.
|
||||||
TP_LOCALLAB_DENOIQUA_TOOLTIP;Conservative mode preserves low frequency detail. Aggressive mode removes low frequency detail.\nConservative and Aggressive modes use wavelets and DCT and can be used in conjunction with 'Non-local Means – Luminance'.
|
TP_LOCALLAB_DENOIQUA_TOOLTIP;Conservative mode preserves low frequency detail. Aggressive mode removes low frequency detail.\nConservative and Aggressive modes use wavelets and DCT and can be used in conjunction with 'Non-local Means – Luminance'.
|
||||||
TP_LOCALLAB_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas.
|
TP_LOCALLAB_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas.
|
||||||
|
TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance
|
||||||
|
TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance
|
||||||
TP_LOCALLAB_DENOI_EXP;Denoise
|
TP_LOCALLAB_DENOI_EXP;Denoise
|
||||||
TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum RT-spot size: 128x128.
|
TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum RT-spot size: 128x128.
|
||||||
TP_LOCALLAB_DEPTH;Depth
|
TP_LOCALLAB_DEPTH;Depth
|
||||||
TP_LOCALLAB_DETAIL;Local contrast
|
TP_LOCALLAB_DETAIL;Local contrast
|
||||||
TP_LOCALLAB_DETAILFRA;Edge detection - DCT
|
TP_LOCALLAB_DETAILFRA;Edge detection - DCT
|
||||||
TP_LOCALLAB_DETAILSH;Details
|
TP_LOCALLAB_DETAILSH;Details
|
||||||
TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold
|
TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold
|
||||||
TP_LOCALLAB_DIVGR;Gamma
|
TP_LOCALLAB_DIVGR;Gamma
|
||||||
TP_LOCALLAB_DUPLSPOTNAME;Copy
|
TP_LOCALLAB_DUPLSPOTNAME;Copy
|
||||||
TP_LOCALLAB_EDGFRA;Edge sharpness
|
TP_LOCALLAB_EDGFRA;Edge sharpness
|
||||||
@ -3110,7 +3112,7 @@ TP_LOCALLAB_MASKLCTHRLOW;Dark area luminance threshold
|
|||||||
TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold
|
TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold
|
||||||
TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise
|
TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise
|
||||||
TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise
|
TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise
|
||||||
TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask.
|
TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask.
|
||||||
TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas
|
TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas
|
||||||
TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
|
TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
|
||||||
TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
|
TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings.
|
||||||
@ -3169,6 +3171,12 @@ TP_LOCALLAB_MERTHR;Difference
|
|||||||
TP_LOCALLAB_MERTWE;Exclusion
|
TP_LOCALLAB_MERTWE;Exclusion
|
||||||
TP_LOCALLAB_MERTWO;Subtract
|
TP_LOCALLAB_MERTWO;Subtract
|
||||||
TP_LOCALLAB_METHOD_TOOLTIP;'Enhanced + chroma denoise' significantly increases processing times.\nBut reduce artifacts.
|
TP_LOCALLAB_METHOD_TOOLTIP;'Enhanced + chroma denoise' significantly increases processing times.\nBut reduce artifacts.
|
||||||
|
TP_LOCALLAB_LCLABELS;Residual noise levels
|
||||||
|
TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing.
|
||||||
|
TP_LOCALLAB_LUMLABEL;Luma levels 0123: Mean=%1 High=%2
|
||||||
|
TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2
|
||||||
|
TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2
|
||||||
|
TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2
|
||||||
TP_LOCALLAB_MLABEL;Restored data Min=%1 Max=%2
|
TP_LOCALLAB_MLABEL;Restored data Min=%1 Max=%2
|
||||||
TP_LOCALLAB_MLABEL_TOOLTIP;The values should be close to Min=0 Max=32768 (log mode) but other values are possible.You can adjust 'Clip restored data (gain)' and 'Offset' to normalize.\nRecovers image data without blending.
|
TP_LOCALLAB_MLABEL_TOOLTIP;The values should be close to Min=0 Max=32768 (log mode) but other values are possible.You can adjust 'Clip restored data (gain)' and 'Offset' to normalize.\nRecovers image data without blending.
|
||||||
TP_LOCALLAB_MODE_EXPERT;Advanced
|
TP_LOCALLAB_MODE_EXPERT;Advanced
|
||||||
@ -3185,7 +3193,7 @@ TP_LOCALLAB_NLDENOISENLPAT_TOOLTIP;Use this slider to adapt the amount of denois
|
|||||||
TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time.
|
TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time.
|
||||||
TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail.
|
TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail.
|
||||||
TP_LOCALLAB_NLDET;Detail recovery
|
TP_LOCALLAB_NLDET;Detail recovery
|
||||||
TP_LOCALLAB_NLFRA;Non-local Means - Luminance
|
TP_LOCALLAB_NLFRA;Non-local Means: Luminance
|
||||||
TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own.
|
TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own.
|
||||||
TP_LOCALLAB_NLGAM;Gamma
|
TP_LOCALLAB_NLGAM;Gamma
|
||||||
TP_LOCALLAB_NLLUM;Strength
|
TP_LOCALLAB_NLLUM;Strength
|
||||||
|
@ -1203,7 +1203,7 @@ BENCHFUN
|
|||||||
|
|
||||||
if (!memoryAllocationFailed) {
|
if (!memoryAllocationFailed) {
|
||||||
if (kall == 0) {
|
if (kall == 0) {
|
||||||
Noise_residualAB(*adecomp, chresid, chmaxresid, denoiseMethodRgb);
|
Noise_residualAB(*adecomp, chresid, chmaxresid, denoiseMethodRgb, 0, levwav);
|
||||||
chresidtemp = chresid;
|
chresidtemp = chresid;
|
||||||
chmaxresidtemp = chmaxresid;
|
chmaxresidtemp = chmaxresid;
|
||||||
}
|
}
|
||||||
@ -1240,12 +1240,13 @@ BENCHFUN
|
|||||||
|
|
||||||
if (!memoryAllocationFailed) {
|
if (!memoryAllocationFailed) {
|
||||||
if (kall == 0) {
|
if (kall == 0) {
|
||||||
Noise_residualAB(*bdecomp, chresid, chmaxresid, denoiseMethodRgb);
|
Noise_residualAB(*bdecomp, chresid, chmaxresid, denoiseMethodRgb, 0, levwav);
|
||||||
chresid += chresidtemp;
|
chresid += chresidtemp;
|
||||||
chmaxresid += chmaxresidtemp;
|
chmaxresid += chmaxresidtemp;
|
||||||
chresid = sqrt(chresid / (6 * (levwav)));
|
chresid = sqrt(chresid / (6 * (levwav)));
|
||||||
highresi = chresid + 0.66f * (sqrt(chmaxresid) - chresid); //evaluate sigma
|
highresi = chresid + 0.66f * (sqrt(chmaxresid) - chresid); //evaluate sigma
|
||||||
nresi = chresid;
|
nresi = chresid;
|
||||||
|
printf("Nresi=%f Highresi=%f lev=%i\n", (double) nresi, (double) highresi, levwav);
|
||||||
}
|
}
|
||||||
|
|
||||||
bdecomp->reconstruct(labdn->b[0]);
|
bdecomp->reconstruct(labdn->b[0]);
|
||||||
@ -2158,16 +2159,18 @@ float ImProcFunctions::MadRgb(const float * DataList, const int datalen)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ImProcFunctions::Noise_residualAB(const wavelet_decomposition &WaveletCoeffs_ab, float &chresid, float &chmaxresid, bool denoiseMethodRgb)
|
void ImProcFunctions::Noise_residualAB(const wavelet_decomposition &WaveletCoeffs_ab, float &chresid, float &chmaxresid, bool denoiseMethodRgb, int beg, int end)
|
||||||
{
|
{
|
||||||
|
|
||||||
float resid = 0.f;
|
float resid = 0.f;
|
||||||
float maxresid = 0.f;
|
float maxresid = 0.f;
|
||||||
|
// int maxlev = WaveletCoeffs_ab.maxlevel();
|
||||||
|
// end = maxlev;
|
||||||
#ifdef _OPENMP
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for schedule(dynamic) collapse(2) reduction(+:resid) reduction(max:maxresid) num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
|
#pragma omp parallel for schedule(dynamic) collapse(2) reduction(+:resid) reduction(max:maxresid) num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
|
||||||
#endif
|
#endif
|
||||||
for (int lvl = 0; lvl < WaveletCoeffs_ab.maxlevel(); ++lvl) {
|
// for (int lvl = 0; lvl < WaveletCoeffs_ab.maxlevel(); ++lvl) {
|
||||||
|
for (int lvl = beg; lvl < end; ++lvl) {
|
||||||
// compute median absolute deviation (MAD) of detail coefficients as robust noise estimator
|
// compute median absolute deviation (MAD) of detail coefficients as robust noise estimator
|
||||||
for (int dir = 1; dir < 4; ++dir) {
|
for (int dir = 1; dir < 4; ++dir) {
|
||||||
const int Wlvl_ab = WaveletCoeffs_ab.level_W(lvl);
|
const int Wlvl_ab = WaveletCoeffs_ab.level_W(lvl);
|
||||||
|
@ -600,7 +600,6 @@ void Crop::update(int todo)
|
|||||||
params.dirpyrDenoise.redchro = maxr;
|
params.dirpyrDenoise.redchro = maxr;
|
||||||
params.dirpyrDenoise.bluechro = maxb;
|
params.dirpyrDenoise.bluechro = maxb;
|
||||||
parent->denoiseInfoStore.valid = true;
|
parent->denoiseInfoStore.valid = true;
|
||||||
|
|
||||||
if (parent->adnListener) {
|
if (parent->adnListener) {
|
||||||
parent->adnListener->chromaChanged(params.dirpyrDenoise.chroma, params.dirpyrDenoise.redchro, params.dirpyrDenoise.bluechro);
|
parent->adnListener->chromaChanged(params.dirpyrDenoise.chroma, params.dirpyrDenoise.redchro, params.dirpyrDenoise.bluechro);
|
||||||
}
|
}
|
||||||
@ -945,16 +944,7 @@ void Crop::update(int todo)
|
|||||||
auto& locwavCurveden = parent->locwavCurveden;
|
auto& locwavCurveden = parent->locwavCurveden;
|
||||||
auto& lmasklocal_curve2 = parent->lmasklocal_curve;
|
auto& lmasklocal_curve2 = parent->lmasklocal_curve;
|
||||||
auto& loclmasCurve_wav = parent->loclmasCurve_wav;
|
auto& loclmasCurve_wav = parent->loclmasCurve_wav;
|
||||||
// const int sizespot = (int)params.locallab.spots.size();
|
|
||||||
/* float *huerefp = nullptr;
|
|
||||||
huerefp = new float[sizespot];
|
|
||||||
float *chromarefp = nullptr;
|
|
||||||
chromarefp = new float[sizespot];
|
|
||||||
float *lumarefp = nullptr;
|
|
||||||
lumarefp = new float[sizespot];
|
|
||||||
float *fabrefp = nullptr;
|
|
||||||
fabrefp = new float[sizespot];
|
|
||||||
*/
|
|
||||||
for (int sp = 0; sp < (int)params.locallab.spots.size(); sp++) {
|
for (int sp = 0; sp < (int)params.locallab.spots.size(); sp++) {
|
||||||
locRETgainCurve.Set(params.locallab.spots.at(sp).localTgaincurve);
|
locRETgainCurve.Set(params.locallab.spots.at(sp).localTgaincurve);
|
||||||
locRETtransCurve.Set(params.locallab.spots.at(sp).localTtranscurve);
|
locRETtransCurve.Set(params.locallab.spots.at(sp).localTtranscurve);
|
||||||
@ -1048,6 +1038,7 @@ void Crop::update(int todo)
|
|||||||
if (black < 0. && params.locallab.spots.at(sp).expMethod == "pde" ) {
|
if (black < 0. && params.locallab.spots.at(sp).expMethod == "pde" ) {
|
||||||
black *= 1.5;
|
black *= 1.5;
|
||||||
}
|
}
|
||||||
|
std::vector<LocallabListener::locallabDenoiseLC> localldenoiselc;
|
||||||
|
|
||||||
double cont = params.locallab.spots.at(sp).contrast;
|
double cont = params.locallab.spots.at(sp).contrast;
|
||||||
double huere, chromare, lumare, huerefblu, chromarefblu, lumarefblu, sobelre;
|
double huere, chromare, lumare, huerefblu, chromarefblu, lumarefblu, sobelre;
|
||||||
@ -1063,6 +1054,7 @@ void Crop::update(int todo)
|
|||||||
float stdtme = parent->stdtms[sp];
|
float stdtme = parent->stdtms[sp];
|
||||||
float meanretie = parent->meanretis[sp];
|
float meanretie = parent->meanretis[sp];
|
||||||
float stdretie = parent->stdretis[sp];
|
float stdretie = parent->stdretis[sp];
|
||||||
|
|
||||||
float fab = 1.f;
|
float fab = 1.f;
|
||||||
float minCD;
|
float minCD;
|
||||||
float maxCD;
|
float maxCD;
|
||||||
@ -1073,7 +1065,14 @@ void Crop::update(int todo)
|
|||||||
float Tmin;
|
float Tmin;
|
||||||
float Tmax;
|
float Tmax;
|
||||||
int lastsav;
|
int lastsav;
|
||||||
|
float highresi = 0.f;
|
||||||
|
float nresi = 0.f;
|
||||||
|
float highresi46 =0.f;
|
||||||
|
float nresi46 = 0.f;
|
||||||
|
float Lhighresi = 0.f;
|
||||||
|
float Lnresi = 0.f;
|
||||||
|
float Lhighresi46 = 0.f;
|
||||||
|
float Lnresi46 = 0.f;
|
||||||
/* huerefp[sp] = huere;
|
/* huerefp[sp] = huere;
|
||||||
chromarefp[sp] = chromare;
|
chromarefp[sp] = chromare;
|
||||||
lumarefp[sp] = lumare;
|
lumarefp[sp] = lumare;
|
||||||
@ -1142,8 +1141,19 @@ void Crop::update(int todo)
|
|||||||
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav,
|
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav,
|
||||||
parent->previewDeltaE, parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallvibMask, parent->localllcMask, parent->locallsharMask, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask,
|
parent->previewDeltaE, parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallvibMask, parent->localllcMask, parent->locallsharMask, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask,
|
||||||
parent->localllogMask, parent->locall_Mask, parent->locallcieMask, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
parent->localllogMask, parent->locall_Mask, parent->locallcieMask, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
||||||
meantme, stdtme, meanretie, stdretie, fab);
|
meantme, stdtme, meanretie, stdretie, fab,
|
||||||
// fabrefp[sp] = fab;
|
highresi, nresi, highresi46, nresi46, Lhighresi, Lnresi, Lhighresi46, Lnresi46);
|
||||||
|
|
||||||
|
LocallabListener::locallabDenoiseLC denoiselc;
|
||||||
|
denoiselc.highres = highresi;
|
||||||
|
denoiselc.nres = nresi;
|
||||||
|
denoiselc.highres46 = highresi46;
|
||||||
|
denoiselc.nres46 = nresi46;
|
||||||
|
denoiselc.Lhighres = Lhighresi;
|
||||||
|
denoiselc.Lnres = Lnresi;
|
||||||
|
denoiselc.Lhighres46 = Lhighresi46;
|
||||||
|
denoiselc.Lnres46 = Lnresi46;
|
||||||
|
localldenoiselc.push_back(denoiselc);
|
||||||
|
|
||||||
if (parent->previewDeltaE || parent->locallColorMask == 5 || parent->locallvibMask == 4 || parent->locallExpMask == 5 || parent->locallSHMask == 4 || parent->localllcMask == 4 || parent->localltmMask == 4 || parent->localllogMask == 4 || parent->locallsoftMask == 6 || parent->localllcMask == 4 || parent->locallcieMask == 4) {
|
if (parent->previewDeltaE || parent->locallColorMask == 5 || parent->locallvibMask == 4 || parent->locallExpMask == 5 || parent->locallSHMask == 4 || parent->localllcMask == 4 || parent->localltmMask == 4 || parent->localllogMask == 4 || parent->locallsoftMask == 6 || parent->localllcMask == 4 || parent->locallcieMask == 4) {
|
||||||
params.blackwhite.enabled = false;
|
params.blackwhite.enabled = false;
|
||||||
@ -1174,6 +1184,20 @@ void Crop::update(int todo)
|
|||||||
|
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
denoiselc.highres = highresi;
|
||||||
|
denoiselc.nres = nresi;
|
||||||
|
denoiselc.highres46 = highresi46;
|
||||||
|
denoiselc.nres46 = nresi46;
|
||||||
|
denoiselc.Lhighres = Lhighresi;
|
||||||
|
denoiselc.Lnres = Lnresi;
|
||||||
|
denoiselc.Lhighres46 = Lhighresi46;
|
||||||
|
denoiselc.Lnres46 = Lnresi46;
|
||||||
|
localldenoiselc.push_back(denoiselc);
|
||||||
|
|
||||||
|
|
||||||
|
if (parent->locallListener) {
|
||||||
|
parent->locallListener->denChanged(localldenoiselc, params.locallab.selspot);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop.get(), savenormtmCrop.get(), savenormretiCrop.get(), lastorigCrop.get(), fw, fh, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve,
|
parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop.get(), savenormtmCrop.get(), savenormretiCrop.get(), lastorigCrop.get(), fw, fh, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, locRETtransCurve,
|
||||||
@ -1229,8 +1253,11 @@ void Crop::update(int todo)
|
|||||||
LHutili, HHutili, CHutili, HHutilijz, CHutilijz, LHutilijz, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
|
LHutili, HHutili, CHutili, HHutilijz, CHutilijz, LHutilijz, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
|
||||||
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
||||||
meantme, stdtme, meanretie, stdretie, fab);
|
meantme, stdtme, meanretie, stdretie, fab,
|
||||||
|
highresi, nresi, highresi46, nresi46, Lhighresi, Lnresi, Lhighresi46, Lnresi46);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (sp + 1u < params.locallab.spots.size()) {
|
if (sp + 1u < params.locallab.spots.size()) {
|
||||||
// do not copy for last spot as it is not needed anymore
|
// do not copy for last spot as it is not needed anymore
|
||||||
lastorigCrop->CopyFrom(labnCrop);
|
lastorigCrop->CopyFrom(labnCrop);
|
||||||
|
@ -1169,7 +1169,6 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
|
|||||||
float stdtm = stdtms[sp] = stdtme;
|
float stdtm = stdtms[sp] = stdtme;
|
||||||
float meanreti = meanretis[sp] = meanretie;
|
float meanreti = meanretis[sp] = meanretie;
|
||||||
float stdreti = stdretis[sp] = stdretie;
|
float stdreti = stdretis[sp] = stdretie;
|
||||||
|
|
||||||
huerefp[sp] = huer;
|
huerefp[sp] = huer;
|
||||||
chromarefp[sp] = chromar;
|
chromarefp[sp] = chromar;
|
||||||
lumarefp[sp] = lumar;
|
lumarefp[sp] = lumar;
|
||||||
@ -1203,6 +1202,15 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
|
|||||||
float Tmax;
|
float Tmax;
|
||||||
int lastsav;
|
int lastsav;
|
||||||
|
|
||||||
|
float highresi = 0.f;
|
||||||
|
float nresi = 0.f;
|
||||||
|
float highresi46 =0.f;
|
||||||
|
float nresi46 = 0.f;
|
||||||
|
float Lhighresi = 0.f;
|
||||||
|
float Lnresi = 0.f;
|
||||||
|
float Lhighresi46 = 0.f;
|
||||||
|
float Lnresi46 = 0.f;
|
||||||
|
|
||||||
ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv.get(), savenormtm.get(), savenormreti.get(), lastorigimp.get(), fw, fh, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve,
|
ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv.get(), savenormtm.get(), savenormreti.get(), lastorigimp.get(), fw, fh, 0, 0, pW, pH, scale, locRETgainCurve, locRETtransCurve,
|
||||||
lllocalcurve, locallutili,
|
lllocalcurve, locallutili,
|
||||||
cllocalcurve, localclutili,
|
cllocalcurve, localclutili,
|
||||||
@ -1256,7 +1264,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
|
|||||||
LHutili, HHutili, CHutili, HHutilijz, CHutilijz, LHutilijz, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
|
LHutili, HHutili, CHutili, HHutilijz, CHutilijz, LHutilijz, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
|
||||||
huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
||||||
meantm, stdtm, meanreti, stdreti, fab);
|
meantm, stdtm, meanreti, stdreti, fab,
|
||||||
|
highresi, nresi, highresi46, nresi46, Lhighresi, Lnresi, Lhighresi46, Lnresi46);
|
||||||
|
|
||||||
|
|
||||||
fabrefp[sp] = fab;
|
fabrefp[sp] = fab;
|
||||||
@ -1296,7 +1305,6 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
|
|||||||
retiMinMax.Tmin = Tmin;
|
retiMinMax.Tmin = Tmin;
|
||||||
retiMinMax.Tmax = Tmax;
|
retiMinMax.Tmax = Tmax;
|
||||||
locallretiminmax.push_back(retiMinMax);
|
locallretiminmax.push_back(retiMinMax);
|
||||||
|
|
||||||
// Recalculate references after
|
// Recalculate references after
|
||||||
if (params->locallab.spots.at(sp).spotMethod == "exc") {
|
if (params->locallab.spots.at(sp).spotMethod == "exc") {
|
||||||
ipf.calc_ref(sp, reserv.get(), reserv.get(), 0, 0, pW, pH, scale, huerefblu, chromarefblu, lumarefblu, huer, chromar, lumar, sobeler, avg, locwavCurveden, locwavdenutili);
|
ipf.calc_ref(sp, reserv.get(), reserv.get(), 0, 0, pW, pH, scale, huerefblu, chromarefblu, lumarefblu, huer, chromar, lumar, sobeler, avg, locwavCurveden, locwavdenutili);
|
||||||
|
@ -365,6 +365,7 @@ protected:
|
|||||||
std::vector<float> stdtms;
|
std::vector<float> stdtms;
|
||||||
std::vector<float> meanretis;
|
std::vector<float> meanretis;
|
||||||
std::vector<float> stdretis;
|
std::vector<float> stdretis;
|
||||||
|
|
||||||
bool lastspotdup;
|
bool lastspotdup;
|
||||||
bool previewDeltaE;
|
bool previewDeltaE;
|
||||||
int locallColorMask;
|
int locallColorMask;
|
||||||
|
@ -360,7 +360,8 @@ enum class BlurType {
|
|||||||
double& huerefblur, double &chromarefblur, double& lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref, int &lastsav,
|
double& huerefblur, double &chromarefblur, double& lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref, int &lastsav,
|
||||||
bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, int lllogMask, int ll_Mask, int llcieMask,
|
bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, int lllogMask, int ll_Mask, int llcieMask,
|
||||||
float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax,
|
float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax,
|
||||||
float& meantm, float& stdtm, float& meanreti, float& stdreti, float &fab);
|
float& meantm, float& stdtm, float& meanreti, float& stdreti, float &fab,
|
||||||
|
float &highresi, float &nresi, float &highresi46, float &nresi46, float &Lhighresi, float &Lnresi, float &Lhighresi46, float &Lnresi46);
|
||||||
|
|
||||||
void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk);
|
void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk);
|
||||||
void BlurNoise_Localold(int call, const struct local_params& lp, LabImage* original, LabImage* transformed, const LabImage* const tmp1, int cx, int cy);
|
void BlurNoise_Localold(int call, const struct local_params& lp, LabImage* original, LabImage* transformed, const LabImage* const tmp1, int cx, int cy);
|
||||||
@ -399,7 +400,8 @@ enum class BlurType {
|
|||||||
void DeNoise_Local(int call, const struct local_params& lp, LabImage* originalmask, int levred, float hueref, float lumaref, float chromaref, LabImage* original, LabImage* transformed, const LabImage &tmp1, int cx, int cy, int sk);
|
void DeNoise_Local(int call, const struct local_params& lp, LabImage* originalmask, int levred, float hueref, float lumaref, float chromaref, LabImage* original, LabImage* transformed, const LabImage &tmp1, int cx, int cy, int sk);
|
||||||
void DeNoise_Local2(const struct local_params& lp, LabImage* originalmask, int levred, float hueref, float lumaref, float chromaref, LabImage* original, LabImage* transformed, const LabImage &tmp1, int cx, int cy, int sk);
|
void DeNoise_Local2(const struct local_params& lp, LabImage* originalmask, int levred, float hueref, float lumaref, float chromaref, LabImage* original, LabImage* transformed, const LabImage &tmp1, int cx, int cy, int sk);
|
||||||
|
|
||||||
void DeNoise(int call, float * slidL, float * slida, float * slidb, int aut, bool noiscfactiv, const struct local_params& lp, LabImage* originalmaskbl, LabImage * bufmaskblurbl, int levred, float huerefblur, float lumarefblur, float chromarefblur, LabImage* original, LabImage* transformed, int cx, int cy, int sk, const LocwavCurve& locwavCurvehue, bool locwavhueutili);
|
void DeNoise(int call, int aut, bool noiscfactiv, const struct local_params& lp, LabImage* originalmaskbl, LabImage * bufmaskblurbl, int levred, float huerefblur, float lumarefblur, float chromarefblur, LabImage* original, LabImage* transformed,
|
||||||
|
int cx, int cy, int sk, const LocwavCurve& locwavCurvehue, bool locwavhueutili, float& highresi, float& nresi, float& highresi46, float& nresi46, float& Lhighresi, float& Lnresi, float& Lhighresi46, float& Lnresi46);
|
||||||
|
|
||||||
|
|
||||||
void fftw_denoise(int sk, int GW, int GH, int max_numblox_W, int min_numblox_W, float **tmp1, array2D<float> *Lin, int numThreads, const struct local_params & lp, int chrom);
|
void fftw_denoise(int sk, int GW, int GH, int max_numblox_W, int min_numblox_W, float **tmp1, array2D<float> *Lin, int numThreads, const struct local_params & lp, int chrom);
|
||||||
@ -462,7 +464,7 @@ enum class BlurType {
|
|||||||
void ShrinkAll_info(const float* const* WavCoeffs_a, const float* const* WavCoeffs_b,
|
void ShrinkAll_info(const float* const* WavCoeffs_a, const float* const* WavCoeffs_b,
|
||||||
int W_ab, int H_ab, float **noisevarlum, float **noisevarchrom, float **noisevarhue, float &chaut, int &Nb, float &redaut, float &blueaut, float &maxredaut, float &maxblueaut, float &minredaut, float &minblueaut, int schoice, int lvl, float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc,
|
int W_ab, int H_ab, float **noisevarlum, float **noisevarchrom, float **noisevarhue, float &chaut, int &Nb, float &redaut, float &blueaut, float &maxredaut, float &maxblueaut, float &minredaut, float &minblueaut, int schoice, int lvl, float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc,
|
||||||
float &maxchred, float &maxchblue, float &minchred, float &minchblue, int &nb, float &chau, float &chred, float &chblue, bool denoiseMethodRgb);
|
float &maxchred, float &maxchblue, float &minchred, float &minchblue, int &nb, float &chau, float &chred, float &chblue, bool denoiseMethodRgb);
|
||||||
void Noise_residualAB(const wavelet_decomposition &WaveletCoeffs_ab, float &chresid, float &chmaxresid, bool denoiseMethodRgb);
|
void Noise_residualAB(const wavelet_decomposition &WaveletCoeffs_ab, float &chresid, float &chmaxresid, bool denoiseMethodRgb, int beg, int end);
|
||||||
void calcautodn_info(float &chaut, float &delta, int Nb, int levaut, float maxmax, float lumema, float chromina, int mode, int lissage, float redyel, float skinc, float nsknc);
|
void calcautodn_info(float &chaut, float &delta, int Nb, int levaut, float maxmax, float lumema, float chromina, int mode, int lissage, float redyel, float skinc, float nsknc);
|
||||||
float Mad(const float * DataList, int datalen);
|
float Mad(const float * DataList, int datalen);
|
||||||
float MadRgb(const float * DataList, int datalen);
|
float MadRgb(const float * DataList, int datalen);
|
||||||
|
@ -10872,7 +10872,8 @@ void ImProcFunctions::fftw_denoise(int sk, int GW, int GH, int max_numblox_W, in
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * slidb, int aut, bool noiscfactiv, const struct local_params & lp, LabImage * originalmaskbl, LabImage * bufmaskblurbl, int levred, float huerefblur, float lumarefblur, float chromarefblur, LabImage * original, LabImage * transformed, int cx, int cy, int sk, const LocwavCurve& locwavCurvehue, bool locwavhueutili)
|
void ImProcFunctions::DeNoise(int call, int aut, bool noiscfactiv, const struct local_params & lp, LabImage * originalmaskbl, LabImage * bufmaskblurbl, int levred, float huerefblur, float lumarefblur, float chromarefblur, LabImage * original, LabImage * transformed,
|
||||||
|
int cx, int cy, int sk, const LocwavCurve& locwavCurvehue, bool locwavhueutili, float& highresi, float& nresi, float& highresi46, float& nresi46, float& Lhighresi, float& Lnresi, float& Lhighresi46, float& Lnresi46)
|
||||||
{
|
{
|
||||||
BENCHFUN
|
BENCHFUN
|
||||||
//local denoise
|
//local denoise
|
||||||
@ -10943,7 +10944,6 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (call == 1 && GW >= mDEN && GH >= mDEN) {
|
|
||||||
if (call == 1 && ((GW >= mDEN && GH >= mDEN && isnois) || lp.quamet == 2)) {
|
if (call == 1 && ((GW >= mDEN && GH >= mDEN && isnois) || lp.quamet == 2)) {
|
||||||
|
|
||||||
|
|
||||||
@ -10965,6 +10965,9 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
tmp1.a[ir][jr] = original->a[ir][jr];
|
tmp1.a[ir][jr] = original->a[ir][jr];
|
||||||
tmp1.b[ir][jr] = original->b[ir][jr];
|
tmp1.b[ir][jr] = original->b[ir][jr];
|
||||||
}
|
}
|
||||||
|
if(lp.nlstr > 0) {
|
||||||
|
NLMeans(tmp1.L, lp.nlstr, lp.nldet, lp.nlpat, lp.nlrad, lp.nlgam, GW, GH, float (sk), multiThread);
|
||||||
|
}
|
||||||
|
|
||||||
float gamma = lp.noisegam;
|
float gamma = lp.noisegam;
|
||||||
rtengine::GammaValues g_a; //gamma parameters
|
rtengine::GammaValues g_a; //gamma parameters
|
||||||
@ -11003,14 +11006,13 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
|
|
||||||
if (!Ldecomp.memory_allocation_failed()) {
|
if (!Ldecomp.memory_allocation_failed()) {
|
||||||
#ifdef _OPENMP
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for schedule(dynamic) collapse(2) if (multiThread)
|
// #pragma omp parallel for schedule(dynamic) collapse(2) if (multiThread)
|
||||||
#endif
|
#endif
|
||||||
for (int lvl = 0; lvl < levred; lvl++) {
|
for (int lvl = 0; lvl < levred; 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);
|
||||||
const float* const* WavCoeffs_L = Ldecomp.level_coeffs(lvl);
|
const float* const* WavCoeffs_L = Ldecomp.level_coeffs(lvl);
|
||||||
|
|
||||||
madL[lvl][dir - 1] = SQR(Mad(WavCoeffs_L[dir], Wlvl_L * Hlvl_L));
|
madL[lvl][dir - 1] = SQR(Mad(WavCoeffs_L[dir], Wlvl_L * Hlvl_L));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -11019,67 +11021,36 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
float mxsl = 0.f;
|
float mxsl = 0.f;
|
||||||
// float mxsfl = 0.f;
|
// float mxsfl = 0.f;
|
||||||
|
|
||||||
if (aut == 0) {
|
edge = 2;
|
||||||
if (levred == 7) {
|
vari[0] = 0.8f * SQR((lp.noiself0 / 125.f) * (1.f + lp.noiself0 / 25.f));
|
||||||
edge = 2;
|
vari[1] = 0.8f * SQR((lp.noiself / 125.f) * (1.f + lp.noiself / 25.f));
|
||||||
vari[0] = 0.8f * SQR((lp.noiself0 / 125.f) * (1.f + lp.noiself0 / 25.f));
|
vari[2] = 0.8f * SQR((lp.noiself2 / 125.f) * (1.f + lp.noiself2 / 25.f));
|
||||||
vari[1] = 0.8f * SQR((lp.noiself / 125.f) * (1.f + lp.noiself / 25.f));
|
|
||||||
vari[2] = 0.8f * SQR((lp.noiself2 / 125.f) * (1.f + lp.noiself2 / 25.f));
|
|
||||||
|
|
||||||
vari[3] = 0.8f * SQR((lp.noiselc / 125.f) * (1.f + lp.noiselc / 25.f));
|
vari[3] = 0.8f * SQR((lp.noiselc / 125.f) * (1.f + lp.noiselc / 25.f));
|
||||||
vari[4] = 0.8f * SQR((lp.noiselc4 / 125.f) * (1.f + lp.noiselc4 / 25.f));
|
vari[4] = 1.f * SQR((lp.noiselc4 / 125.f) * (1.f + lp.noiselc4 / 25.f));
|
||||||
vari[5] = 0.8f * SQR((lp.noiselc5 / 125.f) * (1.f + lp.noiselc5 / 25.f));
|
vari[5] = 1.5f * SQR((lp.noiselc5 / 125.f) * (1.f + lp.noiselc5 / 25.f));
|
||||||
vari[6] = 0.8f * SQR((lp.noiselc6 / 125.f) * (1.f + lp.noiselc6 / 25.f));
|
vari[6] = 2.5f * SQR((lp.noiselc6 / 125.f) * (1.f + lp.noiselc6 / 25.f));
|
||||||
} else if (levred == 4) {
|
|
||||||
edge = 3;
|
|
||||||
vari[0] = 0.8f * SQR((lp.noiself0 / 125.f) * (1.f + lp.noiself0 / 25.f));
|
|
||||||
vari[1] = 0.8f * SQR((lp.noiself / 125.f) * (1.f + lp.noiself / 25.f));
|
|
||||||
vari[2] = 0.8f * SQR((lp.noiselc / 125.f) * (1.f + lp.noiselc / 25.f));
|
|
||||||
vari[3] = 0.8f * SQR((lp.noiselc / 125.f) * (1.f + lp.noiselc / 25.f));
|
|
||||||
|
|
||||||
}
|
|
||||||
} else if (aut == 1 || aut == 2) {
|
|
||||||
edge = 2;
|
|
||||||
vari[0] = SQR(slidL[0]);
|
|
||||||
vari[1] = SQR(slidL[1]);
|
|
||||||
vari[2] = SQR(slidL[2]);
|
|
||||||
vari[3] = SQR(slidL[3]);
|
|
||||||
vari[4] = SQR(slidL[4]);
|
|
||||||
vari[5] = SQR(slidL[5]);
|
|
||||||
vari[6] = SQR(slidL[6]);
|
|
||||||
float mxslid34 = rtengine::max(slidL[3], slidL[4]);
|
|
||||||
float mxslid56 = rtengine::max(slidL[5], slidL[6]);
|
|
||||||
mxsl = rtengine::max(mxslid34, mxslid56);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
float kr3 = 0.f;
|
float kr3 = 0.f;
|
||||||
|
|
||||||
if (aut == 0 || aut == 1) {
|
if (lp.noiselc < 30.f) {
|
||||||
if ((lp.noiselc < 30.f && aut == 0) || (mxsl < 30.f && aut == 1)) {
|
|
||||||
kr3 = 0.f;
|
kr3 = 0.f;
|
||||||
} else if ((lp.noiselc < 50.f && aut == 0) || (mxsl < 50.f && aut == 1)) {
|
} else if (lp.noiselc < 50.f) {
|
||||||
kr3 = 0.5f;
|
kr3 = 0.5f;
|
||||||
} else if ((lp.noiselc < 70.f && aut == 0) || (mxsl < 70.f && aut == 1)) {
|
} else if (lp.noiselc < 70.f) {
|
||||||
kr3 = 0.7f;
|
kr3 = 0.7f;
|
||||||
} else {
|
} else {
|
||||||
kr3 = 1.f;
|
kr3 = 1.f;
|
||||||
}
|
}
|
||||||
} else if (aut == 2) {
|
|
||||||
kr3 = 1.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
vari[0] = rtengine::max(0.000001f, vari[0]);
|
vari[0] = rtengine::max(0.000001f, vari[0]);
|
||||||
vari[1] = rtengine::max(0.000001f, vari[1]);
|
vari[1] = rtengine::max(0.000001f, vari[1]);
|
||||||
vari[2] = rtengine::max(0.000001f, vari[2]);
|
vari[2] = rtengine::max(0.000001f, vari[2]);
|
||||||
vari[3] = rtengine::max(0.000001f, kr3 * vari[3]);
|
vari[3] = rtengine::max(0.000001f, kr3 * vari[3]);
|
||||||
|
vari[4] = rtengine::max(0.000001f, vari[4]);
|
||||||
if (levred == 7) {
|
vari[5] = rtengine::max(0.000001f, vari[5]);
|
||||||
vari[4] = rtengine::max(0.000001f, vari[4]);
|
vari[6] = rtengine::max(0.000001f, vari[6]);
|
||||||
vari[5] = rtengine::max(0.000001f, vari[5]);
|
|
||||||
vari[6] = rtengine::max(0.000001f, vari[6]);
|
|
||||||
}
|
|
||||||
|
|
||||||
float* noisevarlum = new float[GH * GW];
|
float* noisevarlum = new float[GH * GW];
|
||||||
float* noisevarhue = new float[GH * GW];
|
float* noisevarhue = new float[GH * GW];
|
||||||
@ -11218,75 +11189,25 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!adecomp.memory_allocation_failed() && !bdecomp.memory_allocation_failed()) {
|
if (!adecomp.memory_allocation_failed() && !bdecomp.memory_allocation_failed()) {
|
||||||
float maxcfine = 0.f;
|
|
||||||
float maxccoarse = 0.f;
|
float maxccoarse = 0.f;
|
||||||
|
|
||||||
if (aut == 0) {
|
edge = 2;
|
||||||
if (levred == 7) {
|
variC[0] = SQR(noisecfr);
|
||||||
edge = 2;
|
variC[1] = SQR(noisecfr);
|
||||||
variC[0] = SQR(noisecfr);
|
variC[2] = SQR(noisecfr);
|
||||||
variC[1] = SQR(noisecfr);
|
variC[3] = SQR(1.2f * noisecfr);
|
||||||
variC[2] = SQR(noisecfr);
|
variC[4] = SQR(noisecfr);
|
||||||
|
variC[5] = SQR(1.2f * noiseccr);
|
||||||
|
variC[6] = SQR(1.5f * noiseccr);
|
||||||
|
|
||||||
variC[3] = SQR(noisecfr);
|
variCb[0] = SQR(noisecfb);
|
||||||
variC[4] = SQR(noisecfr);
|
variCb[1] = SQR(noisecfb);
|
||||||
variC[5] = SQR(noiseccr);
|
variCb[2] = SQR(noisecfb);
|
||||||
variC[6] = SQR(noiseccr);
|
variCb[3] = SQR(noisecfb);
|
||||||
|
variCb[4] = SQR(noisecfb);
|
||||||
|
variCb[5] = SQR(1.2f * noiseccb);
|
||||||
|
variCb[6] = SQR(1.5f * noiseccb);
|
||||||
|
|
||||||
variCb[0] = SQR(noisecfb);
|
|
||||||
variCb[1] = SQR(noisecfb);
|
|
||||||
variCb[2] = SQR(noisecfb);
|
|
||||||
|
|
||||||
variCb[3] = SQR(noisecfb);
|
|
||||||
variCb[4] = SQR(noisecfb);
|
|
||||||
variCb[5] = SQR(noiseccb);
|
|
||||||
variCb[6] = SQR(noiseccb);
|
|
||||||
|
|
||||||
} else if (levred == 4) {
|
|
||||||
edge = 3;
|
|
||||||
variC[0] = SQR(lp.noisecf / 10.f);
|
|
||||||
variC[1] = SQR(lp.noisecf / 10.f);
|
|
||||||
variC[2] = SQR(lp.noisecf / 10.f);
|
|
||||||
variC[3] = SQR(lp.noisecf / 10.f);
|
|
||||||
|
|
||||||
variCb[0] = SQR(lp.noisecf / 10.f);
|
|
||||||
variCb[1] = SQR(lp.noisecf / 10.f);
|
|
||||||
variCb[2] = SQR(lp.noisecf / 10.f);
|
|
||||||
variCb[3] = SQR(lp.noisecf / 10.f);
|
|
||||||
|
|
||||||
}
|
|
||||||
} else if (aut == 1 || aut == 2) {
|
|
||||||
edge = 2;
|
|
||||||
variC[0] = SQR(slida[0]);
|
|
||||||
variC[1] = SQR(slida[1]);
|
|
||||||
variC[2] = SQR(slida[2]);
|
|
||||||
variC[3] = SQR(slida[3]);
|
|
||||||
variC[4] = SQR(slida[4]);
|
|
||||||
variC[5] = SQR(slida[5]);
|
|
||||||
variC[6] = SQR(slida[6]);
|
|
||||||
float maxc01 = rtengine::max(slida[0], slida[1]);
|
|
||||||
float maxc23 = rtengine::max(slida[2], slida[3]);
|
|
||||||
float max03 = rtengine::max(maxc01, maxc23);
|
|
||||||
float maxrf = rtengine::max(max03, slida[4]);
|
|
||||||
float maxrc = rtengine::max(slida[5], slida[6]);
|
|
||||||
|
|
||||||
variCb[0] = SQR(slidb[0]);
|
|
||||||
variCb[1] = SQR(slidb[1]);
|
|
||||||
variCb[2] = SQR(slidb[2]);
|
|
||||||
variCb[3] = SQR(slidb[3]);
|
|
||||||
variCb[4] = SQR(slidb[4]);
|
|
||||||
variCb[5] = SQR(slidb[5]);
|
|
||||||
variCb[6] = SQR(slidb[6]);
|
|
||||||
float maxb01 = rtengine::max(slidb[0], slidb[1]);
|
|
||||||
float maxb23 = rtengine::max(slidb[2], slidb[3]);
|
|
||||||
float maxb03 = rtengine::max(maxb01, maxb23);
|
|
||||||
float maxbf = rtengine::max(maxb03, slidb[4]);
|
|
||||||
maxcfine = rtengine::max(maxrf, maxbf);
|
|
||||||
|
|
||||||
float maxbc = rtengine::max(slidb[5], slidb[6]);
|
|
||||||
maxccoarse = rtengine::max(maxrc, maxbc);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
float minic = 0.000001f;
|
float minic = 0.000001f;
|
||||||
@ -11299,52 +11220,51 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
float k2 = 0.f;
|
float k2 = 0.f;
|
||||||
float k3 = 0.f;
|
float k3 = 0.f;
|
||||||
|
|
||||||
if (aut == 0 || aut == 1) {
|
if (lp.noisecf < 0.2f) {
|
||||||
if ((lp.noisecf < 0.2f && aut == 0) || (maxcfine < 0.2f && aut == 1)) {
|
|
||||||
k1 = 0.05f;
|
k1 = 0.05f;
|
||||||
k2 = 0.f;
|
k2 = 0.f;
|
||||||
k3 = 0.f;
|
k3 = 0.f;
|
||||||
} else if ((lp.noisecf < 0.3f && aut == 0) || (maxcfine < 0.3f && aut == 1)) {
|
} else if (lp.noisecf < 0.3f) {
|
||||||
k1 = 0.1f;
|
k1 = 0.1f;
|
||||||
k2 = 0.0f;
|
k2 = 0.0f;
|
||||||
k3 = 0.f;
|
k3 = 0.f;
|
||||||
} else if ((lp.noisecf < 0.5f && aut == 0) || (maxcfine < 0.5f && aut == 1)) {
|
} else if (lp.noisecf < 0.5f) {
|
||||||
k1 = 0.2f;
|
k1 = 0.2f;
|
||||||
k2 = 0.1f;
|
k2 = 0.1f;
|
||||||
k3 = 0.f;
|
k3 = 0.f;
|
||||||
} else if ((lp.noisecf < 0.8f && aut == 0) || (maxcfine < 0.8f && aut == 1)) {
|
} else if (lp.noisecf < 0.8f) {
|
||||||
k1 = 0.3f;
|
k1 = 0.3f;
|
||||||
k2 = 0.25f;
|
k2 = 0.25f;
|
||||||
k3 = 0.f;
|
k3 = 0.f;
|
||||||
} else if ((lp.noisecf < 1.f && aut == 0) || (maxcfine < 1.f && aut == 1)) {
|
} else if (lp.noisecf < 1.f) {
|
||||||
k1 = 0.4f;
|
k1 = 0.4f;
|
||||||
k2 = 0.25f;
|
k2 = 0.25f;
|
||||||
k3 = 0.1f;
|
k3 = 0.1f;
|
||||||
} else if ((lp.noisecf < 2.f && aut == 0) || (maxcfine < 2.f && aut == 1)) {
|
} else if (lp.noisecf < 2.f) {
|
||||||
k1 = 0.5f;
|
k1 = 0.5f;
|
||||||
k2 = 0.3f;
|
k2 = 0.3f;
|
||||||
k3 = 0.15f;
|
k3 = 0.15f;
|
||||||
} else if ((lp.noisecf < 3.f && aut == 0) || (maxcfine < 3.f && aut == 1)) {
|
} else if (lp.noisecf < 3.f) {
|
||||||
k1 = 0.6f;
|
k1 = 0.6f;
|
||||||
k2 = 0.45f;
|
k2 = 0.45f;
|
||||||
k3 = 0.3f;
|
k3 = 0.3f;
|
||||||
} else if ((lp.noisecf < 4.f && aut == 0) || (maxcfine < 4.f && aut == 1)) {
|
} else if (lp.noisecf < 4.f) {
|
||||||
k1 = 0.7f;
|
k1 = 0.7f;
|
||||||
k2 = 0.5f;
|
k2 = 0.5f;
|
||||||
k3 = 0.4f;
|
k3 = 0.4f;
|
||||||
} else if ((lp.noisecf < 5.f && aut == 0) || (maxcfine < 5.f && aut == 1)) {
|
} else if (lp.noisecf < 5.f) {
|
||||||
k1 = 0.8f;
|
k1 = 0.8f;
|
||||||
k2 = 0.6f;
|
k2 = 0.6f;
|
||||||
k3 = 0.5f;
|
k3 = 0.5f;
|
||||||
} else if ((lp.noisecf < 6.f && aut == 0) || (maxcfine < 10.f && aut == 1)) {
|
} else if (lp.noisecf < 6.f) {
|
||||||
k1 = 0.85f;
|
k1 = 0.85f;
|
||||||
k2 = 0.7f;
|
k2 = 0.7f;
|
||||||
k3 = 0.6f;
|
k3 = 0.6f;
|
||||||
} else if ((lp.noisecf < 8.f && aut == 0) || (maxcfine < 20.f && aut == 1)) {
|
} else if (lp.noisecf < 8.f) {
|
||||||
k1 = 0.9f;
|
k1 = 0.9f;
|
||||||
k2 = 0.8f;
|
k2 = 0.8f;
|
||||||
k3 = 0.7f;
|
k3 = 0.7f;
|
||||||
} else if ((lp.noisecf < 10.f && aut == 0) || (maxcfine < 50.f && aut == 1)) {
|
} else if (lp.noisecf < 10.f) {
|
||||||
k1 = 1.f;
|
k1 = 1.f;
|
||||||
k2 = 1.f;
|
k2 = 1.f;
|
||||||
k3 = 0.9f;
|
k3 = 0.9f;
|
||||||
@ -11352,14 +11272,8 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
} else {
|
} else {
|
||||||
k1 = 1.f;
|
k1 = 1.f;
|
||||||
k2 = 1.f;
|
k2 = 1.f;
|
||||||
k3 = 1.f;
|
k3 = 1.5f;
|
||||||
}
|
}
|
||||||
} else if (aut == 2) {
|
|
||||||
k1 = 1.f;
|
|
||||||
k2 = 1.f;
|
|
||||||
k3 = 1.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
variC[0] = rtengine::max(minic, variC[0]);
|
variC[0] = rtengine::max(minic, variC[0]);
|
||||||
variC[1] = rtengine::max(minic, k1 * variC[1]);
|
variC[1] = rtengine::max(minic, k1 * variC[1]);
|
||||||
@ -11371,27 +11285,26 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
variCb[2] = rtengine::max(minic, k2 * variCb[2]);
|
variCb[2] = rtengine::max(minic, k2 * variCb[2]);
|
||||||
variCb[3] = rtengine::max(minic, k3 * variCb[3]);
|
variCb[3] = rtengine::max(minic, k3 * variCb[3]);
|
||||||
|
|
||||||
if (levred == 7) {
|
|
||||||
float k4 = 0.f;
|
float k4 = 0.f;
|
||||||
float k5 = 0.f;
|
float k5 = 0.f;
|
||||||
float k6 = 0.f;
|
float k6 = 0.f;
|
||||||
|
|
||||||
if ((lp.noisecc < 0.2f && aut == 0) || (maxccoarse < 0.2f && aut == 1)) {
|
if (lp.noisecc < 0.2f) {
|
||||||
k4 = 0.1f;
|
k4 = 0.1f;
|
||||||
k5 = 0.02f;
|
k5 = 0.02f;
|
||||||
} else if ((lp.noisecc < 0.5f && aut == 0) || (maxccoarse < 0.5f && aut == 1)) {
|
} else if (lp.noisecc < 0.5f) {
|
||||||
k4 = 0.15f;
|
k4 = 0.15f;
|
||||||
k5 = 0.05f;
|
k5 = 0.05f;
|
||||||
} else if ((lp.noisecc < 1.f && aut == 0) || (maxccoarse < 1.f && aut == 1)) {
|
} else if (lp.noisecc < 1.f) {
|
||||||
k4 = 0.15f;
|
k4 = 0.15f;
|
||||||
k5 = 0.1f;
|
k5 = 0.1f;
|
||||||
} else if ((lp.noisecc < 3.f && aut == 0) || (maxccoarse < 3.f && aut == 1)) {
|
} else if (lp.noisecc < 3.f) {
|
||||||
k4 = 0.3f;
|
k4 = 0.3f;
|
||||||
k5 = 0.15f;
|
k5 = 0.15f;
|
||||||
} else if ((lp.noisecc < 4.f && aut == 0) || (maxccoarse < 5.f && aut == 1)) {
|
} else if (lp.noisecc < 4.f) {
|
||||||
k4 = 0.6f;
|
k4 = 0.6f;
|
||||||
k5 = 0.4f;
|
k5 = 0.4f;
|
||||||
} else if ((lp.noisecc < 6.f && aut == 0) || (maxccoarse < 6.f && aut == 1)) {
|
} else if (lp.noisecc < 6.f) {
|
||||||
k4 = 0.8f;
|
k4 = 0.8f;
|
||||||
k5 = 0.6f;
|
k5 = 0.6f;
|
||||||
} else {
|
} else {
|
||||||
@ -11404,11 +11317,11 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
variCb[4] = rtengine::max(0.000001f, k4 * variCb[4]);
|
variCb[4] = rtengine::max(0.000001f, k4 * variCb[4]);
|
||||||
variCb[5] = rtengine::max(0.000001f, k5 * variCb[5]);
|
variCb[5] = rtengine::max(0.000001f, k5 * variCb[5]);
|
||||||
|
|
||||||
if ((lp.noisecc < 4.f && aut == 0) || (maxccoarse < 4.f && aut == 1)) {
|
if (lp.noisecc < 4.f) {
|
||||||
k6 = 0.f;
|
k6 = 0.f;
|
||||||
} else if ((lp.noisecc < 5.f && aut == 0) || (maxccoarse < 5.f && aut == 1)) {
|
} else if (lp.noisecc < 5.f) {
|
||||||
k6 = 0.4f;
|
k6 = 0.4f;
|
||||||
} else if ((lp.noisecc < 6.f && aut == 0) || (maxccoarse < 6.f && aut == 1)) {
|
} else if (lp.noisecc < 6.f) {
|
||||||
k6 = 0.7f;
|
k6 = 0.7f;
|
||||||
} else {
|
} else {
|
||||||
k6 = 1.f;
|
k6 = 1.f;
|
||||||
@ -11417,7 +11330,6 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
variC[6] = rtengine::max(0.00001f, k6 * variC[6]);
|
variC[6] = rtengine::max(0.00001f, k6 * variC[6]);
|
||||||
variCb[6] = rtengine::max(0.00001f, k6 * variCb[6]);
|
variCb[6] = rtengine::max(0.00001f, k6 * variCb[6]);
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
float* noisevarchrom = new float[GH * GW];
|
float* noisevarchrom = new float[GH * GW];
|
||||||
//noisevarchrom in function chroma
|
//noisevarchrom in function chroma
|
||||||
@ -11425,7 +11337,7 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
float nvch = 0.6f;//high value
|
float nvch = 0.6f;//high value
|
||||||
float nvcl = 0.1f;//low value
|
float nvcl = 0.1f;//low value
|
||||||
|
|
||||||
if ((lp.noisecf > 100.f && aut == 0) || (maxcfine > 100.f && (aut == 1 || aut == 2))) {
|
if (lp.noisecf > 100.f) {
|
||||||
nvch = 0.8f;
|
nvch = 0.8f;
|
||||||
nvcl = 0.4f;
|
nvcl = 0.4f;
|
||||||
}
|
}
|
||||||
@ -11534,7 +11446,6 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gamma > 1.f) {
|
if(gamma > 1.f) {
|
||||||
#ifdef _OPENMP
|
#ifdef _OPENMP
|
||||||
# pragma omp parallel for schedule(dynamic,16) if (multiThread)
|
# pragma omp parallel for schedule(dynamic,16) if (multiThread)
|
||||||
@ -11552,10 +11463,6 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lp.nlstr > 0) {
|
|
||||||
NLMeans(tmp1.L, lp.nlstr, lp.nldet, lp.nlpat, lp.nlrad, lp.nlgam, GW, GH, float (sk), multiThread);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(lp.smasktyp != 0) {
|
if(lp.smasktyp != 0) {
|
||||||
if(lp.enablMask && lp.recothrd != 1.f) {
|
if(lp.enablMask && lp.recothrd != 1.f) {
|
||||||
LabImage tmp3(GW, GH);
|
LabImage tmp3(GW, GH);
|
||||||
@ -11634,7 +11541,82 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
masklum.free();
|
masklum.free();
|
||||||
masklumch.free();
|
masklumch.free();
|
||||||
}
|
}
|
||||||
DeNoise_Local(call, lp, originalmaskbl, levred, huerefblur, lumarefblur, chromarefblur, original, transformed, tmp1, cx, cy, sk);
|
|
||||||
|
// re read wavelet decomposition to calaculate noise residual
|
||||||
|
float chresid = 0.f;
|
||||||
|
float chresidtemp = 0.f;
|
||||||
|
float chmaxresid = 0.f;
|
||||||
|
float chmaxresidtemp = 0.f;
|
||||||
|
float chresid46 = 0.f;
|
||||||
|
float chresidtemp46 = 0.f;
|
||||||
|
float chmaxresid46 = 0.f;
|
||||||
|
float chmaxresidtemp46 = 0.f;
|
||||||
|
float Lresid = 0.f;
|
||||||
|
float Lmaxresid = 0.f;
|
||||||
|
float Lresid46 = 0.f;
|
||||||
|
float Lmaxresid46 = 0.f;
|
||||||
|
|
||||||
|
|
||||||
|
//calculate and display residual noise luma and chroma
|
||||||
|
// various coefficient from 1 to 5 - tries to take into account the difference between calculate Noise and percepted noise
|
||||||
|
wavelet_decomposition Ldecompinf(tmp1.L[0], tmp1.W, tmp1.H, levwavL, 1, skip, numThreads, lp.daubLen);
|
||||||
|
wavelet_decomposition adecompinf(tmp1.a[0], tmp1.W, tmp1.H, levwavL, 1, skip, numThreads, lp.daubLen);
|
||||||
|
wavelet_decomposition bdecompinf(tmp1.b[0], tmp1.W, tmp1.H, levwavL, 1, skip, numThreads, lp.daubLen);
|
||||||
|
|
||||||
|
Noise_residualAB(adecompinf, chresid, chmaxresid, false, 0, 3);
|
||||||
|
chresidtemp = chresid;
|
||||||
|
chmaxresidtemp = chmaxresid;
|
||||||
|
Noise_residualAB(bdecompinf, chresid, chmaxresid, false, 0, 3);
|
||||||
|
chresid += chresidtemp;
|
||||||
|
chmaxresid += chmaxresidtemp;
|
||||||
|
int nbmaddir = 4;
|
||||||
|
chresid = sqrt(chresid / ( 3 * nbmaddir * 2));
|
||||||
|
highresi = chresid + 0.5f * (sqrt(chmaxresid) - chresid); //evaluate sigma
|
||||||
|
nresi = chresid;
|
||||||
|
highresi /= 1.4f;//arbitrary coefficient
|
||||||
|
nresi /= 1.4f;
|
||||||
|
|
||||||
|
// printf("nresi03=%f highresi=%f \n", (double) nresi, (double) highresi);
|
||||||
|
|
||||||
|
|
||||||
|
Noise_residualAB(adecompinf, chresid46, chmaxresid46, false, 4, 6);
|
||||||
|
nbmaddir = 3;
|
||||||
|
chresidtemp46 = chresid46;
|
||||||
|
chmaxresidtemp46 = chmaxresid46;
|
||||||
|
Noise_residualAB(bdecompinf, chresid46, chmaxresid46, false, 4, 6);
|
||||||
|
chresid46 += chresidtemp46;
|
||||||
|
chmaxresid46 += chmaxresidtemp46;
|
||||||
|
chresid46 = sqrt(chresid46 / ( 3 * nbmaddir * 2));
|
||||||
|
highresi46 = chresid46 + 0.5f * (sqrt(chmaxresid46) - chresid46); //evaluate sigma
|
||||||
|
nresi46 = chresid46;
|
||||||
|
highresi46 /= 2.f;//arbitrary coefficient
|
||||||
|
nresi46 /= 2.f;
|
||||||
|
|
||||||
|
// printf("nresi46=%f highresi=%f \n", (double) nresi46, (double) highresi46);
|
||||||
|
|
||||||
|
|
||||||
|
Noise_residualAB(Ldecompinf, Lresid, Lmaxresid, false, 0, 3);
|
||||||
|
nbmaddir = 4;
|
||||||
|
Lresid = sqrt(Lresid / (3 * nbmaddir));
|
||||||
|
Lhighresi = Lresid + 0.5f * (sqrt(Lmaxresid) - Lresid); //evaluate sigma
|
||||||
|
Lnresi = Lresid;
|
||||||
|
Lnresi /= 2.f;//arbitrary coefficient
|
||||||
|
Lhighresi /= 2.f;
|
||||||
|
// printf("Lresi03=%f Lhighresi=%f levwavL=%i\n", (double) Lnresi, (double) Lhighresi, levwavL);
|
||||||
|
|
||||||
|
Noise_residualAB(Ldecompinf, Lresid46, Lmaxresid46, false, 4, 6);
|
||||||
|
nbmaddir = 3;
|
||||||
|
Lresid46 = sqrt(Lresid46 / (3 * nbmaddir));
|
||||||
|
Lhighresi46 = Lresid46 + 0.5f * (sqrt(Lmaxresid46) - Lresid46); //evaluate sigma
|
||||||
|
Lnresi46 = Lresid46;
|
||||||
|
Lhighresi46 /= 5.f;//arbitrary coefficient
|
||||||
|
Lnresi46 /= 5.f;
|
||||||
|
// printf("Lresi46=%f Lhighresi=%f levwavL=%i\n", (double) Lnresi46, (double) Lhighresi46, levwavL);
|
||||||
|
|
||||||
|
// end calculate
|
||||||
|
|
||||||
|
DeNoise_Local(call, lp, originalmaskbl, levred, huerefblur, lumarefblur, chromarefblur, original, transformed, tmp1, cx, cy, sk);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
DeNoise_Local(call, lp, original, levred, huerefblur, lumarefblur, chromarefblur, original, transformed, tmp1, cx, cy, sk);
|
DeNoise_Local(call, lp, original, levred, huerefblur, lumarefblur, chromarefblur, original, transformed, tmp1, cx, cy, sk);
|
||||||
}
|
}
|
||||||
@ -11731,69 +11713,40 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
|
|
||||||
float vari[levred];
|
float vari[levred];
|
||||||
float mxsl = 0.f;
|
float mxsl = 0.f;
|
||||||
// float mxsfl = 0.f;
|
|
||||||
|
|
||||||
if (aut == 0) {
|
{
|
||||||
if (levred == 7) {
|
|
||||||
edge = 2;
|
edge = 2;
|
||||||
vari[0] = 0.8f * SQR((lp.noiself0 / 125.f) * (1.f + lp.noiself0 / 25.f));
|
vari[0] = 0.8f * SQR((lp.noiself0 / 125.f) * (1.f + lp.noiself0 / 25.f));
|
||||||
vari[1] = 0.8f * SQR((lp.noiself / 125.f) * (1.f + lp.noiself / 25.f));
|
vari[1] = 0.8f * SQR((lp.noiself / 125.f) * (1.f + lp.noiself / 25.f));
|
||||||
vari[2] = 0.8f * SQR((lp.noiself2 / 125.f) * (1.f + lp.noiself2 / 25.f));
|
vari[2] = 0.8f * SQR((lp.noiself2 / 125.f) * (1.f + lp.noiself2 / 25.f));
|
||||||
|
|
||||||
vari[3] = 0.8f * SQR((lp.noiselc / 125.f) * (1.f + lp.noiselc / 25.f));
|
vari[3] = 0.8f * SQR((lp.noiselc / 125.f) * (1.f + lp.noiselc / 25.f));
|
||||||
vari[4] = 0.8f * SQR((lp.noiselc4 / 125.f) * (1.f + lp.noiselc4 / 25.f));
|
vari[4] = 1.f * SQR((lp.noiselc4 / 125.f) * (1.f + lp.noiselc4 / 25.f));
|
||||||
vari[5] = 0.8f * SQR((lp.noiselc5 / 125.f) * (1.f + lp.noiselc5 / 25.f));
|
vari[5] = 1.5f * SQR((lp.noiselc5 / 125.f) * (1.f + lp.noiselc5 / 25.f));
|
||||||
vari[6] = 0.8f * SQR((lp.noiselc6 / 125.f) * (1.f + lp.noiselc6 / 25.f));
|
vari[6] = 2.5f * SQR((lp.noiselc6 / 125.f) * (1.f + lp.noiselc6 / 25.f));
|
||||||
} else if (levred == 4) {
|
|
||||||
edge = 3;
|
|
||||||
vari[0] = 0.8f * SQR((lp.noiself0 / 125.f) * (1.f + lp.noiself0 / 25.f));
|
|
||||||
vari[1] = 0.8f * SQR((lp.noiself / 125.f) * (1.f + lp.noiself / 25.f));
|
|
||||||
vari[2] = 0.8f * SQR((lp.noiselc / 125.f) * (1.f + lp.noiselc / 25.f));
|
|
||||||
vari[3] = 0.8f * SQR((lp.noiselc / 125.f) * (1.f + lp.noiselc / 25.f));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
} else if (aut == 1 || aut == 2) {
|
|
||||||
edge = 2;
|
|
||||||
vari[0] = SQR(slidL[0]);
|
|
||||||
vari[1] = SQR(slidL[1]);
|
|
||||||
vari[2] = SQR(slidL[2]);
|
|
||||||
vari[3] = SQR(slidL[3]);
|
|
||||||
vari[4] = SQR(slidL[4]);
|
|
||||||
vari[5] = SQR(slidL[5]);
|
|
||||||
vari[6] = SQR(slidL[6]);
|
|
||||||
float mxslid34 = rtengine::max(slidL[3], slidL[4]);
|
|
||||||
float mxslid56 = rtengine::max(slidL[5], slidL[6]);
|
|
||||||
mxsl = rtengine::max(mxslid34, mxslid56);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
float kr3 = 0.f;
|
float kr3 = 0.f;
|
||||||
|
|
||||||
if (aut == 0 || aut == 1) {
|
{
|
||||||
if ((lp.noiselc < 30.f && aut == 0) || (mxsl < 30.f && aut == 1)) {
|
if (lp.noiselc < 30.f) {
|
||||||
kr3 = 0.f;
|
kr3 = 0.f;
|
||||||
} else if ((lp.noiselc < 50.f && aut == 0) || (mxsl < 50.f && aut == 1)) {
|
} else if (lp.noiselc < 50.f) {
|
||||||
kr3 = 0.5f;
|
kr3 = 0.5f;
|
||||||
} else if ((lp.noiselc < 70.f && aut == 0) || (mxsl < 70.f && aut == 1)) {
|
} else if (lp.noiselc < 70.f) {
|
||||||
kr3 = 0.7f;
|
kr3 = 0.7f;
|
||||||
} else {
|
} else {
|
||||||
kr3 = 1.f;
|
kr3 = 1.f;
|
||||||
}
|
}
|
||||||
} else if (aut == 2) {
|
|
||||||
kr3 = 1.f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vari[0] = rtengine::max(0.000001f, vari[0]);
|
vari[0] = rtengine::max(0.000001f, vari[0]);
|
||||||
vari[1] = rtengine::max(0.000001f, vari[1]);
|
vari[1] = rtengine::max(0.000001f, vari[1]);
|
||||||
vari[2] = rtengine::max(0.000001f, vari[2]);
|
vari[2] = rtengine::max(0.000001f, vari[2]);
|
||||||
vari[3] = rtengine::max(0.000001f, kr3 * vari[3]);
|
vari[3] = rtengine::max(0.000001f, kr3 * vari[3]);
|
||||||
|
vari[4] = rtengine::max(0.000001f, vari[4]);
|
||||||
if (levred == 7) {
|
vari[5] = rtengine::max(0.000001f, vari[5]);
|
||||||
vari[4] = rtengine::max(0.000001f, vari[4]);
|
vari[6] = rtengine::max(0.000001f, vari[6]);
|
||||||
vari[5] = rtengine::max(0.000001f, vari[5]);
|
|
||||||
vari[6] = rtengine::max(0.000001f, vari[6]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// float* noisevarlum = nullptr; // we need a dummy to pass it to WaveletDenoiseAllL
|
// float* noisevarlum = nullptr; // we need a dummy to pass it to WaveletDenoiseAllL
|
||||||
float* noisevarlum = new float[bfh * bfw];
|
float* noisevarlum = new float[bfh * bfw];
|
||||||
@ -11930,77 +11883,28 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
|
|
||||||
|
|
||||||
if (!adecomp.memory_allocation_failed() && !bdecomp.memory_allocation_failed()) {
|
if (!adecomp.memory_allocation_failed() && !bdecomp.memory_allocation_failed()) {
|
||||||
float maxcfine = 0.f;
|
|
||||||
float maxccoarse = 0.f;
|
float maxccoarse = 0.f;
|
||||||
|
|
||||||
if (aut == 0) {
|
|
||||||
|
|
||||||
if (levred == 7) {
|
{
|
||||||
edge = 2;
|
edge = 2;
|
||||||
variC[0] = SQR(noisecfr);
|
variC[0] = SQR(noisecfr);
|
||||||
variC[1] = SQR(noisecfr);
|
variC[1] = SQR(noisecfr);
|
||||||
variC[2] = SQR(noisecfr);
|
variC[2] = SQR(noisecfr);
|
||||||
|
variC[3] = SQR(1.2f * noisecfr);
|
||||||
variC[3] = SQR(noisecfr);
|
|
||||||
variC[4] = SQR(noisecfr);
|
variC[4] = SQR(noisecfr);
|
||||||
variC[5] = SQR(noiseccr);
|
variC[5] = SQR(1.2f * noiseccr);
|
||||||
variC[6] = SQR(noiseccr);
|
variC[6] = SQR(1.5f * noiseccr);
|
||||||
|
|
||||||
variCb[0] = SQR(noisecfb);
|
variCb[0] = SQR(noisecfb);
|
||||||
variCb[1] = SQR(noisecfb);
|
variCb[1] = SQR(noisecfb);
|
||||||
variCb[2] = SQR(noisecfb);
|
variCb[2] = SQR(noisecfb);
|
||||||
|
|
||||||
variCb[3] = SQR(noisecfb);
|
variCb[3] = SQR(noisecfb);
|
||||||
variCb[4] = SQR(noisecfb);
|
variCb[4] = SQR(noisecfb);
|
||||||
variCb[5] = SQR(noiseccb);
|
variCb[5] = SQR(1.2f * noiseccb);
|
||||||
variCb[6] = SQR(noiseccb);
|
variCb[6] = SQR(1.5f * noiseccb);
|
||||||
|
|
||||||
} else if (levred == 4) {
|
|
||||||
edge = 3;
|
|
||||||
variC[0] = SQR(lp.noisecf / 10.f);
|
|
||||||
variC[1] = SQR(lp.noisecf / 10.f);
|
|
||||||
variC[2] = SQR(lp.noisecf / 10.f);
|
|
||||||
variC[3] = SQR(lp.noisecf / 10.f);
|
|
||||||
|
|
||||||
variCb[0] = SQR(lp.noisecf / 10.f);
|
|
||||||
variCb[1] = SQR(lp.noisecf / 10.f);
|
|
||||||
variCb[2] = SQR(lp.noisecf / 10.f);
|
|
||||||
variCb[3] = SQR(lp.noisecf / 10.f);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
} else if (aut == 1 || aut == 2) {
|
|
||||||
edge = 2;
|
|
||||||
variC[0] = SQR(slida[0]);
|
|
||||||
variC[1] = SQR(slida[1]);
|
|
||||||
variC[2] = SQR(slida[2]);
|
|
||||||
variC[3] = SQR(slida[3]);
|
|
||||||
variC[4] = SQR(slida[4]);
|
|
||||||
variC[5] = SQR(slida[5]);
|
|
||||||
variC[6] = SQR(slida[6]);
|
|
||||||
float maxc01 = rtengine::max(slida[0], slida[1]);
|
|
||||||
float maxc23 = rtengine::max(slida[2], slida[3]);
|
|
||||||
float max03 = rtengine::max(maxc01, maxc23);
|
|
||||||
float maxrf = rtengine::max(max03, slida[4]);
|
|
||||||
float maxrc = rtengine::max(slida[5], slida[6]);
|
|
||||||
|
|
||||||
variCb[0] = SQR(slidb[0]);
|
|
||||||
variCb[1] = SQR(slidb[1]);
|
|
||||||
variCb[2] = SQR(slidb[2]);
|
|
||||||
variCb[3] = SQR(slidb[3]);
|
|
||||||
variCb[4] = SQR(slidb[4]);
|
|
||||||
variCb[5] = SQR(slidb[5]);
|
|
||||||
variCb[6] = SQR(slidb[6]);
|
|
||||||
float maxb01 = rtengine::max(slidb[0], slidb[1]);
|
|
||||||
float maxb23 = rtengine::max(slidb[2], slidb[3]);
|
|
||||||
float maxb03 = rtengine::max(maxb01, maxb23);
|
|
||||||
float maxbf = rtengine::max(maxb03, slidb[4]);
|
|
||||||
maxcfine = rtengine::max(maxrf, maxbf);
|
|
||||||
|
|
||||||
float maxbc = rtengine::max(slidb[5], slidb[6]);
|
|
||||||
maxccoarse = rtengine::max(maxrc, maxbc);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
float minic = 0.000001f;
|
float minic = 0.000001f;
|
||||||
@ -12013,52 +11917,51 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
float k2 = 0.f;
|
float k2 = 0.f;
|
||||||
float k3 = 0.f;
|
float k3 = 0.f;
|
||||||
|
|
||||||
if (aut == 0 || aut == 1) {
|
if (lp.noisecf < 0.2f) {
|
||||||
if ((lp.noisecf < 0.2f && aut == 0) || (maxcfine < 0.2f && aut == 1)) {
|
|
||||||
k1 = 0.05f;
|
k1 = 0.05f;
|
||||||
k2 = 0.f;
|
k2 = 0.f;
|
||||||
k3 = 0.f;
|
k3 = 0.f;
|
||||||
} else if ((lp.noisecf < 0.3f && aut == 0) || (maxcfine < 0.3f && aut == 1)) {
|
} else if (lp.noisecf < 0.3f) {
|
||||||
k1 = 0.1f;
|
k1 = 0.1f;
|
||||||
k2 = 0.0f;
|
k2 = 0.0f;
|
||||||
k3 = 0.f;
|
k3 = 0.f;
|
||||||
} else if ((lp.noisecf < 0.5f && aut == 0) || (maxcfine < 0.5f && aut == 1)) {
|
} else if (lp.noisecf < 0.5f) {
|
||||||
k1 = 0.2f;
|
k1 = 0.2f;
|
||||||
k2 = 0.1f;
|
k2 = 0.1f;
|
||||||
k3 = 0.f;
|
k3 = 0.f;
|
||||||
} else if ((lp.noisecf < 0.8f && aut == 0) || (maxcfine < 0.8f && aut == 1)) {
|
} else if (lp.noisecf < 0.8f) {
|
||||||
k1 = 0.3f;
|
k1 = 0.3f;
|
||||||
k2 = 0.25f;
|
k2 = 0.25f;
|
||||||
k3 = 0.f;
|
k3 = 0.f;
|
||||||
} else if ((lp.noisecf < 1.f && aut == 0) || (maxcfine < 1.f && aut == 1)) {
|
} else if (lp.noisecf < 1.f) {
|
||||||
k1 = 0.4f;
|
k1 = 0.4f;
|
||||||
k2 = 0.25f;
|
k2 = 0.25f;
|
||||||
k3 = 0.1f;
|
k3 = 0.1f;
|
||||||
} else if ((lp.noisecf < 2.f && aut == 0) || (maxcfine < 2.f && aut == 1)) {
|
} else if (lp.noisecf < 2.f) {
|
||||||
k1 = 0.5f;
|
k1 = 0.5f;
|
||||||
k2 = 0.3f;
|
k2 = 0.3f;
|
||||||
k3 = 0.15f;
|
k3 = 0.15f;
|
||||||
} else if ((lp.noisecf < 3.f && aut == 0) || (maxcfine < 3.f && aut == 1)) {
|
} else if (lp.noisecf < 3.f) {
|
||||||
k1 = 0.6f;
|
k1 = 0.6f;
|
||||||
k2 = 0.45f;
|
k2 = 0.45f;
|
||||||
k3 = 0.3f;
|
k3 = 0.3f;
|
||||||
} else if ((lp.noisecf < 4.f && aut == 0) || (maxcfine < 4.f && aut == 1)) {
|
} else if (lp.noisecf < 4.f) {
|
||||||
k1 = 0.7f;
|
k1 = 0.7f;
|
||||||
k2 = 0.5f;
|
k2 = 0.5f;
|
||||||
k3 = 0.4f;
|
k3 = 0.4f;
|
||||||
} else if ((lp.noisecf < 5.f && aut == 0) || (maxcfine < 5.f && aut == 1)) {
|
} else if (lp.noisecf < 5.f) {
|
||||||
k1 = 0.8f;
|
k1 = 0.8f;
|
||||||
k2 = 0.6f;
|
k2 = 0.6f;
|
||||||
k3 = 0.5f;
|
k3 = 0.5f;
|
||||||
} else if ((lp.noisecf < 6.f && aut == 0) || (maxcfine < 10.f && aut == 1)) {
|
} else if (lp.noisecf < 6.f) {
|
||||||
k1 = 0.85f;
|
k1 = 0.85f;
|
||||||
k2 = 0.7f;
|
k2 = 0.7f;
|
||||||
k3 = 0.6f;
|
k3 = 0.6f;
|
||||||
} else if ((lp.noisecf < 8.f && aut == 0) || (maxcfine < 20.f && aut == 1)) {
|
} else if (lp.noisecf < 8.f) {
|
||||||
k1 = 0.9f;
|
k1 = 0.9f;
|
||||||
k2 = 0.8f;
|
k2 = 0.8f;
|
||||||
k3 = 0.7f;
|
k3 = 0.7f;
|
||||||
} else if ((lp.noisecf < 10.f && aut == 0) || (maxcfine < 50.f && aut == 1)) {
|
} else if (lp.noisecf < 10.f) {
|
||||||
k1 = 1.f;
|
k1 = 1.f;
|
||||||
k2 = 1.f;
|
k2 = 1.f;
|
||||||
k3 = 0.9f;
|
k3 = 0.9f;
|
||||||
@ -12066,13 +11969,8 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
} else {
|
} else {
|
||||||
k1 = 1.f;
|
k1 = 1.f;
|
||||||
k2 = 1.f;
|
k2 = 1.f;
|
||||||
k3 = 1.f;
|
k3 = 1.5f;
|
||||||
}
|
}
|
||||||
} else if (aut == 2) {
|
|
||||||
k1 = 1.f;
|
|
||||||
k2 = 1.f;
|
|
||||||
k3 = 1.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
variC[0] = rtengine::max(minic, variC[0]);
|
variC[0] = rtengine::max(minic, variC[0]);
|
||||||
variC[1] = rtengine::max(minic, k1 * variC[1]);
|
variC[1] = rtengine::max(minic, k1 * variC[1]);
|
||||||
@ -12084,27 +11982,27 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
variCb[2] = rtengine::max(minic, k2 * variCb[2]);
|
variCb[2] = rtengine::max(minic, k2 * variCb[2]);
|
||||||
variCb[3] = rtengine::max(minic, k3 * variCb[3]);
|
variCb[3] = rtengine::max(minic, k3 * variCb[3]);
|
||||||
|
|
||||||
if (levred == 7) {
|
{
|
||||||
float k4 = 0.f;
|
float k4 = 0.f;
|
||||||
float k5 = 0.f;
|
float k5 = 0.f;
|
||||||
float k6 = 0.f;
|
float k6 = 0.f;
|
||||||
|
|
||||||
if ((lp.noisecc < 0.2f && aut == 0) || (maxccoarse < 0.2f && aut == 1)) {
|
if (lp.noisecc < 0.2f) {
|
||||||
k4 = 0.1f;
|
k4 = 0.1f;
|
||||||
k5 = 0.02f;
|
k5 = 0.02f;
|
||||||
} else if ((lp.noisecc < 0.5f && aut == 0) || (maxccoarse < 0.5f && aut == 1)) {
|
} else if (lp.noisecc < 0.5f) {
|
||||||
k4 = 0.15f;
|
k4 = 0.15f;
|
||||||
k5 = 0.05f;
|
k5 = 0.05f;
|
||||||
} else if ((lp.noisecc < 1.f && aut == 0) || (maxccoarse < 1.f && aut == 1)) {
|
} else if (lp.noisecc < 1.f) {
|
||||||
k4 = 0.15f;
|
k4 = 0.15f;
|
||||||
k5 = 0.1f;
|
k5 = 0.1f;
|
||||||
} else if ((lp.noisecc < 3.f && aut == 0) || (maxccoarse < 3.f && aut == 1)) {
|
} else if (lp.noisecc < 3.f) {
|
||||||
k4 = 0.3f;
|
k4 = 0.3f;
|
||||||
k5 = 0.15f;
|
k5 = 0.15f;
|
||||||
} else if ((lp.noisecc < 4.f && aut == 0) || (maxccoarse < 5.f && aut == 1)) {
|
} else if (lp.noisecc < 4.f) {
|
||||||
k4 = 0.6f;
|
k4 = 0.6f;
|
||||||
k5 = 0.4f;
|
k5 = 0.4f;
|
||||||
} else if ((lp.noisecc < 6.f && aut == 0) || (maxccoarse < 6.f && aut == 1)) {
|
} else if (lp.noisecc < 6.f) {
|
||||||
k4 = 0.8f;
|
k4 = 0.8f;
|
||||||
k5 = 0.6f;
|
k5 = 0.6f;
|
||||||
} else {
|
} else {
|
||||||
@ -12118,11 +12016,11 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
variCb[4] = rtengine::max(0.000001f, k4 * variCb[4]);
|
variCb[4] = rtengine::max(0.000001f, k4 * variCb[4]);
|
||||||
variCb[5] = rtengine::max(0.000001f, k5 * variCb[5]);
|
variCb[5] = rtengine::max(0.000001f, k5 * variCb[5]);
|
||||||
|
|
||||||
if ((lp.noisecc < 4.f && aut == 0) || (maxccoarse < 4.f && aut == 1)) {
|
if (lp.noisecc < 4.f) {
|
||||||
k6 = 0.f;
|
k6 = 0.f;
|
||||||
} else if ((lp.noisecc < 5.f && aut == 0) || (maxccoarse < 5.f && aut == 1)) {
|
} else if (lp.noisecc < 5.f) {
|
||||||
k6 = 0.4f;
|
k6 = 0.4f;
|
||||||
} else if ((lp.noisecc < 6.f && aut == 0) || (maxccoarse < 6.f && aut == 1)) {
|
} else if (lp.noisecc < 6.f) {
|
||||||
k6 = 0.7f;
|
k6 = 0.7f;
|
||||||
} else {
|
} else {
|
||||||
k6 = 1.f;
|
k6 = 1.f;
|
||||||
@ -12137,7 +12035,7 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
float nvch = 0.6f;//high value
|
float nvch = 0.6f;//high value
|
||||||
float nvcl = 0.1f;//low value
|
float nvcl = 0.1f;//low value
|
||||||
|
|
||||||
if ((lp.noisecf > 30.f && aut == 0) || (maxcfine > 100.f && (aut == 1 || aut == 2))) {
|
if (lp.noisecf > 30.f) {
|
||||||
nvch = 0.8f;
|
nvch = 0.8f;
|
||||||
nvcl = 0.4f;
|
nvcl = 0.4f;
|
||||||
}
|
}
|
||||||
@ -12377,6 +12275,7 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -13363,7 +13262,9 @@ void ImProcFunctions::Lab_Local(
|
|||||||
double& huerefblur, double& chromarefblur, double& lumarefblur, double& hueref, double& chromaref, double& lumaref, double& sobelref, int &lastsav,
|
double& huerefblur, double& chromarefblur, double& lumarefblur, double& hueref, double& chromaref, double& lumaref, double& sobelref, int &lastsav,
|
||||||
bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, int lllogMask, int ll_Mask, int llcieMask,
|
bool prevDeltaE, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, int lllogMask, int ll_Mask, int llcieMask,
|
||||||
float& minCD, float& maxCD, float& mini, float& maxi, float& Tmean, float& Tsigma, float& Tmin, float& Tmax,
|
float& minCD, float& maxCD, float& mini, float& maxi, float& Tmean, float& Tsigma, float& Tmin, float& Tmax,
|
||||||
float& meantm, float& stdtm, float& meanreti, float& stdreti, float &fab
|
float& meantm, float& stdtm, float& meanreti, float& stdreti, float &fab,
|
||||||
|
float& highresi, float& nresi, float& highresi46, float& nresi46, float& Lhighresi, float& Lnresi, float& Lhighresi46, float& Lnresi46
|
||||||
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//general call of others functions : important return hueref, chromaref, lumaref
|
//general call of others functions : important return hueref, chromaref, lumaref
|
||||||
@ -14410,12 +14311,9 @@ void ImProcFunctions::Lab_Local(
|
|||||||
|
|
||||||
//local denoise
|
//local denoise
|
||||||
if (lp.activspot && lp.denoiena && (lp.noiself > 0.f || lp.noiself0 > 0.f || lp.noiself2 > 0.f || lp.wavcurvedenoi ||lp.nlstr > 0 || lp.noiselc > 0.f || lp.noisecf > 0.f || lp.noisecc > 0.f )) {//disable denoise if not used
|
if (lp.activspot && lp.denoiena && (lp.noiself > 0.f || lp.noiself0 > 0.f || lp.noiself2 > 0.f || lp.wavcurvedenoi ||lp.nlstr > 0 || lp.noiselc > 0.f || lp.noisecf > 0.f || lp.noisecc > 0.f )) {//disable denoise if not used
|
||||||
float slidL[8] = {0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f};
|
|
||||||
float slida[8] = {0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f};
|
|
||||||
float slidb[8] = {0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f};
|
|
||||||
constexpr int aut = 0;
|
constexpr int aut = 0;
|
||||||
DeNoise(call, slidL, slida, slidb, aut, noiscfactiv, lp, originalmaskbl.get(), bufmaskblurbl.get(), levred, huerefblur, lumarefblur, chromarefblur, original, transformed, cx, cy, sk, locwavCurvehue, locwavhueutili);
|
DeNoise(call, aut, noiscfactiv, lp, originalmaskbl.get(), bufmaskblurbl.get(), levred, huerefblur, lumarefblur, chromarefblur, original, transformed, cx, cy, sk, locwavCurvehue, locwavhueutili,
|
||||||
|
highresi, nresi, highresi46, nresi46, Lhighresi, Lnresi, Lhighresi46, Lnresi46);
|
||||||
if (lp.recur) {
|
if (lp.recur) {
|
||||||
original->CopyFrom(transformed, multiThread);
|
original->CopyFrom(transformed, multiThread);
|
||||||
float avge;
|
float avge;
|
||||||
@ -19275,6 +19173,7 @@ void ImProcFunctions::Lab_Local(
|
|||||||
calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili);
|
calc_ref(sp, original, transformed, 0, 0, original->W, original->H, sk, huerefblur, chromarefblur, lumarefblur, hueref, chromaref, lumaref, sobelref, avge, locwavCurveden, locwavdenutili);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -438,9 +438,21 @@ public:
|
|||||||
double Tmax;
|
double Tmax;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct locallabDenoiseLC {
|
||||||
|
double highres;
|
||||||
|
double nres;
|
||||||
|
double highres46;
|
||||||
|
double nres46;
|
||||||
|
double Lhighres;
|
||||||
|
double Lnres;
|
||||||
|
double Lhighres46;
|
||||||
|
double Lnres46;
|
||||||
|
};
|
||||||
|
|
||||||
virtual ~LocallabListener() = default;
|
virtual ~LocallabListener() = default;
|
||||||
// virtual void refChanged(const std::vector<locallabRef> &ref, int selspot) = 0;
|
// virtual void refChanged(const std::vector<locallabRef> &ref, int selspot) = 0;
|
||||||
virtual void minmaxChanged(const std::vector<locallabRetiMinMax> &minmax, int selspot) = 0;
|
virtual void minmaxChanged(const std::vector<locallabRetiMinMax> &minmax, int selspot) = 0;
|
||||||
|
virtual void denChanged(const std::vector<locallabDenoiseLC> &denlc, int selspot) = 0;
|
||||||
virtual void logencodChanged(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const bool autocomput, const bool autocie, const float jz1) = 0;
|
virtual void logencodChanged(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const bool autocomput, const bool autocie, const float jz1) = 0;
|
||||||
virtual void refChanged2(float *huerefp, float *chromarefp, float *lumarefp, float *fabrefp, int selspot) = 0;
|
virtual void refChanged2(float *huerefp, float *chromarefp, float *lumarefp, float *fabrefp, int selspot) = 0;
|
||||||
};
|
};
|
||||||
|
@ -1175,6 +1175,14 @@ private:
|
|||||||
float Tsigma;
|
float Tsigma;
|
||||||
float Tmin;
|
float Tmin;
|
||||||
float Tmax;
|
float Tmax;
|
||||||
|
float highresi = 0.f;
|
||||||
|
float nresi = 0.f;
|
||||||
|
float highresi46 =0.f;
|
||||||
|
float nresi46 = 0.f;
|
||||||
|
float Lhighresi = 0.f;
|
||||||
|
float Lnresi = 0.f;
|
||||||
|
float Lhighresi46 = 0.f;
|
||||||
|
float Lnresi46 = 0.f;
|
||||||
|
|
||||||
// No Locallab mask is shown in exported picture
|
// No Locallab mask is shown in exported picture
|
||||||
ipf.Lab_Local(2, sp, shbuffer, labView, labView, reservView.get(), savenormtmView.get(), savenormretiView.get(), lastorigView.get(), fw, fh, 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve,
|
ipf.Lab_Local(2, sp, shbuffer, labView, labView, reservView.get(), savenormtmView.get(), savenormretiView.get(), lastorigView.get(), fw, fh, 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve,
|
||||||
@ -1229,7 +1237,8 @@ private:
|
|||||||
LHutili, HHutili, CHutili, HHutilijz, CHutilijz, LHutilijz, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
|
LHutili, HHutili, CHutili, HHutilijz, CHutilijz, LHutilijz, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
|
||||||
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax,
|
||||||
meantme, stdtme, meanretie, stdretie, fab
|
meantme, stdtme, meanretie, stdretie, fab,
|
||||||
|
highresi, nresi, highresi46, nresi46, Lhighresi, Lnresi, Lhighresi46, Lnresi46
|
||||||
);
|
);
|
||||||
|
|
||||||
if (sp + 1u < params.locallab.spots.size()) {
|
if (sp + 1u < params.locallab.spots.size()) {
|
||||||
|
@ -703,6 +703,19 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
|||||||
|
|
||||||
expreti.updateMinMax(cdma, cdmin, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
|
expreti.updateMinMax(cdma, cdmin, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
|
||||||
}
|
}
|
||||||
|
// Update Locallab Denoise tool lum/chro
|
||||||
|
if (pp->locallab.selspot < (int) denoiselc.size()) {
|
||||||
|
const double highres = denoiselc.at(pp->locallab.selspot).highres;
|
||||||
|
const double nres = denoiselc.at(pp->locallab.selspot).nres;
|
||||||
|
const double highres46 = denoiselc.at(pp->locallab.selspot).highres46;
|
||||||
|
const double nres46 = denoiselc.at(pp->locallab.selspot).nres46;
|
||||||
|
const double Lhighres = denoiselc.at(pp->locallab.selspot).Lhighres;
|
||||||
|
const double Lnres = denoiselc.at(pp->locallab.selspot).Lnres;
|
||||||
|
const double Lhighres46 = denoiselc.at(pp->locallab.selspot).Lhighres46;
|
||||||
|
const double Lnres46 = denoiselc.at(pp->locallab.selspot).Lnres46;
|
||||||
|
|
||||||
|
expblur.updatedenlc(highres, nres, highres46, nres46, Lhighres, Lnres, Lhighres46, Lnres46);
|
||||||
|
}
|
||||||
|
|
||||||
// Update default values according to selected spot
|
// Update default values according to selected spot
|
||||||
setDefaults(pp, pedited);
|
setDefaults(pp, pedited);
|
||||||
@ -1094,6 +1107,28 @@ void Locallab::minmaxChanged(const std::vector<locallabRetiMinMax> &minmax, int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Locallab::denChanged(const std::vector<locallabDenoiseLC> &denlc, int selspot)
|
||||||
|
{
|
||||||
|
// Saving transmitted min/max data
|
||||||
|
denoiselc = denlc;
|
||||||
|
|
||||||
|
//Update Locallab Denoise tool lum chro
|
||||||
|
if (selspot < (int) denoiselc.size()) {
|
||||||
|
const double highres = denoiselc.at(selspot).highres;
|
||||||
|
const double nres = denoiselc.at(selspot).nres;
|
||||||
|
const double highres46 = denoiselc.at(selspot).highres46;
|
||||||
|
const double nres46 = denoiselc.at(selspot).nres46;
|
||||||
|
const double Lhighres = denoiselc.at(selspot).Lhighres;
|
||||||
|
const double Lnres = denoiselc.at(selspot).Lnres;
|
||||||
|
const double Lhighres46 = denoiselc.at(selspot).Lhighres46;
|
||||||
|
const double Lnres46 = denoiselc.at(selspot).Lnres46;
|
||||||
|
|
||||||
|
expblur.updatedenlc(highres, nres, highres46, nres46, Lhighres, Lnres, Lhighres46, Lnres46);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Locallab::logencodChanged(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const bool autocomput, const bool autocie, const float jz1)
|
void Locallab::logencodChanged(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const bool autocomput, const bool autocie, const float jz1)
|
||||||
{
|
{
|
||||||
// Update Locallab Log Encoding and Ciecam accordingly
|
// Update Locallab Log Encoding and Ciecam accordingly
|
||||||
|
@ -123,6 +123,9 @@ private:
|
|||||||
// Locallab tools mask background management data
|
// Locallab tools mask background management data
|
||||||
std::vector<locallabRetiMinMax> retiMinMax;
|
std::vector<locallabRetiMinMax> retiMinMax;
|
||||||
|
|
||||||
|
// Locallab tools mask background management data
|
||||||
|
std::vector<locallabDenoiseLC> denoiselc;
|
||||||
|
|
||||||
// Locallab tools mask background management data
|
// Locallab tools mask background management data
|
||||||
std::vector<locallabRef> maskBackRef;
|
std::vector<locallabRef> maskBackRef;
|
||||||
|
|
||||||
@ -145,6 +148,10 @@ public:
|
|||||||
// Locallab Retinex tool min/man management function
|
// Locallab Retinex tool min/man management function
|
||||||
void minmaxChanged(const std::vector<locallabRetiMinMax> &minmax, int selspot) override;
|
void minmaxChanged(const std::vector<locallabRetiMinMax> &minmax, int selspot) override;
|
||||||
|
|
||||||
|
//Locallab denoise
|
||||||
|
// Locallab Retinex tool min/man management function
|
||||||
|
void denChanged(const std::vector<locallabDenoiseLC> &denlc, int selspot) override;
|
||||||
|
|
||||||
// Locallab Log Encoding autocompute function
|
// Locallab Log Encoding autocompute function
|
||||||
void logencodChanged(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const bool autocomput, const bool autocie, const float jz1) override;
|
void logencodChanged(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const bool autocomput, const bool autocie, const float jz1) override;
|
||||||
|
|
||||||
|
@ -6477,8 +6477,17 @@ LocallabBlur::LocallabBlur():
|
|||||||
activlum(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ACTIV")))),
|
activlum(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ACTIV")))),
|
||||||
expdenoise(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI_EXP")))),
|
expdenoise(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI_EXP")))),
|
||||||
quamethod(Gtk::manage(new MyComboBoxText())),
|
quamethod(Gtk::manage(new MyComboBoxText())),
|
||||||
|
expdenoisenl(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_NLFRA")))),
|
||||||
|
expdenoiselum(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOIWAVLUM")))),
|
||||||
|
expdenoisech(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOIWAVCH")))),
|
||||||
LocalcurveEditorwavden(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVDEN"))),
|
LocalcurveEditorwavden(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVDEN"))),
|
||||||
wavshapeden(static_cast<FlatCurveEditor*>(LocalcurveEditorwavden->addCurve(CT_Flat, "", nullptr, false, false))),
|
wavshapeden(static_cast<FlatCurveEditor*>(LocalcurveEditorwavden->addCurve(CT_Flat, "", nullptr, false, false))),
|
||||||
|
// lCLabels(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_LCLABELS")))),
|
||||||
|
lCLabels(Gtk::manage(new Gtk::Label("-----------------"))),
|
||||||
|
lumLabels(Gtk::manage(new Gtk::Label("---"))),
|
||||||
|
lum46Labels(Gtk::manage(new Gtk::Label("---"))),
|
||||||
|
chroLabels(Gtk::manage(new Gtk::Label("---"))),
|
||||||
|
chro46Labels(Gtk::manage(new Gtk::Label("---"))),
|
||||||
expdenoise1(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI1_EXP")))),
|
expdenoise1(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI1_EXP")))),
|
||||||
maskusable(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
|
maskusable(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
|
||||||
maskunusable(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
|
maskunusable(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
|
||||||
@ -6514,7 +6523,7 @@ LocallabBlur::LocallabBlur():
|
|||||||
decayd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))),
|
decayd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))),
|
||||||
invmaskd(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVMASK")))),
|
invmaskd(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVMASK")))),
|
||||||
invmask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVMASK")))),
|
invmask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVMASK")))),
|
||||||
nlFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_NLFRA")))),
|
prevFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LCLABELS")))),
|
||||||
nlstr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NLLUM"), 0, 100, 1, 0))),
|
nlstr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NLLUM"), 0, 100, 1, 0))),
|
||||||
nldet(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NLDET"), 0, 100, 1, 50))),
|
nldet(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NLDET"), 0, 100, 1, 50))),
|
||||||
nlpat(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NLPAT"), 1, 5, 1, 2))),
|
nlpat(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NLPAT"), 1, 5, 1, 2))),
|
||||||
@ -6640,12 +6649,23 @@ LocallabBlur::LocallabBlur():
|
|||||||
Gtk::Label* const quaLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_DENQUA") + ":"));
|
Gtk::Label* const quaLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_DENQUA") + ":"));
|
||||||
quaHBox->pack_start(*quaLabel, Gtk::PACK_SHRINK, 4);
|
quaHBox->pack_start(*quaLabel, Gtk::PACK_SHRINK, 4);
|
||||||
quaHBox->pack_start(*quamethod);
|
quaHBox->pack_start(*quamethod);
|
||||||
|
setExpandAlignProperties(expdenoisenl, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
|
||||||
|
setExpandAlignProperties(expdenoiselum, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
|
||||||
|
setExpandAlignProperties(expdenoisech, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
|
||||||
|
|
||||||
LocalcurveEditorwavden->setCurveListener(this);
|
LocalcurveEditorwavden->setCurveListener(this);
|
||||||
|
|
||||||
wavshapeden->setIdentityValue(0.);
|
wavshapeden->setIdentityValue(0.);
|
||||||
wavshapeden->setResetCurve(FlatCurveType(defSpot.locwavcurveden.at(0)), defSpot.locwavcurveden);
|
wavshapeden->setResetCurve(FlatCurveType(defSpot.locwavcurveden.at(0)), defSpot.locwavcurveden);
|
||||||
|
|
||||||
|
setExpandAlignProperties(lCLabels, true, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_START);
|
||||||
|
setExpandAlignProperties(lumLabels, true, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_START);
|
||||||
|
setExpandAlignProperties(lum46Labels, true, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_START);
|
||||||
|
|
||||||
|
setExpandAlignProperties(chroLabels, true, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_START);
|
||||||
|
setExpandAlignProperties(chro46Labels, true, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_START);
|
||||||
|
|
||||||
|
|
||||||
LocalcurveEditorwavden->curveListComplete();
|
LocalcurveEditorwavden->curveListComplete();
|
||||||
setExpandAlignProperties(expdenoise1, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
|
setExpandAlignProperties(expdenoise1, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
|
||||||
|
|
||||||
@ -6701,7 +6721,7 @@ LocallabBlur::LocallabBlur():
|
|||||||
decayd->setAdjusterListener(this);
|
decayd->setAdjusterListener(this);
|
||||||
|
|
||||||
bilateral->setAdjusterListener(this);
|
bilateral->setAdjusterListener(this);
|
||||||
nlFrame->set_label_align(0.025, 0.5);
|
prevFrame->set_label_align(0.025, 0.5);
|
||||||
|
|
||||||
nlstr->setAdjusterListener(this);
|
nlstr->setAdjusterListener(this);
|
||||||
nldet->setAdjusterListener(this);
|
nldet->setAdjusterListener(this);
|
||||||
@ -6838,30 +6858,16 @@ LocallabBlur::LocallabBlur():
|
|||||||
Gtk::Frame* const wavFrame = Gtk::manage(new Gtk::Frame());
|
Gtk::Frame* const wavFrame = Gtk::manage(new Gtk::Frame());
|
||||||
ToolParamBlock* const wavBox = Gtk::manage(new ToolParamBlock());
|
ToolParamBlock* const wavBox = Gtk::manage(new ToolParamBlock());
|
||||||
wavBox->pack_start(*quaHBox);
|
wavBox->pack_start(*quaHBox);
|
||||||
wavBox->pack_start(*LocalcurveEditorwavden, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
|
wavBox->pack_start(*sensiden);
|
||||||
// wavBox->pack_start(*noiselumf0);
|
wavBox->pack_start(*reparden);
|
||||||
// wavBox->pack_start(*noiselumf);
|
ToolParamBlock* const prevBox = Gtk::manage(new ToolParamBlock());
|
||||||
// wavBox->pack_start(*noiselumf2);
|
prevBox->pack_start(*lumLabels);
|
||||||
// wavBox->pack_start(*noiselumc);//unused here, but used for normalize_mean_dt
|
prevBox->pack_start(*lum46Labels);
|
||||||
wavBox->pack_start(*noiselumdetail);
|
prevBox->pack_start(*lCLabels);
|
||||||
wavBox->pack_start(*noiselequal);
|
prevBox->pack_start(*chroLabels);
|
||||||
wavBox->pack_start(*noisegam);
|
prevBox->pack_start(*chro46Labels);
|
||||||
wavBox->pack_start(*LocalcurveEditorwavhue, Gtk::PACK_SHRINK, 4);
|
prevFrame->add(*prevBox);
|
||||||
ToolParamBlock* const wavBox1 = Gtk::manage(new ToolParamBlock());
|
wavBox->pack_start(*prevFrame);
|
||||||
wavBox1->pack_start(*maskusable, Gtk::PACK_SHRINK, 0);
|
|
||||||
wavBox1->pack_start(*maskunusable, Gtk::PACK_SHRINK, 0);
|
|
||||||
wavBox1->pack_start(*lnoiselow, Gtk::PACK_SHRINK, 0);
|
|
||||||
wavBox1->pack_start(*levelthrlow, Gtk::PACK_SHRINK, 0);
|
|
||||||
wavBox1->pack_start(*levelthr, Gtk::PACK_SHRINK, 0);
|
|
||||||
expdenoise1->add(*wavBox1, false);
|
|
||||||
wavBox->pack_start(*expdenoise1);
|
|
||||||
ToolParamBlock* const detailBox = Gtk::manage(new ToolParamBlock());
|
|
||||||
detailBox->pack_start(*detailthr);
|
|
||||||
detailBox->pack_start(*usemask, Gtk::PACK_SHRINK, 0);
|
|
||||||
detailFrame->add(*detailBox);
|
|
||||||
wavBox->pack_start(*detailFrame);
|
|
||||||
denoisebox->pack_start(*sensiden);
|
|
||||||
denoisebox->pack_start(*reparden);
|
|
||||||
|
|
||||||
ToolParamBlock* const nlbox = Gtk::manage(new ToolParamBlock());
|
ToolParamBlock* const nlbox = Gtk::manage(new ToolParamBlock());
|
||||||
nlbox->pack_start(*nlstr);
|
nlbox->pack_start(*nlstr);
|
||||||
@ -6869,13 +6875,47 @@ LocallabBlur::LocallabBlur():
|
|||||||
nlbox->pack_start(*nlgam);
|
nlbox->pack_start(*nlgam);
|
||||||
nlbox->pack_start(*nlpat);
|
nlbox->pack_start(*nlpat);
|
||||||
nlbox->pack_start(*nlrad);
|
nlbox->pack_start(*nlrad);
|
||||||
nlFrame->add(*nlbox);
|
expdenoisenl->add(*nlbox);
|
||||||
wavBox->pack_start(*nlFrame);
|
|
||||||
|
wavBox->pack_start(*expdenoisenl);
|
||||||
|
|
||||||
|
|
||||||
|
// wavBox->pack_start(*noiselumf0);
|
||||||
|
// wavBox->pack_start(*noiselumf);
|
||||||
|
// wavBox->pack_start(*noiselumf2);
|
||||||
|
// wavBox->pack_start(*noiselumc);//unused here, but used for normalize_mean_dt
|
||||||
|
ToolParamBlock* const wchBox = Gtk::manage(new ToolParamBlock());
|
||||||
|
|
||||||
|
wchBox->pack_start(*LocalcurveEditorwavden, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
|
||||||
|
wchBox->pack_start(*noiselumdetail);
|
||||||
|
wchBox->pack_start(*noiselequal);
|
||||||
|
wchBox->pack_start(*noisegam);
|
||||||
|
wchBox->pack_start(*LocalcurveEditorwavhue, Gtk::PACK_SHRINK, 4);
|
||||||
|
ToolParamBlock* const wavBox1 = Gtk::manage(new ToolParamBlock());
|
||||||
|
wavBox1->pack_start(*maskusable, Gtk::PACK_SHRINK, 0);
|
||||||
|
wavBox1->pack_start(*maskunusable, Gtk::PACK_SHRINK, 0);
|
||||||
|
wavBox1->pack_start(*lnoiselow, Gtk::PACK_SHRINK, 0);
|
||||||
|
wavBox1->pack_start(*levelthrlow, Gtk::PACK_SHRINK, 0);
|
||||||
|
wavBox1->pack_start(*levelthr, Gtk::PACK_SHRINK, 0);
|
||||||
|
expdenoise1->add(*wavBox1, false);
|
||||||
|
wchBox->pack_start(*expdenoise1);
|
||||||
|
expdenoiselum->add(*wchBox);
|
||||||
|
wavBox->pack_start(*expdenoiselum);
|
||||||
|
ToolParamBlock* const chBox = Gtk::manage(new ToolParamBlock());
|
||||||
|
|
||||||
|
chBox->pack_start(*noisechrof);
|
||||||
|
chBox->pack_start(*noisechroc);
|
||||||
|
chBox->pack_start(*noisechrodetail);
|
||||||
|
chBox->pack_start(*adjblur);
|
||||||
|
expdenoisech->add(*chBox);
|
||||||
|
wavBox->pack_start(*expdenoisech);
|
||||||
|
|
||||||
|
ToolParamBlock* const detailBox = Gtk::manage(new ToolParamBlock());
|
||||||
|
detailBox->pack_start(*detailthr);
|
||||||
|
detailBox->pack_start(*usemask, Gtk::PACK_SHRINK, 0);
|
||||||
|
detailFrame->add(*detailBox);
|
||||||
|
wavBox->pack_start(*detailFrame);
|
||||||
|
|
||||||
wavBox->pack_start(*noisechrof);
|
|
||||||
wavBox->pack_start(*noisechroc);
|
|
||||||
wavBox->pack_start(*noisechrodetail);
|
|
||||||
wavBox->pack_start(*adjblur);
|
|
||||||
wavFrame->add(*wavBox);
|
wavFrame->add(*wavBox);
|
||||||
denoisebox->pack_start(*wavFrame);
|
denoisebox->pack_start(*wavFrame);
|
||||||
|
|
||||||
@ -6978,6 +7018,7 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips)
|
|||||||
expdenoise1->set_tooltip_markup(M("TP_LOCALLAB_MASKLC_TOOLTIP"));
|
expdenoise1->set_tooltip_markup(M("TP_LOCALLAB_MASKLC_TOOLTIP"));
|
||||||
expdenoise2->set_tooltip_markup(M("TP_LOCALLAB_MASKGF_TOOLTIP"));
|
expdenoise2->set_tooltip_markup(M("TP_LOCALLAB_MASKGF_TOOLTIP"));
|
||||||
expdenoise3->set_tooltip_markup(M("TP_LOCALLAB_MASKDE_TOOLTIP"));
|
expdenoise3->set_tooltip_markup(M("TP_LOCALLAB_MASKDE_TOOLTIP"));
|
||||||
|
expdenoisenl->set_tooltip_markup(M("TP_LOCALLAB_NLFRAME_TOOLTIP"));
|
||||||
invmask->set_tooltip_text(M("TP_LOCALLAB_MASKDEINV_TOOLTIP"));
|
invmask->set_tooltip_text(M("TP_LOCALLAB_MASKDEINV_TOOLTIP"));
|
||||||
invmaskd->set_tooltip_text(M("TP_LOCALLAB_MASKDEINV_TOOLTIP"));
|
invmaskd->set_tooltip_text(M("TP_LOCALLAB_MASKDEINV_TOOLTIP"));
|
||||||
LocalcurveEditorwavden->setTooltip(M("TP_LOCALLAB_WASDEN_TOOLTIP"));
|
LocalcurveEditorwavden->setTooltip(M("TP_LOCALLAB_WASDEN_TOOLTIP"));
|
||||||
@ -6990,7 +7031,7 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips)
|
|||||||
detailthr->set_tooltip_text(M("TP_LOCALLAB_DENOITHR_TOOLTIP"));
|
detailthr->set_tooltip_text(M("TP_LOCALLAB_DENOITHR_TOOLTIP"));
|
||||||
adjblur->set_tooltip_text(M("TP_LOCALLAB_DENOIEQUALCHRO_TOOLTIP"));
|
adjblur->set_tooltip_text(M("TP_LOCALLAB_DENOIEQUALCHRO_TOOLTIP"));
|
||||||
bilateral->set_tooltip_text(M("TP_LOCALLAB_DENOIBILAT_TOOLTIP"));
|
bilateral->set_tooltip_text(M("TP_LOCALLAB_DENOIBILAT_TOOLTIP"));
|
||||||
nlFrame->set_tooltip_text(M("TP_LOCALLAB_NLFRAME_TOOLTIP"));
|
prevFrame->set_tooltip_text(M("TP_LOCALLAB_LCLABELS_TOOLTIP"));
|
||||||
nlstr->set_tooltip_text(M("TP_LOCALLAB_NLDENOISE_TOOLTIP"));
|
nlstr->set_tooltip_text(M("TP_LOCALLAB_NLDENOISE_TOOLTIP"));
|
||||||
nldet->set_tooltip_text(M("TP_LOCALLAB_NLDENOISE_TOOLTIP"));
|
nldet->set_tooltip_text(M("TP_LOCALLAB_NLDENOISE_TOOLTIP"));
|
||||||
nlpat->set_tooltip_text(M("TP_LOCALLAB_NLDENOISENLPAT_TOOLTIP"));
|
nlpat->set_tooltip_text(M("TP_LOCALLAB_NLDENOISENLPAT_TOOLTIP"));
|
||||||
@ -7025,6 +7066,7 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips)
|
|||||||
higthresd->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRESD_TOOLTIP"));
|
higthresd->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRESD_TOOLTIP"));
|
||||||
higthres->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRES_TOOLTIP"));
|
higthres->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRES_TOOLTIP"));
|
||||||
decayd->set_tooltip_text(M("TP_LOCALLAB_MASKDECAY_TOOLTIP"));
|
decayd->set_tooltip_text(M("TP_LOCALLAB_MASKDECAY_TOOLTIP"));
|
||||||
|
lCLabels->set_tooltip_text(M("TP_LOCALLAB_LCLABELS_TOOLTIP"));
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
expblnoise->set_tooltip_markup("");
|
expblnoise->set_tooltip_markup("");
|
||||||
@ -7057,7 +7099,7 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips)
|
|||||||
detailthr->set_tooltip_text("");
|
detailthr->set_tooltip_text("");
|
||||||
adjblur->set_tooltip_text("");
|
adjblur->set_tooltip_text("");
|
||||||
bilateral->set_tooltip_text("");
|
bilateral->set_tooltip_text("");
|
||||||
nlFrame->set_tooltip_text("");
|
prevFrame->set_tooltip_text("");
|
||||||
nlstr->set_tooltip_text("");
|
nlstr->set_tooltip_text("");
|
||||||
nldet->set_tooltip_text("");
|
nldet->set_tooltip_text("");
|
||||||
nlpat->set_tooltip_text("");
|
nlpat->set_tooltip_text("");
|
||||||
@ -7094,6 +7136,8 @@ void LocallabBlur::updateAdviceTooltips(const bool showTooltips)
|
|||||||
higthres->set_tooltip_text("");
|
higthres->set_tooltip_text("");
|
||||||
// midthresd->set_tooltip_text("");
|
// midthresd->set_tooltip_text("");
|
||||||
decayd->set_tooltip_text("");
|
decayd->set_tooltip_text("");
|
||||||
|
lCLabels->set_tooltip_text("");
|
||||||
|
expdenoisenl->set_tooltip_markup("");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -7138,7 +7182,36 @@ void LocallabBlur::neutral_pressed ()
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
void LocallabBlur::updatedenlc(const double highres, const double nres, const double highres46, const double nres46, const double Lhighres, const double Lnres, const double Lhighres46, const double Lnres46)
|
||||||
|
{
|
||||||
|
idle_register.add(
|
||||||
|
[this, highres, nres, highres46, nres46, Lhighres, Lnres, Lhighres46, Lnres46]() -> bool {
|
||||||
|
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
|
||||||
|
|
||||||
|
lumLabels->set_text(
|
||||||
|
Glib::ustring::compose(M("TP_LOCALLAB_LUMLABEL"),
|
||||||
|
Glib::ustring::format(std::fixed, std::setprecision(0), Lnres),
|
||||||
|
Glib::ustring::format(std::fixed, std::setprecision(0), Lhighres))
|
||||||
|
);
|
||||||
|
lum46Labels->set_text(
|
||||||
|
Glib::ustring::compose(M("TP_LOCALLAB_LUM46LABEL"),
|
||||||
|
Glib::ustring::format(std::fixed, std::setprecision(0), Lnres46 ),
|
||||||
|
Glib::ustring::format(std::fixed, std::setprecision(0), Lhighres46))
|
||||||
|
);
|
||||||
|
chroLabels->set_text(
|
||||||
|
Glib::ustring::compose(M("TP_LOCALLAB_CHROLABEL"),
|
||||||
|
Glib::ustring::format(std::fixed, std::setprecision(0), nres),
|
||||||
|
Glib::ustring::format(std::fixed, std::setprecision(0), highres))
|
||||||
|
);
|
||||||
|
chro46Labels->set_text(
|
||||||
|
Glib::ustring::compose(M("TP_LOCALLAB_CHRO46LABEL"),
|
||||||
|
Glib::ustring::format(std::fixed, std::setprecision(0), nres46),
|
||||||
|
Glib::ustring::format(std::fixed, std::setprecision(0), highres46))
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
void LocallabBlur::setDefaultExpanderVisibility()
|
void LocallabBlur::setDefaultExpanderVisibility()
|
||||||
{
|
{
|
||||||
expblnoise->set_expanded(false);
|
expblnoise->set_expanded(false);
|
||||||
@ -7147,6 +7220,9 @@ void LocallabBlur::setDefaultExpanderVisibility()
|
|||||||
expdenoise2->set_expanded(false);
|
expdenoise2->set_expanded(false);
|
||||||
expdenoise3->set_expanded(false);
|
expdenoise3->set_expanded(false);
|
||||||
expmaskbl->set_expanded(false);
|
expmaskbl->set_expanded(false);
|
||||||
|
expdenoisenl->set_expanded(false);
|
||||||
|
expdenoiselum->set_expanded(false);
|
||||||
|
expdenoisech->set_expanded(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocallabBlur::disableListener()
|
void LocallabBlur::disableListener()
|
||||||
|
@ -707,8 +707,17 @@ private:
|
|||||||
Gtk::CheckButton* const activlum;
|
Gtk::CheckButton* const activlum;
|
||||||
MyExpander* const expdenoise;
|
MyExpander* const expdenoise;
|
||||||
MyComboBoxText* const quamethod;
|
MyComboBoxText* const quamethod;
|
||||||
|
MyExpander* const expdenoisenl;
|
||||||
|
MyExpander* const expdenoiselum;
|
||||||
|
MyExpander* const expdenoisech;
|
||||||
CurveEditorGroup* const LocalcurveEditorwavden;
|
CurveEditorGroup* const LocalcurveEditorwavden;
|
||||||
FlatCurveEditor* const wavshapeden;
|
FlatCurveEditor* const wavshapeden;
|
||||||
|
Gtk::Label* const lCLabels;
|
||||||
|
Gtk::Label* const lumLabels;
|
||||||
|
Gtk::Label* const lum46Labels;
|
||||||
|
Gtk::Label* const chroLabels;
|
||||||
|
Gtk::Label* const chro46Labels;
|
||||||
|
|
||||||
MyExpander* const expdenoise1;
|
MyExpander* const expdenoise1;
|
||||||
Gtk::Label* const maskusable;
|
Gtk::Label* const maskusable;
|
||||||
Gtk::Label* const maskunusable;
|
Gtk::Label* const maskunusable;
|
||||||
@ -746,7 +755,7 @@ private:
|
|||||||
|
|
||||||
Gtk::CheckButton* const invmaskd;
|
Gtk::CheckButton* const invmaskd;
|
||||||
Gtk::CheckButton* const invmask;
|
Gtk::CheckButton* const invmask;
|
||||||
Gtk::Frame* const nlFrame;
|
Gtk::Frame* const prevFrame;
|
||||||
Adjuster* const nlstr;
|
Adjuster* const nlstr;
|
||||||
Adjuster* const nldet;
|
Adjuster* const nldet;
|
||||||
Adjuster* const nlpat;
|
Adjuster* const nlpat;
|
||||||
@ -788,6 +797,8 @@ private:
|
|||||||
public:
|
public:
|
||||||
LocallabBlur();
|
LocallabBlur();
|
||||||
~LocallabBlur();
|
~LocallabBlur();
|
||||||
|
void updatedenlc(const double highres, const double nres, const double highres46, const double nres46, const double Lhighres, const double Lnres, const double Lhighres46, const double Lnres46);
|
||||||
|
|
||||||
|
|
||||||
bool isMaskViewActive() override;
|
bool isMaskViewActive() override;
|
||||||
void resetMaskView() override;
|
void resetMaskView() override;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user