Opencv - 감마 보정을 이용한 이미지의 대비 및 밝기 변경

 목표

1. 픽셀 값에 접근 방법

2. saturate_cast 기능과 사용 이유

3. 이미지를 개선하는 실제 예

이미지 처리

1. 일반적인 이미지 처리 연산은 하나 이상의 입력 이미지를 가져와 하나의 이미지를 출력하는 기능이다.

2. 이미지 변환은 포인트 연산과, 이웃 연산(지역 기반)이 있다.

포인트 연산 처리

alpha와 beta는 이미지 밝기와 대비를 조절한다.




소스 코드















이미지 픽셀 값에 접근 하기

image.at<Vec3b>(y, x)[c] y는 행, x는 열, c는 RGB이다.

saturate_cast<uchar>(input)

input의 값을 0에서 255의 값으로 Clamp 시켜준다

실행 모습, 왼쪽 : 원래 이미지, 오른쪽 : 대비 0.5, 밝기 100 이미지 









감마를 이용한 이미지의 밝기와 대비 조정

히스토그램은 각 색상 레벨에 대해 픽셀 수를 나타낸다. 어두운 이미지는 낮은 색상 값을  가진 픽셀이 많고, 일정한 바이어스를 더하면 히스토그램이 오른쪽으로 이동하여 이미지 톤이 밝아진다

alpha 매개 변수는 수준이 퍼지는 레벨을 수정한다. 1보다 작으면 전체적인 색상이 압축되고 대비가 적은 이미지가 된다.

밝기가 향상되었지만 채도로 인해 구름이 클리핑되었다.









선형 변환을 하면 클리핑 연산에 의해 색상이 버려질 수 있다. 감마 보정을 이용해 입력 값과 맵핑된 출력 값 사이에 비선형 변환을 사용하여 이미지의 밝기를 보정한다.

감마 보정 공식




감마 값에 따른 그래프











감마 보정 소스 코드















감마 보정된 이미지 - 선형변환시 사라진 구름이 많이 개선되었다











댓글

이 블로그의 인기 게시물

게임 엔진 - Axis Gizmo