[ch04] 필터링 - 블러링(2) : 가우시안 필터

평균값 필터에 의한 블러링의 단점

  • 필터링 대상 위치에서 가까이 있는 픽셀과 멀리 있는 픽셀이 모두 같은 가중치를 사용하여 평균을 계산

  • 멀리 있는 픽셀의 영향을 많이 받을 수 있음

  • (1차원) 가우시안 함수 (Gaussian function)

가우시안 함수의 특징

그래프는 좌우대칭의 종 모양의 곡선으로, 극한에 가까워질수록 값이 급격하게 감소하는 모습을 보인다.

2차원 가우시안 함수

2차원 가우시안 필터 마스크 (σ=1.0)

  • 필터 마스크 크기 : (8σ + 1) 또는 (6σ + 1)

    정 가운데 값인 0.1592를 중심으로 좌, 우, 대각선 대칭을 이룬다.

가우시안 필터링 함수

cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None) -> dst
  • src : 입력 영상. 각 채널 별로 처리됨.
  • dst : 출력 영상. src와 같은 크기, 같은 타입.
  • ksize : 가우시안 커널 크기. (0,0)을 지정하면 sigma 값에 의해 자동 결정됨.
    • 따라서, 임의로 지정하지 않는 것이 좋다.
  • sigmaX : x방향 sigma
  • sigmaY : y방향 sigma
  • borderType : 가장자리 픽셀 확장 방식.

다양한 크기의 sigma를 사용한 가우시안 필터링

src = cv2.imread('rose.bmp', cv2.IMREAD_GRAYSCALE)
cv2.imshow('src', src)

for sigma in range(1, 6):
    # sigma 값을 이용하여 가우시안 필터링
    dst = cv2.GaussianBlur(src, (0, 0), sigma)
    
    desc = 'sigma = {}'.format(sigma)
    cv2.putText(dst, desc, (10, 30), cv2.FONT_HERSHEY_SIMPLEX,
                1.0, 255, 1, cv2.LINE_AA)
    cv2.imshow('dst', dst)
    cv2.waitKey()

cv2.destroyAllWindows()

sigma가 커질수록 가우시안 필터의 효과가 커지는 모습을 확인할 수 있다.

좋은 웹페이지 즐겨찾기