본문으로 바로가기
728x90

이미지 필터링이란 ?

각 알고리즘에 의해 픽셀의 값을 변경하여 이미지에 효과를 주는 것이라고 할 수 있습니다.

이것을 이용하면 이미지를 흐리게, 날카롭게, 뚜렷하게, 노이즈 제거 등 다양한 효과를 줄 수 있습니다.

 

다음 필터링 함수에 대해 알아봅니다.

  • blur()

  • GaussianBlur()

  • medianBlur()

  • bilateralFilter()

 

cv2.blur(src, ksize, dst=None, anchor=None, borderType=None)

기본적으로 이미지를 흐리게할 때 사용합니다.

도수 안맞은 안경쓴 느낌이 듭니다.

import cv2
import numpy as np

def onChange(k):
    if k >= 1:
        dst = cv2.blur(img, (k, k))
        cv2.imshow('blur',dst)

img = cv2.imread('img.jpg')
# cv2.namedWindow('blur')
cv2.imshow('blur', img)

cv2.createTrackbar('k', 'blur', 0, 20, onChange)

cv2.waitKey()
cv2.destroyAllWindows()

 

cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)

GaussianBlur 또한 흐림 효과를 주는데 blur 와는 차이가 있습니다.

또한 GaussianBlur는 전체적으로 밀도가 동일한 노이즈, 백색 노이즈를 제거하는 효과적이라고 합니다.

import cv2
import numpy as np

def onChange(k):
    if k % 2 == 1: # k > 1 and k % 2 == 1
        dst = cv2.GaussianBlur(img, (k, k), 0)
        cv2.imshow('GaussianBlur', dst)

img = cv2.imread('img.jpg')
# cv2.namedWindow('blur')
cv2.imshow('GaussianBlur', img)

cv2.createTrackbar('k', 'GaussianBlur', 0, 20, onChange)

cv2.waitKey()
cv2.destroyAllWindows()

 

cv2.medianBlur(src, ksize, dst=None)

노이즈를 제거하는 데 사용합니다. (아래 결과는 부적절한 이미지 사용)

import cv2
import numpy as np

def onChange(k):
    if k % 2 == 1: # k > 1 and k % 2 == 1
        dst = cv2.medianBlur(img, k)
        cv2.imshow('medianBlur', dst)

img = cv2.imread('img.jpg')
# cv2.namedWindow('blur')
cv2.imshow('medianBlur', img)

cv2.createTrackbar('k', 'medianBlur', 0, 20, onChange)

cv2.waitKey()
cv2.destroyAllWindows()

 

cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)

지금까지의 처리는 경계선이 흐려지는데 반해 bilateralFilter경계선을 유지합니다.

결과를 보면 뽀샵? 그림같은 느낌이 들기도 합니다.

import cv2
import numpy as np

def onChange(k):
    dst = cv2.bilateralFilter(img, -1, k, k)
    cv2.imshow('bilateralFilter', dst)

img = cv2.imread('img.jpg', cv2.IMREAD_GRAYSCALE)
# cv2.namedWindow('blur')
cv2.imshow('bilateralFilter', img)

cv2.createTrackbar('k', 'bilateralFilter', 0, 20, onChange)

cv2.waitKey()
cv2.destroyAllWindows()

cv2.bilateralFilter()