pi92 2021. 9. 12. 21:13

5.1 영상의 밝기 조절


5.1.1 그레이스케일 영상 다루기


OpenCV에서 영상 파일을 그레이스케일 형태로 불러오려면 imread() 함수의 두 번째 인자에 IMREAD_GRAYSCALE 플래그를 설정해야 합니다.

Mat img1 = imread(“lenna.bmp”, IMREAD_GRAYSCALE);

그레이스케일 영상을 저장할 새로운 Mat 객체를 생성하려면 CV_8UC1 타입의 객체를 생성해야 합니다.

Mat img2(480, 640, CV_8UC1, Scalar(0));

만약 이미 3채널 컬러 영상을 가지고 있고, 이 영상을 그레이스케일 영상으로 변환하려면 cvtColor() 함수를 사용합니다. 다음 코드는 3채널 컬러 영상을 1채널 그레이스케일 영상으로 변환하는 코드입니다.

Mat img3 = imread(“lenna.bmp”, IMREAD_COLOR);
Mat img4;
cvtColor(img3, img4, COLOR_BGR2GRAY);

 

5.1.2 영상의 밝기 조절

 

영상의 밝기(brightness) 조절이란 영상의 전체적인 밝기를 조절하여 좀 더 밝거나 어두운 영상을 만드는 작업

dst(x,y) = src(x,y) + n

원소 자료형이 가질 수 있는 값의 범위를 벗어나는 경우 해당 자료형의 최솟값 또는 최댓값으로 원소 값을 설정하는 연산을 OpenCV에서는 포화(saturate) 연산이라고 부릅니다. uchar 자료형을 사용하는 그레이스케일 영상에 대해 포화 연산을 수식으로 나타내면 다음과 같습니다.

 

 

5.1.3 영상의 밝기 조절 직접 구현하기

 

5.1.4 트랙바를 이용한 영상의 밝기 조절


5.2 영상의 명암비 조절

 

5.2.1 기본적인 명암비 조절 방법
명암비란 영상에서 밝은 영역과 어두운 영역 사이에 드러나는 밝기 차이의 강도를 의미하고, 명암 대비 또는 콘트라스트(contrast)라고도 합니다.

 

 


5.2.2 효과적인 명암비 조절 방법

명암비를 효과적으로 높이기 위해서는 밝은 픽셀은 더욱 밝게, 어두운 픽셀은 더욱 어두워지게 변경해야 합니다. 이때 픽셀 값이 밝고 어둡다는 기준을 어떻게 설정할 것인지가 명암비 조절 결과 영상의 품질 차이를 가져올 수 있습니다.


5.3 히스토그램 분석

 

영상의 히스토그램(histogram)이란 영상의 픽셀 값 분포를 그래프 형태로 표현한 것을 의미합니다. 그레이스케일 영상의 경우, 각 그레이스케일 값에 해당하는 픽셀의 개수를 구하고 이를 막대 그래프 형태로 표현함으로써 히스토그램을 구할 수 있습니다. 컬러 영상에 대해서도 세 개의 색상 성분 조합에 따른 픽셀 개수를 계산하여 히스토그램을 구할 수 있습니다.

 

OpenCV에서 영상의 히스토그램을 구하려면 calcHist() 함수를 사용합니다. calcHist() 함수는 한 장의 영상뿐만 아니라 여러 장의 영상으로부터 히스토그램을 구할 수 있고, 여러 채널로부터 히스토그램을 구할 수도 있습니다. 또한 히스토그램 빈 개수도 조절할 수 있습니다. 다양한 형식의 히스토그램 생성을 지원하기 때문에 calcHist() 함수의 사용법은 꽤 복잡한 편입니다. calcHist() 함수 원형과 인자에 대한 설명은 다음과 같습니다.

 

5.3.2 히스토그램 스트레칭

히스토그램 스트레칭(histogram stretching)은 영상의 히스토그램이 그레이스케일 전 구간에 걸쳐서 나타나도록 변경하는 선형 변환 기법입니다. 보통 명암비가 낮은 영상은 히스토그램이 특정 구간에 집중되어 나타나게 되는데, 이러한 히스토그램을 마치 고무줄을 잡아 늘이듯이 펼쳐서 히스토그램 그래프가 그레이스케일 전 구간에서 나타나도록 변환하는 기법입니다. 히스토그램 스트레칭을 수행한 영상은 명암비가 높아지기 때문에 대체로 보기 좋은 사진으로 바뀌게 됩니다.

 

 

5.3.3 히스토그램 평활화


히스토그램 평활화(histogram equalization)는 히스토그램 스트레칭과 더불어 영상의 픽셀 값 분포가 그레이스케일 전체 영역에서 골고루 나타나도록 변경하는 알고리즘의 하나입니다. 히스토그램 평활화는 히스토그램 그래프에서 특정 그레이스케일 값 근방에서 픽셀 분포가 너무 많이 뭉쳐 있는 경우 이를 넓게 펼쳐 주는 방식으로 픽셀 값 분포를 조절합니다. 히스토그램 평활화는 히스토그램 균등화 또는 히스토그램 평탄화라는 용어로도 번역되어 사용되고 있습니다.

 

히스토그램 누적 함수 H(g)는 다음 수식으로 정의됩니다.

만약 입력 영상의 픽셀 개수를 N이라고 표기하면 히스토그램 평활화는 다음과 같은 형태로 정의됩니다.