앞에서 알아본 평균 값 필터 블러링의 단점은 필터링 대상 위치에서 가까이 있는 픽셀과 멀리 있는 픽셀이 모두 같은 가중치를 사용하여 평균을 계산한다. 멀리 있는 픽셀의 영향을 많이 받아 필터 결과의 퀄리티가 낮아지게 된다.
이러한 단점을 보완하기 위해 가우시안 필터(Gaussian Filter)를 많이 사용한다.
가우시안 필터 Gaussian Fillter
📍 Gaussian Function 가우시안 함수 - 1차원
가우시안 함수는 μ가 평균(mean or average), σ는 표준 편차(standard deviation)인 정규 분포(normal distribution)와 동일하다.
가우시안 함수의 특징으로
- 기댓값, 최빈값, 중앙값이 모두 같다.
- 정규분포곡선은 좌우 대칭이며 종 모양을 한다.
- 정규분포는 평균과 표준편차가 주어져 있을 때 엔트로피를 최대화 하는 분포이다.
📍 Gaussian Function 가우시안 함수 - 2차원
필터에 가우시안 함수를 사용하여 거리에 따른 가중치를 이용한다.
2차원 가우시안 필터 마스크의 크기는 표준편차에 따라 자동으로 설정된다.
필터 마스크 크기 = (8 + 1) 또는 (6 + 1)
✔︎ 가우시안 필터링 함수 - cv2.GaussianBlur
import cv2
dst = cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
- src : 입력 영상. 각 채널 별로 처리됨.
- dst : 출력 영상. src와 같은 크기, 같은 타입.
- ksize : 가우시안 커널 크기. (0, 0)을 지정하면 sigma 값에 의해 자동 결정됨
- sigmaX : x방향 sigma.
- sigmaY : y방향 sigma. 0이면 sigmaX와 같게 설정.
- borderType : 가장자리 픽셀 확장 방식.
💬 예제
import sys
import cv2
src = cv2.imread('rose.bmp', cv2.IMREAD_GRAYSCALE)
if src is None:
print('Image load failed!')
sys.exit()
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()
blurring
'OpenCV' 카테고리의 다른 글
[OpenCV with Python] Filtering : Noise 제거 - Median Filter (0) | 2022.02.01 |
---|---|
[OpenCV with Python] Filtering : 영상에 샤프닝 적용 - Unsharp Mask (0) | 2022.02.01 |
[OpenCV with Python] Filtering : 블러링(blurring) - 평균값 필터 (0) | 2022.02.01 |
[OpenCV with Python] Filtering : 필터링이란? (0) | 2022.02.01 |
[OpenCV with Python] 영상처리 : 히스토그램 역투영 (0) | 2022.02.01 |