18 #ifndef PIC_FILTERING_FILTER_SIGMOID_TMO_HPP 19 #define PIC_FILTERING_FILTER_SIGMOID_TMO_HPP 21 #include "../util/array.hpp" 22 #include "../util/std_util.hpp" 24 #include "../filtering/filter.hpp" 25 #include "../filtering/filter_luminance.hpp" 111 int whichImage = (imgIn.size() > 1) ? 1 : 0;
114 width = imgIn[0]->width;
115 height = imgIn[0]->height;
116 channels = imgIn[0]->channels;
117 frames = imgIn[0]->frames;
141 float wp,
float epsilon,
bool temporal) :
Filter()
149 float wp = 1e9f,
float epsilon = -1.0f,
bool temporal =
false)
162 float tmpEpsilon, retEpsilon;
166 imgIn[0]->getLogMeanVal(NULL, &tmpEpsilon);
170 imgIn[0]->getLogMeanVal(NULL, &tmpEpsilon);
183 retEpsilon = (
epsilon + tmpEpsilon) / 2.0
f;
185 retEpsilon = tmpEpsilon;
188 retEpsilon = tmpEpsilon;
197 Image *img, *img_flt;
209 for(
int j = box->
y0; j < box->y1; j++) {
211 for(
int i = box->
x0; i < box->x1; i++) {
213 float *p = (*img)(i, j);
214 float *p_flt = (*img_flt)(i, j);
216 float *dstOut = (*dst)(i, j);
223 float Lm = L * alpha_over_epsilon;
224 float Lm_flt = L_flt * alpha_over_epsilon;
228 Ld = L * (1.0f + L /
wp_sq) / (1.0
f + Lm_flt);
230 Ld = Lm / (1.0f + Lm_flt);
233 for(
int k = 0; k < dst->
channels; k++) {
234 dstOut[k] = (p[k] * Ld) / L;
Definition: filter_luminance.hpp:28
~FilterSigmoidTMO()
Definition: filter_sigmoid_tmo.hpp:75
The BBox class manages the creation of bounding boxes for images.
Definition: bbox.hpp:29
Definition: filter_sigmoid_tmo.hpp:29
float wp
Definition: filter_sigmoid_tmo.hpp:39
int channels
Definition: image.hpp:80
T * delete_s(T *data)
delete_s
Definition: std_util.hpp:123
FilterSigmoidTMO()
FilterSigmoidTMO.
Definition: filter_sigmoid_tmo.hpp:133
std::vector< Image * > ImageVec
ImageVec an std::vector of pic::Image.
Definition: image_vec.hpp:29
int x0
Definition: bbox.hpp:32
SIGMOID_MODE type
Definition: filter_sigmoid_tmo.hpp:40
Definition: filter_sigmoid_tmo.hpp:29
float epsilon
Definition: filter_sigmoid_tmo.hpp:39
The Filter class.
Definition: filter.hpp:50
static Image * execute(Image *imgIn, Image *imgOut)
execute
Definition: filter_sigmoid_tmo.hpp:126
virtual Image * Process(ImageVec imgIn, Image *imgOut)
Process.
Definition: filter.hpp:390
float wp_sq
Definition: filter_sigmoid_tmo.hpp:39
void update(SIGMOID_MODE type, float alpha, float wp, float epsilon, bool temporal)
update
Definition: filter_sigmoid_tmo.hpp:148
bool temporal
Definition: filter_sigmoid_tmo.hpp:37
The FilterSigmoidTMO class.
Definition: filter_sigmoid_tmo.hpp:34
int y0
Definition: bbox.hpp:32
void OutputSize(ImageVec imgIn, int &width, int &height, int &channels, int &frames)
OutputSize.
Definition: filter_sigmoid_tmo.hpp:100
#define PIC_INLINE
Definition: base.hpp:33
float calculateEpsilon(ImageVec imgIn)
calculateEpsilon
Definition: filter_sigmoid_tmo.hpp:160
static T dot(T *data0, T *data1, int n)
dot
Definition: array.hpp:281
The Image class stores an image as buffer of float.
Definition: image.hpp:60
void ProcessBBox(Image *dst, ImageVec src, BBox *box)
ProcessBBox.
Definition: filter_sigmoid_tmo.hpp:194
float c
Definition: filter_sigmoid_tmo.hpp:39
virtual void f(FilterFData *data)
f
Definition: filter_radial_basis_function.hpp:69
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
float alpha
Definition: filter_sigmoid_tmo.hpp:39
static T * assign(T *data, int size, T *ret)
assign
Definition: array.hpp:464
static float * computeWeights(LUMINANCE_TYPE type, int channels, float *weights)
computeWeights
Definition: filter_luminance.hpp:83
Definition: filter_sigmoid_tmo.hpp:29
float * lum_weights
Definition: filter_sigmoid_tmo.hpp:38
SIGMOID_MODE
Definition: filter_sigmoid_tmo.hpp:29
float * lum_weights_flt
Definition: filter_sigmoid_tmo.hpp:38