2022.05.10 금일은 영상의 명암비 조절에 관한 강의였다.
명암비는 밝은 곳과 어두운 곳 사이에 드러나는 밝기 정도의 차이이다.
( Contrast , 대비 ) 라는 용어와도 같은 의미이다.
위 이미지처럼 명암비가 높을 수록 좀 더 선명한 영상을 가질 수 있다.
영상의 명암비를 조절하기 위해서는 아래와 같은 명암비 조절 함수를 사용할 수 있다.
저번 강의에서는 픽셀값에 일정 정수값을 더해서 밝기를 조절하는것이 아닌곱셈으로 대비값을 조절하는 함수이다.
dst ( x , y ) = saturate ( s * src ( x , y ) )
입력 영상에 s라는 기울기를 곱해서 출력할 수 있는데
이와 같은 함수를 사용하게 되면 0.5. or 2.0 을 곱했을때 명암이 아닌
밝기값만 너무 어두워지고 밝아지는 현상을
볼 수 있다.
그래서 위 함수보다는 약간 수식을 변경해서 아래 함수를 사용하는 것이 좋다.dst( x, y ) = saturate(src ( x, y ) + ( src( x, y ) - 128 ) * alpha )위 수식은 128 , 128 의 점을 무조건 지나게 되고 직선의 기울기가 alpha라는 값에 의해 조절되는수식이다.
하지만 , 위 수식이 전체적으로 밝기값이 고르게 분포되어있는 영상에서는 효과적으로 명암비를 조절할 수 있지만
전체적으로 어두운 밝기값 또는 밝은 밝기값으로 분포되어있는 영상에대해서는 효과적인 명암비 조절 수식이
아니라고 한다.
그리고 위와같은 수식을 사용하려고하면 아래 이미지와 같이 numpy를 사용하여 직접 수식을 만들어 사용해야한다.
* 위와같은 수식을 사용하여 np.clip 함수를 사용하여 0 ~ 255의 값이 나올 수 있도록 데이터처리를 해주어야한다.
위와같이 알파값을 적절하게 사용하여 영상처리를 할수도 있다.하지만 , 영상의 명암비를 자동으로 처리해주는 Histogram Stretching 기법을 사용해서 가장 적절한 명암비처리를해줄수도 있다.Histogram Stretching 기법은 영상의 히스토그램이 그레이스케일 전 구간에서 걸쳐 나타나도록 변경하는 선형 변환기법이다.쉽게말해서 전구간에 분포되어있는 픽셀값을 양쪽으로 잡아늘려서 0 ~ 255 의 값을 골고루 갖게끔 늘려주는 것이다.
하지만 이는 디지털 영상이기때문에 중간중간 없어지는 값들이 있음에 유의해야한다.기존 픽셀값의 최솟값과 최댓값을 0과 255로 변환시킨다고 생각하면 이해하기 쉽다.
OpenCV의 정규화 함수를 사용할 수 있다.cv2.normalize(src, dst, alpha , beta, norm_type, dtype, mask ) 의 인자중에서alpha ( 최솟값 ) 에 0, beta ( 최댓값 ) 에 255의 값을 넣고 norm_type 에 NORM_MINMAX 를 넣어주면 Histrogram Stretching 기법을 사용할 수 있다.
또는 직선의 방정식을 직접구해서 numpy 함수에 구현해서 사용할 수도 있는데 그보다는 위의 정규화함수를사용하는 것이 좋을 것 같다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Program > OPEN_CV' 카테고리의 다른 글
[Open CV] 기본적인 영상처리 기법 _ 특정 색상 영역 추출 (0) | 2022.05.12 |
---|---|
[Open CV] 기본적인 영상처리 기법 _ 히스토그램 평활화 (0) | 2022.05.11 |
[Open CV] 기본적인 영상처리 기법 _ 히스토그램 분석 (0) | 2022.05.10 |
[Open CV] 기본적인 영상처리 기법 _ 컬러 영상과 색 공간 (0) | 2022.05.08 |
[Open CV] 기본적인 영상처리 기법 _ 영상의 산술 및 논리 연산 (0) | 2022.05.07 |