18 #ifndef PIC_GL_FILTERING_FILTER_ANISOTROPIC_DIFFUSION_HPP 19 #define PIC_GL_FILTERING_FILTER_ANISOTROPIC_DIFFUSION_HPP 21 #include "../../base.hpp" 23 #include "../../util/std_util.hpp" 25 #include "../../gl/filtering/filter.hpp" 26 #include "../../gl/filtering/filter_iterative.hpp" 116 sigma_r = sigma_r <= 0.0f ? 0.11f : sigma_r;
139 uniform sampler2D u_tex; \n
140 uniform
float k_sq; \n
146 ivec2 coords = ivec2(gl_FragCoord.xy);
148 vec3 cB = texelFetch(u_tex, coords , 0).xyz;
150 vec3 c0 = texelFetch(u_tex, coords + ivec2(1, 0), 0).xyz;
152 vec3 c1 = texelFetch(u_tex, coords - ivec2(1, 0), 0).xyz;
154 vec3 c2 = texelFetch(u_tex, coords + ivec2(0, 1), 0).xyz;
156 vec3 c3 = texelFetch(u_tex, coords - ivec2(0, 1), 0).xyz;
166 vec4 c = vec4(dot(gN, gN), dot(gS, gS), dot(gW, gW), dot(gE, gE));
168 c = exp(-c / vec4(k_sq));
170 f_color = vec4(cB +
delta_t *(c.x * gN + c.y * gS + c.z * gW + c.w * gE), 1.0);
184 this->k =
k > 0.0f ? this->
k : 0.11f;
185 float k_sq = this->k * this->
k;
FilterGLAnisotropicDiffusion(float k, unsigned int iterations)
FilterGLAnisotropicDiffusion.
FilterGLIterative * flt
Definition: filter_anisotropic_diffusion.hpp:48
float k
Definition: filter_anisotropic_diffusion.hpp:46
TechniqueGL technique
Definition: display.hpp:45
T * delete_s(T *data)
delete_s
Definition: std_util.hpp:123
void bind()
bind
Definition: display.hpp:189
#define MAKE_STRING(input_string)
The FilterGLIterative class.
Definition: filter_iterative.hpp:32
ImageGL * Process(ImageGLVec imgIn, ImageGL *imgOut)
Process.
Definition: filter_npasses.hpp:323
unsigned int iterations
Definition: filter_anisotropic_diffusion.hpp:47
ImageGL * AnisotropicDiffusion(ImageGLVec imgIn, ImageGL *imgOut)
AnisotropicDiffusion.
Definition: filter_anisotropic_diffusion.hpp:84
The ImageGL class.
Definition: image.hpp:42
void setUniform1f(const char *name_uniform, float value0)
SetUniform1f.
Definition: display.hpp:247
float delta_t
Definition: filter_anisotropic_diffusion.hpp:46
void update(float k)
update
The FilterGL class.
Definition: filter.hpp:35
~FilterGLAnisotropicDiffusion()
The FilterGL class.
Definition: display.hpp:35
#define PIC_INLINE
Definition: base.hpp:33
void FragmentShader()
FragmentShader.
bool initStandard(std::string version_number, std::string vertex_shader_source, std::string fragment_shader_source, std::string name)
initStandard
Definition: display.hpp:114
void unbind()
unbind
Definition: display.hpp:197
std::string vertex_source
Definition: display.hpp:57
Definition: bilateral_separation.hpp:25
void releaseAux()
releaseAux
Definition: filter_anisotropic_diffusion.hpp:67
The FilterGLAnisotropicDiffusion class.
Definition: filter_anisotropic_diffusion.hpp:33
std::string fragment_source
Definition: display.hpp:57
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
void initShaders()
initShaders