LoG를 통해 구현했던 Edge Effect는 아무래도 커널로 변환하는 과정이 완벽하지 않아서 인지

영 노이즈가 많이 생기길래 .. 간단하게 Canny Edge Effect 구현하는 코드를 구함


출처 :

edge.pdf


구현 방법은 간단하게 

1) 원본 이미지를 흑백 변환해주고

2) 흑백 변환된 이미지에 가우시안 블러를 적용하여 엣지를 구할 이미지 생성하고

3) 블러까지 적용된 이미지로 Gradient를 생성해 주면 끝 !


아래 코드는 위의 glsl 코드를 약간 변형하여 엣지의 두께 및 색상을 조절할 수 있는 코드 !


Edge Effect Shader


precision mediump  float;


uniform sampler2D uTexID0;           // 흑백 블러 이미지

varying vec2 vTexCoord;

uniform vec2 uTexel;             // 텍셀

uniform float               uOffset;             // 엣지 두께

uniform float uThreshold;       // 임계치

uniform vec4 uColor;             // 엣지 색상


void main()

{

    vec2 pixelRight   = vTexCoord + vec2(uTexel.x*uOffset,0.0),

         pixelLeft    = vTexCoord + vec2(-uTexel.x*uOffset,0.0),

         pixelTop     = vTexCoord + vec2(0.0,uTexel.y*uOffset),

         pixelBottom  = vTexCoord + vec2(0.0,-uTexel.y*uOffset);


    vec2 gradient = vec2(length(texture2D(uTexID0,pixelRight).xyz

                         - texture2D(uTexID0,pixelLeft).xyz),

                         length(texture2D(uTexID0,pixelTop).xyz

                         - texture2D(uTexID0,pixelBottom).xyz));

    // 배경은 흰색 엣지는 입력받은 색상으로 그려줌

    gl_FragColor =  mix( vec4(1.0,1.0,1.0,1.0), uColor, length(gradient)-uThreshold);

  }

 

'Programmer의 텅빈 공간 > OpenGL/GLSL' 카테고리의 다른 글

Color Curves Shader  (0) 2014.06.13
Kuwahara Effect  (0) 2014.06.11
LoG : Laplacian of Gaussian edge detection  (0) 2014.05.29
unsharp mask 를 이용한 sharpen filter  (0) 2014.05.27
Emboss shader  (0) 2014.05.21

+ Recent posts