ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Computer Vision(Gaussian Filtering)[2]
    프로그래밍/Python 2020. 4. 20. 12:27
    반응형

    30분 넘게 글 쓰다가 인터넷이 팅겨서 다시 씁니다...


    정말 성심성의껏 글쓰고 있었는데 이렇게 날라가니까 슬프네요...


    --------------------------------------------------------------------


    저번 시간에 앞서서 우리는 gaussian filter를 만들었다.


    이번 시간에는 convolve 함수와 이미지를 사용하여 실제로 블러된 이미지를 출력하는 시간을 가지도록 하겠다.


    convolve 코드



    필터의 크기로 부터 padding 시켜야 하는 정도가 구해진다.


    pad함수에 constant라는 zero-padding 파라미터를 넣어 이미지를 zero-padding 시킨다.




    위의 그림은 convolution 방법이다. 즉, w * f는 blur처리된 이미지의 한 pixel을 구성한다.


    또한 이는 180도 회전하여 각 원소끼리 곱해주는 방법과 같다.


    그래서 나는 rot90() 함수를 통해 가우시안 필터를 90도 회전 시켜주었고 각 원소에 곱을 시켰다.


    필터의 크기와 곱하려는 행렬의 크기가 같아야 convolution 할 수 있기에 


    [i : i + len(filt), j : j + len(filt)]라는 filter 크기의 범위를 지정해주었고 이를 filter와 곱해주었다.


    엄연히 convolution(합성곱)과 행렬곱은 다르다. 


    행렬곱은 (열 X 행)으로 계산을 한다면, 합성곱은 각 원소의 위치를 서로 곱해준다.


    이를 간과하면 제대로된 blur image를 구하기 어렵다.





    이제는 image와 sigma를 통해 gaussian filter와 convolve 하는 함수를 만들어야 한다.



    Gaussian convolve 코드




    이렇게 코드가 다 완성이 되었다면 이를 실행 시키자.



    실행 코드





    흑백으로 필터링하는 코드를 작성했으므로 이미지 또한 흑백으로 변환시켜준다.


    Int type을 가지는 image를 정확한 gaussian convolution을 위해 float로 바꾸어준다.


    우리가 만든 gaussian convolve 함수로 blurred image를 return 받고 이를 다시 int로 바꾸어준다.(sigma = 3)


    마지막으로 array를 image로 변환하여 출력하면 다음과 같이 blurred Image가 출력된다.




     

    <Original Image>


     

    <Blurred Image>


    이렇게 우리는 흑백으로 blur처리 된 이미지를 출력해보았다. 


    다음 시간에는 Color(RGB)로 Blurring한 이미지를 출력해보겠다.


    전체 코드가 필요하신 분은 댓글로 이메일을 남겨주세요.


    * 엄연히 제가 직접 작성한 코드입니다. 무단 복제는 금지해주세요!

    댓글

Designed by Tistory.