Python/파이썬 OpenCV 공부

[파이썬 OpenCV] 영상에 블러링(가우시안 필터) 적용하기 - cv2.GaussianBlur

AI 꿈나무 2020. 9. 30. 19:25
반응형

황선규 박사님의 <OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝>, OpenCV 강의를 공부한 내용을 정리했습니다.

 


영상에 블러링(가우시안 필터) 적용하기 - cv2.GaussianBlur

 이전 포스팅에서 평균값 필터 블러링에 대해 알아보았습니다.

 

 평균값 필터 블러링의 단점은 필터링 대상 위치에서 가까이 있는 픽셀과 멀리 있는 픽셀이 모두 같은 가중치를 사용하여 평균을 계산합니다.

 

 멀리 있는 픽셀의 영향을 많이 받아 필터 결과의 퀄리티가 낮아지게 됩니다.

 

 이러한 단점을 보완하기 위해 가우시안 필터를 많이 사용합니다.

 

 

 

 

 

 필터에 가우시안 함수를 사용하여 거리에 따른 가중치를 이용합니다.

 

 2차원 가우시안 필터 마스크의 크기는 표준편차에 따라 자동으로 설정됩니다.

 

 필터 마스크 크기 = (8$\sigma$ + 1) 또는 (6$\sigma$ + 1)

 

표준편차가 1일 때 가우시안 필터 마스크

 

1. 가우시안 필터링 함수 - cv2.GaussianBlur

 OpenCV에서 가우시안 필터링 함수를 제공합니다.

 

[함수 설명]

 

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. 0이면 sigmaX와 같게 설정.
• borderType: 가장자리 픽셀 확장 방식.

[예시 코드]

 

 다양한 크기의 sigma를 사용한 가우시안 필터링 코드입니다.

 

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

cv2.imshow('src', src)

for sigma in range(1, 4)
    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

 

[결과]

 

 

표준편차 = 1

 

표준편차 = 2

 

표준편차 = 3

 

 표준편차 값에 따라 마스크 크기와 필터 결과가 바뀌므로 목적에 맞는 표준편차를 설정하는 것이 중요합니다.

 

반응형