Filter
src: 입력 영상, Numpy 배열
ddepth: 출력 영상의 dtype (-1: 입력 영상과 동일)
kernel: 컨볼루션 커널, float32의 n x n 크기 배열
dst(optional): 결과 영상
anchor(optional): 커널의 기준점, default: 중심점 (-1, -1)
delta(optional): 필터가 적용된 결과에 추가할 값
borderType(optional): 외곽 픽셀 보정 방법 지정
dst = cv2.filter2D(src, ddepth, kernel, dst, anchor, delta, borderType)
Blur
Average Blur
src: 입력 영상, numpy 배열
ksize: 커널의 크기
나머지 파라미터는 cv2.filter2D()와 동일
dst = cv2.blur(src, ksize, dst, anchor, borderType)
ddepth: 출력 영상의 dtype (-1: 입력 영상과 동일)
normalize(optional): 커널 크기로 정규화(1/ksize²) 지정 여부 (Boolean), default=True
나머지 파라미터는 cv2.filter2D()와 동일
dst = cv2.boxFilter(src, ddepth, ksize, dst, anchor, normalize, borderType)
cv2.blur() 함수는 커널의 크기만 정해주면 알아서 평균 커널을 생성해서 평균 블러링을 적용한 영상을 출력합니다. 커널 크기는 일반적으로 홀수로 정합니다. cv2.boxFilter() 함수는 normalize에 True를 전달하면 cv2.blur() 함수와 동일한 기능을 합니다.
Gaussian Blur
가우시안 분포를 갖는 커널로 블러링 하는 것을 가우시안 블러링이라고 합니다. 가우시안 분포(gaussian distribution)란 정규 분포(normal distribution)이라고도 하는데, 평균 근처에 몰려 있는 값들의 개수가 많고 평균에서 멀어질수록 그 개수가 적어지는 분포를 말합니다.
src: 입력 영상
ksize: 커널 크기 (주로 홀수)
sigmaX: X 방향 표준편차 (0: auto)
sigmaY(optional): Y 방향 표준편차 (default: sigmaX)
borderType(optional): 외곽 테두리 보정 방식
cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType)
ret: 가우시안 커널 (1차원이므로 ret * ret.T 형태로 사용해야 함)
ret = cv2.getGaussianKernel(ksize, sigma, ktype)
k2 = cv2.getGaussianKernel(3, 0)
blur2 = cv2.filter2D(img, -1, k2*k2.T)
커널의 픽셀 값 중 중앙값을 선택하는 것을 미디언 블러링이라고 합니다. 미디언 블러링은 소금-후추 잡음을 제거하는 효과가 있습니다. 소금-후추 잡음이란 이미지에 소금과 후추를 뿌린 것과 같이 생긴 잡음을 뜻합니다.
src: 입력 영상
ksize: 커널 크기
dst = cv2.medianBlur(src, ksize)
Bilateral Filter
지금까지 적용한 블러링은 잡음을 제거하는 효과는 뛰어났지만 그만큼 경계도 흐릿하게 만드는 문제가 있었습니다. 바이레터럴 필터는 이를 개선하기 위해 가우시안 필터와 경계 필터를 결합합니다. 경계도 뚜렷하고 노이즈도 제거되는 효과가 있지만 속도가 느리다는 단점이 있습니다.
src: 입력 영상
d: 필터의 직경(diameter), 5보다 크면 매우 느림
sigmaColor: 색공간의 시그마 값
sigmaSpace: 좌표 공간의 시그마 값
일반적으로 sigmaColor와 sigmaSpace는 같은 값을 사용하며, 값의 범위는 10~150을 권장합니다.
dst = cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, dst, borderType)