반응형
황선규 박사님의 <OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝>, 패스트 캠퍼스 OpenCV 강의를 공부한 내용을 정리했습니다.
언샤프 마스크 필터를 활용해서 영상에 샤프닝 적용하기 - np.clip, cv2.GaussianBlur
영상에 샤프닝을 적용하기 위해 언샤프 마스크가 필요합니다.
언샤프 마스크 필터링는 날카롭지 않은(unsharp) 영상, 즉 부드러워진 영상을 이용하여 날카로운 영상을 생성합니다.
1. 언샤프 마스크 필터의 이해
언샤프 마스크 필터는 기존 영상의 픽셀 + (기존 영상의 픽셀 - 가우시안 필터링으로 블러가 적용된 영상의 픽셀) 로 만들 수 있습니다.
기존 영상의 픽셀에서 픽셀 값이 변화하는 구간입니다.
가우시안 필터가 적용된 픽셀 값 입니다.
기존 영상의 픽셀 - 가우시안 필터가 적용된 픽셀 값 입니다.
위 사진을 기존 영상의 픽셀에 더해주면 언샤프 마스크 필터가 됩니다.
2. 언샤프 마스크 필터 구현하기
np.clip 함수로 언샤프 마스크 필터를 구현할 수 있습니다.
np.clip을 이용하는 이유는 saturate연산이 가능하기 때문입니다.
[예제 코드]
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) # 표준편차 2, 필터 크기는 자동 설정
a = 2.0 # 샤프닝 정도 결정하는 변수
dst = np.clip((1+a)src - a * blr, 0, 255).astype(np.unit8) # 계산은 정수, 출력은 실수
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
[결과]
이처럼 영상에 샤프닝을 적용할 수 있습니다.
3. 컬러 영상에 대한 언샤프 마스크 필터 구현하기
컬러 영상에 샤프닝을 적용해보겠습니다.
흑백 영상과 마찬가지로 np.clip을 이용합니다.
[예제 코드]
src = cv2.imread('rose.bmp')
if src is None:
print('Image load failed!')
sys.exit()
src_ycrcb = cv2.cvtColor(src, cv2.COLOR_BGR2YCrCb) # BGR -> YCrCb 전환
# Y 성분만 추출
src_f = src_ycrcb[:, :, 0].atype(np.float32) # split 대신 슬라이싱 사용
blr = cv2.GaussianBlur(src_f, (0, 0), 2.0)
src_ycrcb[:, :, 0] = np.clip(2. * src_f - blr, 0, 255).astype(np.unit8) # 중간 연산은 실수가 좋고 최종 형태는 unit8로 하는게 좋음
dst = cv2.cvtColor(src_ycrcb, cv2.COLOR_YCrCb2BGR)
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
[결과]
언샤프 마스크 필터를 이용해서 영상에 샤프닝을 적용해보았습니다. 감사합니다.
반응형
'Python > 파이썬 OpenCV 공부' 카테고리의 다른 글
[파이썬 OpenCV] 영상 잡음 제거(2) - 양방향 필터 - cv2.bilateralFilter (0) | 2020.10.03 |
---|---|
[파이썬 OpenCV] 영상 잡음 제거(1) - 미디언 필터 - cv2.medianBlur (0) | 2020.10.03 |
[파이썬 OpenCV] 영상에 블러링(가우시안 필터) 적용하기 - cv2.GaussianBlur (1) | 2020.09.30 |
[파이썬 OpenCV] 영상에 블러링(평균값 필터) 적용하기 - cv2.blur (0) | 2020.09.30 |
[파이썬 OpenCV] 영상에 필터링 적용하기 - cv2.filter2D (0) | 2020.09.30 |