Computer Vision/opencv(python)

[24] 4)샤프닝: 언샤프 마스크 필터

jwjwvison 2021. 3. 19. 14:44
  • 언샤프 마스크(Unsharp mask) 필터링
    • 날카롭지 않은(unshape) 영상, 즉, 부드러워진 영상을 이용하여 날카로운 영상을 생성

 

  • 언샤프 마스크 필터 구현하기
import sys
import numpy as np
import cv2

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

if src is None:
    print('Image load failed!')
    sys.exit()

blr=cv2.GaussianBlur(src,(0,0),3)
dst=np.clip(2.*src-blr,0,255).astype(np.uint8)
# dst=cv2.addWeighted(src,2,blr,-1,0)

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

 앞선 필터링 보다 더 날카로운 느낌을 갖는다

 

  • 컬러 영상에 대한 언샤프 마스크 필터 구현하기
import sys
import numpy as np
import cv2

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

if src is None:
    print('Image load failed!')
    sys.exit()

# 컬러영상

src_ycrcb = cv2.cvtColor(src, cv2.COLOR_BGR2YCrCb)

#중간단계는 실수로 가져가고 최종 단계에서 정수형으로 바꿔주는 기법(정확성을 위해서)
src_f = src_ycrcb[:, :, 0].astype(np.float32)  #색상좌표중 첫번째   
blr = cv2.GaussianBlur(src_f, (0, 0), 2.0)
src_ycrcb[:, :, 0] = np.clip(2. * src_f - blr, 0, 255).astype(np.uint8)

dst = cv2.cvtColor(src_ycrcb, cv2.COLOR_YCrCb2BGR)

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

cv2.destroyAllWindows()

 

 <참고사항>

 계산 과정에서 실수형으로 계산을 하면 좀더 정확한 결과를 얻을 수 있다. 다만 마지막에는 정수형으로 다시 변환해주 어야 한다