영상에 샤프닝을 적용하기 위해 언샤프 마스크가 필요하다.
언샤프 마스크 필터링(Unsharp Mask Filtering)은 날카롭지 않은(unsharp) 영상, 즉 부드러워진 영상을 이용하여 날카로운 영상을 생성한다.
언샤프 마스크 필터 Unsharp Mask Filtering
언샤프 마스크 필터는 기존 영상의 픽셀 + (기존 영상의 픽셀 - 가우시안 필터링으로 블러가 적용된 영상의 픽셀) 로 만들 수 있다.
- 기존 영상의 픽셀에서 픽셀 값이 변화하는 구간
- 가우시안 필터가 적용된 픽셀 값
- 기존 영상의 픽셀 - 가우시안 필터가 적용된 픽셀 값
➡️ 위 사진을 기존 영상의 픽셀에 더해주면 언샤프 마스크 필터가 된다.
✔︎ 언샤프 마스크 필터 구현 - np.clip
np.clip 함수로 언샤프 마스크 필터를 구현할 수 있다.
np.clip을 이용하는 이유는 saturate연산이 가능하기 때문!
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), 2)
dst = np.clip(2.0*src - blr, 0, 255).astype(np.uint8)
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()
⬇️
'OpenCV' 카테고리의 다른 글
[OpenCV with Python] Filtering : Noise 제거 - 양방향 필터 Bilateral Filter (0) | 2022.02.01 |
---|---|
[OpenCV with Python] Filtering : Noise 제거 - Median Filter (0) | 2022.02.01 |
[OpenCV with Python] Filtering : Blurring - 가우시안 필터 Gaussian Filter (0) | 2022.02.01 |
[OpenCV with Python] Filtering : 블러링(blurring) - 평균값 필터 (0) | 2022.02.01 |
[OpenCV with Python] Filtering : 필터링이란? (0) | 2022.02.01 |