[ch04] 필터링 - 블러링(1) : 평균값 필터

빨주노·2021년 8월 20일
0

평균 값 필터 (Mean filter)

  • 영상의 특정 좌표 값을 주변 픽셀 값들의 산술 평균으로 설정
  • 픽셀들 간의 그레이스케일 값 변화가 줄어들어 날카로운 에지가 무뎌지고, 영상에 있는 잡음의 영향이 사라지는 효과

실제 영상에 평균 값 필터를 적용한 결과

  • 마스크 크기가 커질수록 평균 값 필터 결과가 더욱 부드러워짐
    • 그러나, 더 많은 연산량이 필요하다!

filter2D() 함수를 이용한 평균값 필터링 예제

src = cv2.imread('rose.bmp', cv2.IMREAD_GRAYSCALE)
kernel = np.array([[1/9, 1/9, 1/9],
                   [1/9, 1/9, 1/9],
                   [1/9, 1/9, 1/9]])
# 이렇게 나타낼 수도 있다.
#kernel = np.ones((3, 3), dtype=np.float64) / 9.
dst = cv2.filter2D(src, -1, kernel)

# 5x5도 추가로 입력하기
kernel = np.ones((5, 5), dtype=np.float64) / 25.

커널의 크기가 커질수록 블러링이 심해지는 모습을 확인할 수 있다.

평균 값 필터링 함수

cv2.blur(src, ksize, dst=None, anchor=None, borderType=None) -> dst
  • src : 입력 영상
  • ksize : 평균값 필터 크기. (width, height) 형태의 튜플.
  • dst : 결과 영상. 입력 영상과 같은 크기 & 같은 타입.

다양한 크기의 커널을 사용한 평균값 필터링 예제

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

for ksize in (3, 5, 7):
    dst = cv2.blur(src, (ksize, ksize))
    
    desc = 'Mean: {}x{}'.format(ksize, ksize)
    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()

  • 키보드를 누를 때마다 위와 같이 변한다.
  • 갈수록 블러링이 심해지는 모습을 확인할 수 있다.
profile
딥 하게 딥러닝 하는중

0개의 댓글

관련 채용 정보