Speedup for microcontrast, fixes #3867
This commit is contained in:
@@ -23,17 +23,15 @@
|
|||||||
#include "rt_math.h"
|
#include "rt_math.h"
|
||||||
#include "sleef.c"
|
#include "sleef.c"
|
||||||
#include "opthelper.h"
|
#include "opthelper.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
#define BENCHMARK
|
|
||||||
#include "StopWatch.h"
|
|
||||||
namespace rtengine
|
namespace rtengine
|
||||||
{
|
{
|
||||||
|
|
||||||
#undef ABS
|
#undef ABS
|
||||||
|
|
||||||
#define ABS(a) ((a)<0?-(a):(a))
|
#define ABS(a) ((a)<0?-(a):(a))
|
||||||
#define CLIREF(x) LIM(x,-200000.0f,200000.0f) // avoid overflow : do not act directly on image[] or pix[]
|
|
||||||
|
|
||||||
|
|
||||||
extern const Settings* settings;
|
extern const Settings* settings;
|
||||||
SSEFUNCTION void ImProcFunctions::dcdamping (float** aI, float** aO, float damping, int W, int H)
|
SSEFUNCTION void ImProcFunctions::dcdamping (float** aI, float** aO, float damping, int W, int H)
|
||||||
@@ -569,13 +567,12 @@ void ImProcFunctions::MLmicrocontrast(float** luminance, int W, int H)
|
|||||||
if (!params->sharpenMicro.enabled) {
|
if (!params->sharpenMicro.enabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BENCHFUN
|
|
||||||
|
|
||||||
const int k = params->sharpenMicro.matrix ? 1 : 2;
|
const int k = params->sharpenMicro.matrix ? 1 : 2;
|
||||||
|
|
||||||
// k=2 matrix 5x5 k=1 matrix 3x3
|
// k=2 matrix 5x5 k=1 matrix 3x3
|
||||||
const int width = W, height = H;
|
const int width = W, height = H;
|
||||||
const float uniform = params->sharpenMicro.uniformity;//between 0 to 100
|
const float uniform = params->sharpenMicro.uniformity; //between 0 to 100
|
||||||
const int unif = (int)(uniform / 10.0f); //put unif between 0 to 10
|
const int unif = (int)(uniform / 10.0f); //put unif between 0 to 10
|
||||||
float amount = params->sharpenMicro.amount / 1500.0f; //amount 2000.0 quasi no artefacts ==> 1500 = maximum, after artefacts
|
float amount = params->sharpenMicro.amount / 1500.0f; //amount 2000.0 quasi no artefacts ==> 1500 = maximum, after artefacts
|
||||||
|
|
||||||
@@ -629,7 +626,7 @@ BENCHFUN
|
|||||||
|
|
||||||
for(int j = 0; j < height; j++)
|
for(int j = 0; j < height; j++)
|
||||||
for(int i = 0, offset = j * width + i; i < width; i++, offset++) {
|
for(int i = 0, offset = j * width + i; i < width; i++, offset++) {
|
||||||
LM[offset] = luminance[j][i] / 327.68f; // adjust to 0.100 and to RT variables
|
LM[offset] = luminance[j][i] / 327.68f; // adjust to [0;100] and to RT variables
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _OPENMP
|
#ifdef _OPENMP
|
||||||
@@ -663,7 +660,7 @@ BENCHFUN
|
|||||||
LM[offset - 2 * width - 1] + LM[offset - 2 * width + 1] + LM[offset - width + 2] + LM[offset - width - 2]);
|
LM[offset - 2 * width - 1] + LM[offset - 2 * width + 1] + LM[offset - width + 2] + LM[offset - width - 2]);
|
||||||
|
|
||||||
temp2 -= sqrt2 * (LM[offset + 2 * width - 2] + LM[offset + 2 * width + 2] + LM[offset - 2 * width - 2] + LM[offset - 2 * width + 2]);
|
temp2 -= sqrt2 * (LM[offset + 2 * width - 2] + LM[offset + 2 * width + 2] + LM[offset - 2 * width - 2] + LM[offset - 2 * width + 2]);
|
||||||
temp2 += 18.601126159f * v ;
|
temp2 += 18.601126159f * v ; // 18.601126159 = 4 + 4 * sqrt(2) + 8 * sqrt(1.25)
|
||||||
temp2 *= 2.f * s;
|
temp2 *= 2.f * s;
|
||||||
temp += temp2;
|
temp += temp2;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user