Python/파이썬 OpenCV 공부

[파이썬 OpenCV] 영상 잡음 제거(1) - 미디언 필터 - cv2.medianBlur

AI 꿈나무 2020. 10. 3. 15:45
반응형

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

 


영상의 잡음

 영상의 잡음(Noisr)는 영상의 픽셀 값에 추가되는 원치 않는 형태의 신호를 의미합니다.

 

f(x,y) = s(x,y) + n(x,y)

 

 여기서 f(x,y)는 획득된 영상, s(x,y)는 원본 신호, n(x,y)는 잡음을 의미합니다.

 

 대부분의 경우 센서에서 잡음이 추가됩니다.

 

잡음의 종류

 두 가지 잡음을 알아보겠습니다.

 

(1) 가우시안 잡음(Gaussian noise)

 

 대부분의 잡음 형태는 가우시안 형태입니다.

 

 잡음이 가우시한 형태로 추가되는데 픽셀값에서 조금 더 어두워지거나 밝아지게 됩니다.

 

 

(2) 소금$후추 잡음(Salt&Pepper)

 

 요즘 소금 후추 잡음은 거의 없습니다.

 

 

잡음 제거(1) - 미디언 필터 - cv2.medianBlur

 미디언 필터(Median filter)는 주변 픽셀들의 값들을 정렬하여 그 중앙값(median)으로 픽셀 값을 대체합니다.

 

 소금-후추 잡음 제거에 효과적 입니다. 많이 사용하지 않지만 아이디어가 기발하여 배워보겠습니다.

 

 

 미디언 필터는 마스크 모양만 지정합니다.

 사각형 행렬을 1열로 나열하고 sort합니다.

 중앙값에 있는 값을 이용해서 셋팅합니다.

 

 특징은 기존의 필터들과 다르게 입력값에 있는 값을 결과값으로 반환한다는 것 입니다.

 

미디언 필터링 함수 - cv2.medianBlur

  OpenCV에서는 미디언 필터링 함수로 cv2.medianBlur 명령어를 제공하고 있습니다.

 

 약간 블러링 되는 효과가 있으며 픽셀들이 뭉치는 형태를 띄어 보기 좋은 결과가 아닙니다.

 

 화질의 퀄리티면에서 좋은 결과가 아닙니다.

 

[함수 설명]

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

 src : 입력 영상. 각 채널 별로 처리됨
 ksize : 커널 크기. 1보다 큰 홀수를 지정. 숫자 하나를 집어주면 됌
 dst : 출력 영상, src와 같은 크기, 같은 타입

[미디언 필터링 예제]

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

if src is None:
    print('Image load failed!')
    sys.exit()
    
dst = cv2.medianBlur(src, 3)

cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()

cv2.destroyAllWindows()

 

원본영상

 

미디언 필터 적용

 

 결과 영상을 보면 화질이 뭉쳐있다는 느낌을 받습니다.

 

 소금&후추 잡음은 조정되었지만 화질의 퀄리티가 안좋습니다.

 

 감사합니다.

반응형