히스토그램 평활화
개요
히스토그램(Histogram)은 데이터의 분포를 그래프 형태로 시각화한 것이다. 이는 데이터 집합의 각 부분 또는 값의 빈도수를 보여주며, x축(계급, 카테고리)과 y축(빈도)으로 이루어져 있다. 히스토그램은 데이터의 형태, 중심, 분포, 변동, 이상치 등을 빠르게 파악하는 데 유용하다.
디지털 영상 처리에서 히스토그램은 각 픽셀 값이 얼마나 자주 등장하는지를 표현한다. 즉, x축으로는 이미지의 각 픽셀 밝기를, y축으로는 픽셀 수를 표현한다. 이미지 f(x, y) 함수를 정규화되지 않은 히스토그램으로 표현하면 다음과 같다.
여기서 rk는 k번째 계급을 의미하고, nk는 f(x, y)에서의 픽셀 수를 의미한다. 이 형태의 히스토그램은 이미지에서 각 밝기 레벨의 빈도수를 직접적으로 보여준다. 만약 이를 이미지의 크기로 정규화하면 다음과 같이 수식화할 수 있다.
여기서 p(rk)는 픽셀 값이 rk인 확률을 나타낸다. 여기서 히스토그램을 정규화했을 때, 히스토그램이 확률 분포로 바뀜으로써 다양한 통계적 분석과 처리를 수행할 수 있게 된다. 또한 다양한 크기의 이미지 간 히스토그램을 균일하게 비교할 수 있다.
이번 시간에는 이러한 이미지의 히스토그램을 다뤄보는 시간을 가지도록 하겠다.
본문
히스토그램의 분포와 이미지 밝기 관계
다음과 같은 이미지 샘플이 있다고 가정해 보자. 지금부터 이미지의 밝기와 히스토그램의 분포의 관계에 대해 살펴보도록 하겠다.
Ig = rgb2gray(imread('histo_ex.jpg'));
figure(1);
subplot(1,2,1); imshow(Ig, []);
subplot(1,2,2); histogram(double(Ig), 0:255);
매트랩에서는 배열에 해당하는 요소들을 히스토그램화시켜주는 histogram() 함수가 존재한다. 이 분포를 움직여, 이미지의 밝기/대비와 어떤 관계에 있는지 확인해 보자.
1. 전체적인 밝기를 낮출 때
Ig = rgb2gray(imread('histo_ex.jpg'));
for cnt = 1:30
Ig = Ig - 1;
plotHistogram(Ig);
end
function plotHistogram(Ig)
figure(2);
subplot(1,2,1); imshow(Ig);
subplot(1,2,2); histogram(double(Ig), 0:255);
end
2. 전체적인 밝기를 높일 때
Ig = rgb2gray(imread('histo_ex.jpg'));
figure(3);
for cnt = 1:40
Ig = Ig + 3;
plotHistogram(Ig);
end
function plotHistogram(Ig)
figure(2);
subplot(1,2,1); imshow(Ig);
subplot(1,2,2); histogram(double(Ig), 0:255);
end
3. 중앙으로 모았을 때
Ig = rgb2gray(imread('histo_ex.jpg'));
center_value = median(double(Ig(:)));
target_value = uint8(255/2);
figure(4);
while median(double(Ig(:))) ~= target_value
Ig = Ig + 1;
plotHistogram(Ig);
end
function plotHistogram(Ig)
figure(4);
subplot(1,2,1); imshow(Ig);
subplot(1,2,2); histogram(double(Ig), 0:255);
end
이 코드는 Ig의 중앙값을 이용해 히스토그램을 중앙으로 옮기는 코드다. 즉, center_value를 계산해, 이 값이 target_value가 될 때까지 Ig를 1씩 더해주는 코드다.
여기서 이미지의 대비와, 밝기가 바뀌면 히스토그램이 변화한다는 사실을 알 수 있다.
- 히스토그램이 왼쪽에 몰렸을 때: 밝기가 어두워짐
- 히스토그램이 오른쪽에 몰렸을 때: 밝아짐
- 히스토그램이 중앙에 몰렸을 때: 대비가 낮아짐
그렇다면 전체적인 이미지의 품질을 히스토그램을 이용하여 높이려면 어떻게 해야 할까? 해당 내용은 다음 포스트에서 다루도록 하겠다.
'CS > 디지털영상처리' 카테고리의 다른 글
[디지털영상처리] Histogram Processing (1) (2) | 2023.10.16 |
---|---|
[디지털영상처리] Histogram Equalization (2) (0) | 2023.10.13 |
[디지털영상처리] Intensity Transformation(2) (2) | 2023.10.08 |
[디지털영상처리] Intensity Transformation(1) (2) | 2023.10.07 |
[디지털영상처리] Resolution (2) | 2023.10.03 |