해당 포스트는 "열혈강의 영상처리 프로그래밍" 책의 내용을 요약한 것이다.



※ 영상의 광학적 변환

: 영상의 밝기와 색 특성 등을 목적에 따라 변환시키는 것으로, 사람이 눈으로 보기에 더 좋은영상을 만들거나, 다른 영상 처리 알고리즘을 수행하기에 앞서 더 좋은 입력 영상을 제공하기 위한 수단이다.



※ 영상의 밝기와 명암 조절

: 영상의 밝기와 명암 조절은 영상 특성값들 가운데서도 영상이 눈에 잘 보이도록 조절할 수 있는 가장 중요한 특성이다. 영상의 사칙 연산에서 영상의 덧셈과 뻴셈이 밝기 조절에 해당하고, 영상의 곱셈과 나눗셈이 명암 조절에 해당한다. 


1. 밝기 조절 : (결과 영상) = (입력 영상) + (밝기 조절 상수)

ex)

CByteImage image = imgeIn + 100;

2. 명암 조절 : (결과 영상) = {(입력 영상) - (밝기 조절 상수)} * (명암 조절 상수)

ex)

CByteImage image = (imageIn - 10) * 2;

명암 조절의 경우 명암 조절 상수를 곱하기 전에 밝기 조절 상수를 빼주는 것을 볼 수 있다. 그 이유는 1보다 큰 명암 조절 상수를 곱했을 때 모든 픽셀 값이 증가하여 영상 전체 밝기가 과도하게 증가하는 것을 보정하기 위한 것이다.



※ 자동 명암 조절

영상을 더욱 잘 보이게 하려면 밝기값과 명암 값을 적절하게 조합해야한다. 그렇지 않으면 영상의 특정 부분에 있는 사물을 알아보기 어려울 수 있다.

영상의 밝기가 너무 낮거나 높으면 어두운 부분이나 밝은 부분에서 밝기값 포화 상태가 발생하여 이 부분의 정보가 사라지는 문제가 있다. 위 사진을 보다시피 밝기 왼쪽 그림은 어두운 부분을 거의 알아볼 수 없고 오른쪽 그림은 밝은 부분을 거의 알아볼 없다. 또한 영상이 너무 낮으면 명암 왼쪽 그림과 같이 밝은 부분과 어두운 부분의 밝기 차이가 줄어들어 영상이 전체적으로 탁하게 보이게 된다. 명암이 너무 넢으면 오른쪽 그림과 같이 밝은 부분이나 어두운 부분에서 포화상태가 발생할 수 있는 문제점이 있다.


그래서 우리 눈에 잘 보이는 적절한 밝기와 명암 값을 가지는 영상이란 밝은 부분과 어두운 부분의 차이가 충분히 들어나면서 각 부분에서 포화상태가 나타나지 않는 영상이다. 즉, 밑의 그림과 같이 밝기값의 차이를 증폭시키면서도 밝기의 최댓값과 최솟값이 각각 255와 0을 넘어가지 않도록 하면 가장 또렷하게 보이는 영상을 만들 수 있다.

위 그림은 그래프의 가로축은 영상을 1차원이라고 가정했을 때 픽셀의 위치이고 세로 축은 각 픽셀의 밝기값이다. 자동으로 적절한 밝기와 명암을 찾으려면 최소 밝기를 0으로 최대 밝기를 255로 하여 밝기값의 모든 영역을 활용하게 하면 된다. 이를 수행하는 픽셀 값 변환 식은 다음과 같다.


(결과 영상) = {(입력 영상) - (최소 밝기)}/{(최대 밝기) - (최소 밝기)} * 255


입력 영상에서 최소 밝기를 뺌으로써 최소 밝기값을 0으로 만들어주고 거기에 최대 밝기에서 최소 밝기 뺀 값을 나눈 후 255를 곱해 최대 밝기값을 255로 만들어 명암을 최대한 증가 시켰다. 

하지만 위와 같은 변환은 단순히, 명암을 조절할 때 영상의 밝기에 상수 값을 곱하는 선형 변환을 수행한 것이기에 영상이 보기 많이 좋아지기에는 제한되는 부분이 많다. 또한 이 방법은 원본 영상에 최소 밝기가 0인 픽셀과 최대 밝기가 255인 픽셀이 있을 경우 명암이 전혀 개선되지 않는 문제점이 있다. 더 나은 영상을 얻으려면 밝기값이 0에서 255 사이에 골고루 분포해야 하는 데 이 때 영상의 히스토그램을 이용하면 된다. 이에 대한 부분은 다음에 다룰 예정이다.


+ Recent posts