18 #ifndef PIC_GL_FILTERING_FILTER_EXPOSURE_FUSION_WEIGHTS_HPP 19 #define PIC_GL_FILTERING_FILTER_EXPOSURE_FUSION_WEIGHTS_HPP 21 #include "../../base.hpp" 23 #include "../../gl/filtering/filter.hpp" 60 this->wC =
wC >= 0.0f ?
wC : 1.0f;
61 this->wE =
wE >= 0.0f ?
wE : 1.0f;
62 this->wS =
wS >= 0.0f ?
wS : 1.0f;
83 width = imgIn[0]->width;
84 height = imgIn[0]->height;
86 frames = imgIn[0]->frames;
94 uniform sampler2D u_tex; \n
95 uniform sampler2D u_tex_lum; \n
105 ivec2 coords = ivec2(gl_FragCoord.xy);\n
108 vec3 color = texelFetch(u_tex, coords, 0).xyz;\n
109 float tmpMu = dot(color.xyz, vec3(1.0)) / 3.0;\n
110 vec3 tmpVar = color - vec3(tmpMu);\n
111 float pSat = sqrt( dot(tmpVar, tmpVar) / 3.0);\n
112 pSat = pow(pSat,
wS);\n
115 vec3 delta = color - vec3(
mu);\n
116 float pExp = exp(-dot(delta, delta) /
sigma_sq_2);\n
117 pExp = pow(pExp,
wE);\n
120 float pCon = -4.0 * texelFetch(u_tex_lum, coords, 0).x+
121 texelFetch(u_tex_lum, coords + ivec2(1, 0), 0).x+\n
122 texelFetch(u_tex_lum, coords - ivec2(1, 0), 0).x+\n
123 texelFetch(u_tex_lum, coords + ivec2(0, 1), 0).x+\n
124 texelFetch(u_tex_lum, coords - ivec2(0, 1), 0).x;\n
125 pCon = pow(abs(pCon),
wC);\n
127 f_color = vec4(vec3(pCon * pExp * pSat + 1e-12), 1.0);\n
TechniqueGL technique
Definition: display.hpp:45
~FilterGLExposureFusionWeights()
Definition: filter_exposure_fusion_weights.hpp:68
float sigma_sq_2
Definition: filter_exposure_fusion_weights.hpp:43
float wE
Definition: filter_exposure_fusion_weights.hpp:44
float wS
Definition: filter_exposure_fusion_weights.hpp:44
void FragmentShader()
FragmentShader.
void bind()
bind
Definition: display.hpp:189
#define MAKE_STRING(input_string)
void setUniform1f(const char *name_uniform, float value0)
SetUniform1f.
Definition: display.hpp:247
The FilterGLExposureFusionWeights class.
Definition: filter_exposure_fusion_weights.hpp:30
The FilterGL class.
Definition: filter.hpp:35
float mu
Definition: filter_exposure_fusion_weights.hpp:43
#define PIC_INLINE
Definition: base.hpp:33
bool initStandard(std::string version_number, std::string vertex_shader_source, std::string fragment_shader_source, std::string name)
initStandard
Definition: display.hpp:114
float wC
Definition: filter_exposure_fusion_weights.hpp:44
void unbind()
unbind
Definition: display.hpp:197
std::string vertex_source
Definition: display.hpp:57
Definition: bilateral_separation.hpp:25
FilterGLExposureFusionWeights(float wC=1.0f, float wE=1.0f, float wS=1.0f)
FilterGLExposureFusionWeights.
Definition: filter_exposure_fusion_weights.hpp:54
std::string fragment_source
Definition: display.hpp:57
void initShaders()
initShaders
void OutputSize(ImageGLVec imgIn, int &width, int &height, int &channels, int &frames)
OutputSize.
Definition: filter_exposure_fusion_weights.hpp:81
std::vector< ImageGL * > ImageGLVec
ImageGLVec an std::vector of pic::ImageGL.
Definition: image_vec.hpp:32
void release()
release
Definition: display.hpp:85
void setUniform1i(const char *name_uniform, int value0)
SetUniform.
Definition: display.hpp:236