clean code and test for FFTW
This commit is contained in:
parent
10d2c6a2a6
commit
554d43eef9
@ -2262,7 +2262,7 @@ TP_LOCALLAB_FATLEVEL;Detail levels
|
||||
TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask
|
||||
TP_LOCALLAB_FEATH_TOOLTIP;Gradient width in percent of the Spot diagonal\n..
|
||||
TP_LOCALLAB_FEATVALUE;Feather gradient
|
||||
TP_LOCALLAB_FFTCOL_MASK;FFTW
|
||||
TP_LOCALLAB_FFTCOL_MASK;FFTW (to test ?)
|
||||
TP_LOCALLAB_FFTW2;Use Fast Fourier Transform (TIF, JPG,..)
|
||||
TP_LOCALLAB_FFTW;Use Fast Fourier Transform
|
||||
TP_LOCALLAB_GAM;Gamma
|
||||
|
@ -3450,6 +3450,10 @@ void ImProcFunctions::maskcalccol(int call, bool invmask, bool pde, int bfw, int
|
||||
}
|
||||
|
||||
JaggedArray<float> blendstru(bfw, bfh);
|
||||
|
||||
if (lp.blurcolmask >= 0.25f && strumask == 0.f) {
|
||||
strumask = 0.1f; // to enable a small mask make FFT good ...why ??
|
||||
}
|
||||
|
||||
if (strumask > 0.f) {
|
||||
float delstrumask = 4.1f - strumask;//4.1 = 2 * max slider strumask + 0.1
|
||||
@ -3473,8 +3477,11 @@ void ImProcFunctions::maskcalccol(int call, bool invmask, bool pde, int bfw, int
|
||||
buildBlendMask(bufcolorig->L, blendblur, bfw, bfh, contra, 1.f);
|
||||
|
||||
|
||||
float radblur = 0.002f * rad;//empirical value
|
||||
float radblur = 0.25f + 0.002f * fabs(rad);//empirical value
|
||||
float rm = radblur / sk;
|
||||
if(lp.fftColorMask) {
|
||||
if(rm < 1.f) rm = 1.f;
|
||||
}
|
||||
|
||||
if (rm > 0) {
|
||||
float **mb = blendblur;
|
||||
@ -3482,7 +3489,8 @@ void ImProcFunctions::maskcalccol(int call, bool invmask, bool pde, int bfw, int
|
||||
}
|
||||
|
||||
if (lp.blurcolmask >= 0.25f) {
|
||||
if (!lp.fftColorMask || (lp.fftColorMask && call != 2)) {
|
||||
if (!lp.fftColorMask) { // || (lp.fftColorMask && call != 2)) {
|
||||
printf("call=%i\n", call);
|
||||
gaussianBlur(bufcolorig->L, blur, bfw, bfh, lp.blurcolmask / sk);
|
||||
} else {
|
||||
ImProcFunctions::fftw_convol_blur2(bufcolorig->L, blur, bfw, bfh, lp.blurcolmask / sk, 0, 0);
|
||||
@ -3554,11 +3562,9 @@ void ImProcFunctions::maskcalccol(int call, bool invmask, bool pde, int bfw, int
|
||||
if (lp.contcolmask > 0.f) {
|
||||
|
||||
if (lp.blurcolmask >= 0.25f) {
|
||||
// printf("OK 3\n");
|
||||
|
||||
float prov = intp(blendstru[ir][jr], bufcolorig->L[ir][jr], max(blur[ir][jr], 0.0f));
|
||||
kmasblur = bufcolorig->L[ir][jr] - prov ;
|
||||
// printf("OK 4\n");
|
||||
|
||||
}
|
||||
}
|
||||
@ -5989,7 +5995,8 @@ void ImProcFunctions::fftw_convol_blur(float * input, float * output, int bfw, i
|
||||
out = (float*) fftwf_malloc(sizeof(float) * (bfw * bfh));//allocate real datas for FFT
|
||||
|
||||
if (fftkern == 1) { //allocate memory FFT if kernel fft = 1
|
||||
kern = new float[bfw * bfh];
|
||||
// kern = new float[bfw * bfh];
|
||||
kern = (float*) fftwf_malloc(sizeof(float) * (bfw * bfh));//allocate real datas for FFT
|
||||
outkern = (float*) fftwf_malloc(sizeof(float) * (bfw * bfh));//allocate real datas for FFT
|
||||
}
|
||||
|
||||
@ -6050,7 +6057,9 @@ void ImProcFunctions::fftw_convol_blur(float * input, float * output, int bfw, i
|
||||
}
|
||||
|
||||
fftwf_free(outkern);
|
||||
delete [] kern;
|
||||
fftwf_free(kern);
|
||||
|
||||
// delete [] kern;
|
||||
|
||||
} else if (fftkern == 0) {//whithout FFT kernel
|
||||
if (algo == 0) {
|
||||
@ -7984,23 +7993,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask,
|
||||
float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax)
|
||||
{
|
||||
/* comment on processus deltaE
|
||||
* the algo uses 3 different ways to manage deltaE according to the type of intervention
|
||||
* if we call "applyproc" : the datas produced upstream in bfw, bfh coordinate by the function producing something curves, retinex, exposure, etc.
|
||||
|
||||
* direct : in this case we use directly the datas produced upstream by "applyproc", with only a regulation produce for deltaE by reducdE
|
||||
* direct : we found in this case "applyproc" modify data with low amplitude : BlurNoise, CBDL, Denoise, Sharp, TM
|
||||
|
||||
* with first use of "buflight" on which is apply "applyproc", in this case we apply realstrdE = reducdE * buflight with a function of type 328.f * realstrdE
|
||||
* in this case we found "applyproc" which result in direct use on Luminance : Exposure, Color and Light, Shadows highlight, SoftLight, Local contrast
|
||||
|
||||
* with second use of "buflight" on which is apply "applyproc", in this case we apply realstrdE = reducdE * buflight with a function of type fli = (100.f + realstrdE) / 100.f;
|
||||
* in this case we found "applyproc" which result in large variations of L : Retinex
|
||||
|
||||
* if you change you must test before
|
||||
|
||||
*/
|
||||
|
||||
//general call of others functions : important return hueref, chromaref, lumaref
|
||||
if (params->locallab.enabled) {
|
||||
BENCHFUN
|
||||
@ -8444,8 +8436,8 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
#endif
|
||||
{
|
||||
gaussianBlur(bufmaskblurbl->L, bufmaskorigbl->L, GW, GH, radiusb);
|
||||
gaussianBlur(bufmaskblurbl->a, bufmaskorigbl->a, GW, GH, 1.f + (0.05f * lp.radmabl) / sk);
|
||||
gaussianBlur(bufmaskblurbl->b, bufmaskorigbl->b, GW, GH, 1.f + (0.05f * lp.radmabl) / sk);
|
||||
gaussianBlur(bufmaskblurbl->a, bufmaskorigbl->a, GW, GH, 1.f + (0.005f * lp.radmabl) / sk);
|
||||
gaussianBlur(bufmaskblurbl->b, bufmaskorigbl->b, GW, GH, 1.f + (0.005f * lp.radmabl) / sk);
|
||||
}
|
||||
|
||||
if (lp.showmaskblmet == 0 || lp.showmaskblmet == 1 || lp.showmaskblmet == 2 || lp.showmaskblmet == 4 || lp.enablMask) {
|
||||
@ -8477,11 +8469,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
int isogr = params->locallab.spots.at(sp).isogr;
|
||||
int strengr = params->locallab.spots.at(sp).strengr;
|
||||
int scalegr = params->locallab.spots.at(sp).scalegr;
|
||||
|
||||
//here no optimization FFTW, complex to do ! only cost time
|
||||
|
||||
if (bfw >= mSP && bfh >= mSP) {
|
||||
|
||||
// const int GW = transformed->W;
|
||||
//const int GH = transformed->H;
|
||||
JaggedArray<float> bufchroi(GW, GH);
|
||||
std::unique_ptr<LabImage> bufgbi(new LabImage(GW, GH));
|
||||
JaggedArray<float> bufchro(bfw, bfh);
|
||||
@ -9891,7 +9882,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
int xend = std::min(static_cast<int>(lp.xc + lp.lx) - cx, original->W);
|
||||
int bfh = yend - ystart;
|
||||
int bfw = xend - xstart;
|
||||
//vriable for fast FFTW
|
||||
//variable for fast FFTW
|
||||
int bfhr = bfh;
|
||||
int bfwr = bfw;
|
||||
bool reduH = false;
|
||||
@ -9903,8 +9894,8 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, reduH, reduW, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy);
|
||||
}
|
||||
|
||||
std::unique_ptr<LabImage> bufexporig(new LabImage(bfw, bfh)); //buffer for data in zone limit
|
||||
std::unique_ptr<LabImage> bufexpfin(new LabImage(bfw, bfh)); //buffer for data in zone limit
|
||||
std::unique_ptr<LabImage> bufexporig(new LabImage(bfw, bfh));
|
||||
std::unique_ptr<LabImage> bufexpfin(new LabImage(bfw, bfh));
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for schedule(dynamic,16)
|
||||
@ -10322,7 +10313,8 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
//use by old function transit_shapedetect keep in case of
|
||||
float minL = tmp1->L[0][0] - bufgb->L[0][0];
|
||||
float maxL = minL;
|
||||
float minC = sqrt(SQR(tmp1->a[0][0]) + SQR(tmp1->b[0][0])) - sqrt(SQR(bufgb->a[0][0]) + SQR(bufgb->b[0][0]));
|
||||
@ -10365,7 +10357,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
bufchro[y][x] /= coefC;
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
transit_shapedetect2(call, 10, bufgb.get(), tmp1.get(), nullptr, hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk);
|
||||
// transit_shapedetect(10, tmp1.get(), nullptr, bufchro, false, hueref, chromaref, lumaref, sobelref, 0.f, nullptr, lp, original, transformed, cx, cy, sk);
|
||||
@ -10442,7 +10434,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
|
||||
// }
|
||||
//&& lp.retiena
|
||||
|
||||
// if (lp.dehaze > 0 && lp.str < 0.2f && lp.retiena) {
|
||||
if (lp.dehaze > 0 && lp.retiena) {
|
||||
int ystart = std::max(static_cast<int>(lp.yc - lp.lyT) - cy, 0);
|
||||
int yend = std::min(static_cast<int>(lp.yc + lp.ly) - cy, original->H);
|
||||
|
@ -1274,8 +1274,8 @@ void ImProcFunctions::MSRLocal(int call, int sp, bool fftw, int lum, float** red
|
||||
kg = 1.f;
|
||||
kr = sigm;
|
||||
}
|
||||
|
||||
if (!fftw || (fftw && call != 2)) {
|
||||
printf("call=%i\n", call);
|
||||
if (!fftw) { // || (fftw && call != 2)) {
|
||||
if (scale == scal - 1) {
|
||||
gaussianBlur(src, out, W_L, H_L, kg * RetinexScales[scale], true);
|
||||
} else { // reuse result of last iteration
|
||||
|
Loading…
x
Reference in New Issue
Block a user