18 #ifndef PIC_GL_FILTERING_FILTER_BILATERAL_2DF_HPP 19 #define PIC_GL_FILTERING_FILTER_BILATERAL_2DF_HPP 21 #include "../../gl/filtering/filter.hpp" 78 if(imgIn.size() == 1) {
80 param.push_back(imgIn[0]);
111 uniform sampler2D u_tex;
112 uniform
float sigmas2;
113 uniform
float sigmar2;
114 uniform
int halfKernelSize;
118 vec3 color = vec3(0.0, 0.0, 0.0);
119 ivec2 coordsFrag = ivec2(gl_FragCoord.xy);
122 vec3 colRef = texelFetch(u_tex, coordsFrag, 0).xyz;
126 for(
int i = -halfKernelSize; i <= halfKernelSize; i++) {
127 for(
int j = -halfKernelSize; j <= halfKernelSize; j++) {
129 ivec2 coords = ivec2(i, j);
131 tmpCol = texelFetch(u_tex, coordsFrag.xy + coords.xy, 0).xyz;
132 vec3 tmpCol2 = tmpCol - colRef;
133 float dstR = dot(tmpCol2.xyz, tmpCol2.xyz);
134 float tmp = exp(-dstR / sigmar2 -
float(coords.x * coords.x + coords.y *
135 coords.y) / sigmas2);
136 color.xyz += tmpCol * tmp;
141 color = weight > 0.0 ? color / weight : colRef;
142 f_color = vec4(color.xyz, 1.0);
164 float sigmas2 = 2.0f * this->sigma_s * this->
sigma_s;
165 float sigmar2 = 2.0f * this->sigma_r * this->
sigma_r;
TechniqueGL technique
Definition: display.hpp:45
static int getKernelSize(float sigma)
KernelSize computes the size of a kernel in pixel give its sigma.
Definition: precomputed_gaussian.hpp:121
FilterGLBilateral2DF()
FilterGLBilateral2DF.
ImageGL * allocateOutputMemory(ImageGLVec imgIn, ImageGL *imgOut, bool bDelete)
allocateOutputMemory
Definition: display.hpp:217
void bind()
bind
Definition: display.hpp:189
void FragmentShader()
FragmentShader.
#define MAKE_STRING(input_string)
void update(float sigma_s, float sigma_r)
update
float sigma_s
Definition: filter_bilateral_2df.hpp:33
The ImageGL class.
Definition: image.hpp:42
void setUniform1f(const char *name_uniform, float value0)
SetUniform1f.
Definition: display.hpp:247
The FilterGL class.
Definition: filter.hpp:35
The FilterGL class.
Definition: display.hpp:35
#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
ImageGLVec param
Definition: display.hpp:49
The FilterGLBilateral2DF class provides an HW accelerated bilateral filter implementation without app...
Definition: filter_bilateral_2df.hpp:30
ImageGL * setupAux(ImageGLVec imgIn, ImageGL *imgOut)
setupAux
Definition: filter_bilateral_2df.hpp:74
void unbind()
unbind
Definition: display.hpp:197
std::string vertex_source
Definition: display.hpp:57
Definition: bilateral_separation.hpp:25
float sigma_r
Definition: filter_bilateral_2df.hpp:33
void initShaders()
initShaders
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