2015년 9월 20일 일요일

gaussian filter

이번에 구현한 것은 가우시안 필터이다. 사실 이게 맞는지도 잘 모르겠다. 일단 원하던 결과

는 나온다. 가우시안에 대해서 검색하면 요상한 그래프를 자주 볼 수 있을 것이다. 뭐 표준

편차에 어쩌구 저쩌구 하는데 나는 이에 대해서 이번에 처음듣게 되어서 생소하였다.  간단

하게 말하자면 가운데의 비중이 제일크고 주변으로 갈수록 비중이 작아 진다는 건데 시그

마 값에 의해서 주변 값들의 비중이 결정 되어진다 시그마가 높으면 주변 값의 비중이 높아

진다. 그래서 주어진 식에 대입해서 그렇게 해서 반복문으로 아래를 만들었다. 다중포문을

사용할때는 주어진 값이 변경된다면 변수를 이용해서 하는 편이 더 깔끔하고 좋았다는 걸

느꼈다.


function [ output_args ] = gaussian( img_name, f_size, sigma )
%GAUSSIAN Summary of this function goes here
%   Detailed explanation goes here


       t_img = imread(img_name);
     
       filter = zeros(f_size);

       [h w] = size(t_img);
     
       result = zeros(h, w, 'uint8');
     
       f_size_buf = (f_size-1)/2;
       gauss_buf = 1/(2*pi*(sigma^2));
     
     
       for i=-f_size_buf:f_size_buf
           for j=-f_size_buf:f_size_buf
               filter(i+f_size_buf+1,j+f_size_buf+1) = gauss_buf * exp(-1*(i^2+j^2)/(2*(sigma^2)));
           end
       end
     
             
     
     
     
     
     
     
     
     
     
       i= 0;
       j= 0;
       k= 0;
       l= 0;
     
       for i=f_size_buf+1:h-f_size_buf
           for j=f_size_buf+1:w-f_size_buf
               temp = 0;
               for k= -f_size_buf:f_size_buf
                   for l= -f_size_buf:f_size_buf
                       temp = temp + t_img(i+k,j+l)*filter(k+f_size_buf+1,l+f_size_buf+1);
                   end
               end
               result(i-1,j-1) = ceil(temp);
           end
       end
     
       figure, imshow(t_img);
       figure, imshow(result);


end

댓글 없음:

댓글 쓰기