18 #ifndef PIC_TONE_MAPPING_REINHARD_TMO_HPP 19 #define PIC_TONE_MAPPING_REINHARD_TMO_HPP 21 #include "../base.hpp" 22 #include "../util/string.hpp" 23 #include "../util/math.hpp" 24 #include "../filtering/filter.hpp" 25 #include "../filtering/filter_bilateral_2ds.hpp" 26 #include "../filtering/filter_luminance.hpp" 27 #include "../filtering/filter_sigmoid_tmo.hpp" 28 #include "../tone_mapping/tone_mapping_operator.hpp" 47 float x_s = x * param[0];
49 return x_s / (x_s + param[1]);
60 float x_s = y * param[1] / (1.0f - y);
62 return x_s / param[0];
76 float LMin, LMax, LogAverage;
77 images[0]->getMaxVal(NULL, &LMax);
78 images[0]->getMinVal(NULL, &LMin);
79 images[0]->getLogMeanVal(NULL, &LogAverage);
100 float value = powf(2.0f,
phi) *
alpha / (s_max * s_max);
102 std::vector<float> param;
103 param.push_back(
alpha / LogAverage);
104 param.push_back(value);
106 float pEpsilon = 0.05f;
169 float log2f = logf(2.0f);
170 float log2Max = logf(LMax + 1e-9f) /
log2f;
171 float log2Min = logf(LMin + 1e-9f) /
log2f;
172 float log2Average = logf(logAverage + 1e-9f) /
log2f;
174 float tmp = (2.0f * log2Average - log2Min - log2Max) / (log2Max - log2Min);
176 return 0.18f * powf(4.0f, tmp);
187 float log2f = logf(2.0f);
188 float log2Max = logf(LMax + 1e-9f) /
log2f;
189 float log2Min = logf(LMin + 1e-9f) /
log2f;
191 return 1.5f * powf(2.0f, (log2Max - log2Min - 5.0f));
static float sigmoidParam(float x, std::vector< float > ¶m)
sigmoidParam
Definition: reinhard_tmo.hpp:45
Definition: filter_sigmoid_tmo.hpp:29
static Image * executeGlobal2(Image *imgIn, Image *imgOut)
executeGlobal2
Definition: reinhard_tmo.hpp:229
float phi
Definition: reinhard_tmo.hpp:133
Image * Process(ImageVec imgIn, Image *imgOut=NULL)
Process.
Definition: tone_mapping_operator.hpp:120
static float estimateAlpha(float LMin, float LMax, float logAverage)
estimateAlpha
Definition: reinhard_tmo.hpp:167
The ReinhardTMO class.
Definition: reinhard_tmo.hpp:35
~ReinhardTMO()
Definition: reinhard_tmo.hpp:155
std::vector< Image * > ImageVec
ImageVec an std::vector of pic::Image.
Definition: image_vec.hpp:29
ImageVec images
Definition: tone_mapping_operator.hpp:35
static Image * executeLocal1(Image *imgIn, Image *imgOut)
executeLocal1
Definition: reinhard_tmo.hpp:241
The ToneMappingOperator class.
Definition: tone_mapping_operator.hpp:31
virtual Image * Process(ImageVec imgIn, Image *imgOut)
Process.
Definition: filter.hpp:390
The FilterLuminance class.
Definition: filter_luminance.hpp:33
FilterBilateral2DS flt_bilateral
Definition: reinhard_tmo.hpp:135
SIGMOID_MODE sig_mode
Definition: reinhard_tmo.hpp:132
Image * ProcessAux(ImageVec imgIn, Image *imgOut)
ProcessAux.
Definition: reinhard_tmo.hpp:71
void update(SIGMOID_MODE type, float alpha, float wp, float epsilon, bool temporal)
update
Definition: filter_sigmoid_tmo.hpp:148
void update(float alpha=0.18f, float whitePoint=1e6f, float phi=8.0f, SIGMOID_MODE sig_mode=SIG_TMO)
update
Definition: reinhard_tmo.hpp:201
void update(float sigma_s, float sigma_r, int mult, SAMPLER_TYPE type)
update
Definition: filter_bilateral_2ds.hpp:232
The FilterSigmoidTMO class.
Definition: filter_sigmoid_tmo.hpp:34
void release()
release
Definition: tone_mapping_operator.hpp:68
PIC_INLINE ImageVec Double(Image *img1, Image *img2)
Double creates an std::vector which contains img1 and img2; this is for filters input.
Definition: image_vec.hpp:49
ReinhardTMO(float alpha=0.18f, float whitePoint=-1.0f, float phi=8.0f, SIGMOID_MODE sig_mode=SIG_TMO)
ReinhardTMO.
Definition: reinhard_tmo.hpp:147
PIC_INLINE float log2f(float x)
log2f logarithm in base 2 for floating point
Definition: math.hpp:375
The Image class stores an image as buffer of float.
Definition: image.hpp:60
void removeSpecials()
removeSpecials removes NaN and +/-Inf values and sets them to 0.0f.
PIC_INLINE ImageVec Single(Image *img)
Single creates an std::vector which contains img; this is for filters input.
Definition: image_vec.hpp:36
Definition: bilateral_separation.hpp:25
static Image * executeLocal2(Image *imgIn, Image *imgOut)
executeLocal2
Definition: reinhard_tmo.hpp:253
static float sigmoidInvParam(float y, std::vector< float > ¶m)
sigmoidInvParam
Definition: reinhard_tmo.hpp:58
Definition: filter_sigmoid_tmo.hpp:29
static Image * executeGlobal1(Image *imgIn, Image *imgOut)
executeGlobal1
Definition: reinhard_tmo.hpp:217
FilterLuminance flt_lum
Definition: reinhard_tmo.hpp:136
SIGMOID_MODE
Definition: filter_sigmoid_tmo.hpp:29
float alpha
Definition: reinhard_tmo.hpp:133
FilterSigmoidTMO flt_sigmoid
Definition: reinhard_tmo.hpp:134
The FilterBilateral2DS class.
Definition: filter_bilateral_2ds.hpp:36
static float estimateWhitePoint(float LMin, float LMax)
estimateWhitePoint
Definition: reinhard_tmo.hpp:185
float whitePoint
Definition: reinhard_tmo.hpp:133