언샤프 마스크 필터링이란?
- 날카롭지 않은 ( unsharp ) 영상, 부드러워진 영상을 이용하여 날카로운 영상을 생성하는 필터링을 말한다.
위와같이 기존에 점선처럼 순간적으로 변하는 픽셀들을 파란선처럼 부드럽게 변형시킨 이후
원본영상에서 부드러워진 영상의 차영상을 구하게 되면 실제 날카로운 부분만 남게되어
언샤프 마스크 생성이 가능해진다.
마지막으로 원본영상과 언샤프마스크를 필터링 시켜주면 픽셀이 변하는 구간들을 강조하는 형태의
변환이 일어난다.
원본영상에서의 엣지의 픽셀값 Min Max 차이와 언샤프마스크 필터링을 거친 엣지의 픽셀값 Min Max 차이를 비교하면언샤프 마스크 필터링을 거친 엣지의 픽셀값의 Min Max 차이가 더 큰 것을 볼 수 있는데
결국 이 필터는 엣지 부근에서 Contrast를 높여주게 되는 효과를 얻을 수 있는 것이다.
하지만 이 필터링은 OpenCV에서 제공되지 않는 함수이기 때문에 직접 구현해줘야한다는 단점이 있다.
실제로 구현을 시켜주면원본영상에서 Gaussianbluring 된 영상의 차영상을 subtract 함수를 사용하여 구해준다.
하지만 위 영상은 직관적으로 보기 힘들기 때문에
addWeighted( src, 1 , blr , -1 , 128 ) 의 함수를 사용해서
첫번째 영상에는 1의 가중치 bluring 된 영상에는 -1의 가중치를 주고
결과에 128의 픽셀값을 더해서 보면 아래와같은 결과값이 나타난다.
위처럼 원본영상에 가중치를 주고 bluring 영상에는 - 가중치를 두어 두개의 차를 구할 수 있고
이를 이용하면 언샤프 마스크 필터를 사용할 수 있다.
또는
np.clip 함수를 사용할 수도 있는데
뒤 인자는 float 형태의 값을 받을 수 있도록 인자를 넣어주어야 한다.
np.clip ( 2.0 * src blr, 0, 255 ).astype( np.uint8 ) 함수를 사용하여 dst 영상을 만들어줄 수도 있다.
- 언샤프 마스크 필터 구현하기 * 샤프닝 정도를 조절할 수 있도록 수식 변경 h( x,y ) = f( x,y ) + Alpha * g( x, y ) 여기서 Alpha가 나타내는 것은 위 g(x) 함수의 가중치를 의미한다.
위 수식을 풀면
위와같은 수식으로 전개될 수 있는데
Gaussian Filter 결과값에 -Alpha를 곱하고
엽력영상에 +Alpha를 곱하는 연산을 할수 있다.
즉, Alpha값에 얼마를 주는지에따라 언샤프 마스크 필터링을 조절할 수 있다.
- 컬러영상에 대한 언샤프 마스크 필터 구현하기
일단 rose.bmp를 컬러영상으로 불러온 뒤YCrCb 컬러형태로 변형한 뒤 색상성분은 그대로 둔 뒤 밝기성분 ( Y ) 만 조절하여 언샤프 필터링을 진행할 수 있다.
그래서 src_f = src_ycrcb [ :, :, 0].astype(np.float32) 의 함수를 사용하여 전체좌표 , 첫번째 색성분에 해당하는 영상만을추출하여 float32 형태로 src_f에 저장한 뒤 ,해당 영상을 가우시안 필터링하고
원본영상과 언샤프 필터링을 진행해 준다.
여기서 float32 형태로 저장한 이유는
GaussianBlur 의 출력영상의 타입이 입력영상의 타입과 같게끔 설정이 되는데 ( blr = 실수타입 )
그렇게되면 GaussianBlur 의 출력영상이 int 의 정수타입으로 출력될때보다 소수점자리가 더 많이 표현되기 때문에
더 섬세하게 표현될 수 있다.
따라서 , 좀 더 정교하게 갖기위해서 중간단계의 결과들은 실수형태를 가지는게 좋고
결과를 출력할때만 int 의 정수형으로 출력하는것이 좋다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Program > OPEN_CV' 카테고리의 다른 글
[Open CV] 필터링 _ 실전 코딩 ( 카툰 필터 카메라 ) (0) | 2022.05.21 |
---|---|
[Open CV] 필터링 _ 잡음제거 _ 양방향 필터 (0) | 2022.05.20 |
[Open CV] 필터링 _ 잡음제거 _ 미디언 필터 (0) | 2022.05.18 |
[Open CV] 필터링 _ 블러링 _ 가우시안 필터 (0) | 2022.05.17 |
[Open CV] 필터링 _ 블러링 _ 평균값 필터 (0) | 2022.05.16 |