Showing posts with label Binary filter. Show all posts
Showing posts with label Binary filter. Show all posts

Thursday, June 17, 2010

Binary filter Pixel Shader

Binary image is image composed only from 2 colors. Typical conversion algorithm to binary image is this -> If pixel's averaged intensity is greater than threshold - draw pixel in first color, otherwise- draw it in second color. But you can define other methods of conversion to binary as well.
For example another method can be - If pixel's color is near target color (within error bounds) - draw pixel in first color, otherwise - draw it in second. This conversion rule is implemented in following GLSL pixel shader code:



uniform sampler2D tex;

bool nearColor(in vec4 col, in vec4 tcol, in float error) {
return abs(col.r-tcol.r) < error &&
abs(col.g-tcol.g) < error &&
abs(col.b-tcol.b) < error ;
}

void main()
{
vec4 xcol = texture2D(tex, gl_TexCoord[0].xy);
vec4 scol = vec4(0.737,0.506,0.404,1.0);
if (nearColor(xcol,scol,0.085))
gl_FragColor = scol;
else
gl_FragColor = vec4(0.0,0.0,0.0,1.0);
}



Image

converted to binary mode: