Change blend between sharpened, original and blurred, #5075

This commit is contained in:
heckflosse
2018-12-10 14:29:23 +01:00
parent c173059085
commit 8bdec7c2de

View File

@@ -180,11 +180,21 @@ BENCHFUN
buildBlendMask(luminance, blend, W, H, contrast, sharpenParam.deconvamount / 100.f); buildBlendMask(luminance, blend, W, H, contrast, sharpenParam.deconvamount / 100.f);
JaggedArray<float> blur(W, H); JaggedArray<float> blur(W, H);
if(sharpenParam.blurradius > 0) { if (sharpenParam.blurradius >= 0.25f) {
#pragma omp parallel #ifdef _OPENMP
{ #pragma omp parallel
gaussianBlur(tmpI, blur, W, H, sharpenParam.blurradius); #endif
} {
gaussianBlur(tmpI, blur, W, H, sharpenParam.blurradius);
#ifdef _OPENMP
#pragma omp for
#endif
for (int i = 0; i < H; ++i) {
for (int j = 0; j < W; ++j) {
blur[i][j] = intp(blend[i][j], luminance[i][j], std::max(blur[i][j], 0.0f));
}
}
}
} }
const float damping = sharpenParam.deconvdamping / 5.0; const float damping = sharpenParam.deconvdamping / 5.0;
const bool needdamp = sharpenParam.deconvdamping > 0; const bool needdamp = sharpenParam.deconvdamping > 0;
@@ -216,7 +226,7 @@ BENCHFUN
} }
} }
if(sharpenParam.blurradius > 0) { if (sharpenParam.blurradius >= 0.25f) {
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp for #pragma omp for
#endif #endif
@@ -274,20 +284,31 @@ BENCHFUN
} }
} }
JaggedArray<float> blur(W, H);
if(sharpenParam.blurradius > 0) {
#pragma omp parallel
{
gaussianBlur(lab->L, blur, W, H, sharpenParam.blurradius);
}
}
// calculate contrast based blend factors to reduce sharpening in regions with low contrast // calculate contrast based blend factors to reduce sharpening in regions with low contrast
JaggedArray<float> blend(W, H); JaggedArray<float> blend(W, H);
float contrast = sharpenParam.contrast / 100.f; float contrast = sharpenParam.contrast / 100.f;
buildBlendMask(lab->L, blend, W, H, contrast); buildBlendMask(lab->L, blend, W, H, contrast);
JaggedArray<float> blur(W, H);
if (sharpenParam.blurradius >= 0.25f) {
#ifdef _OPENMP
#pragma omp parallel
#endif
{
gaussianBlur(lab->L, blur, W, H, sharpenParam.blurradius);
#ifdef _OPENMP
#pragma omp for
#endif
for (int i = 0; i < H; ++i) {
for (int j = 0; j < W; ++j) {
blur[i][j] = intp(blend[i][j], lab->L[i][j], std::max(blur[i][j], 0.0f));
}
}
}
}
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif #endif
@@ -349,16 +370,17 @@ BENCHFUN
delete [] b3; delete [] b3;
} }
if(sharpenParam.blurradius > 0) {
if (sharpenParam.blurradius >= 0.25f) {
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif #endif
for (int i = 0; i < H; ++i) { for (int i = 0; i < H; ++i) {
for (int j = 0; j < W; ++j) { for (int j = 0; j < W; ++j) {
lab->L[i][j] = intp(blend[i][j], lab->L[i][j], max(blur[i][j], 0.0f)); lab->L[i][j] = intp(blend[i][j], lab->L[i][j], max(blur[i][j], 0.0f));
}
} }
} }
}
} }