2007년 8월 9일 목요일

Histogram equalization

웬 뜬금 없는 Image Processing이냐 하시겠지만,
처음 관심 있었던 것이 사용자 표정 인식이었었기 때문에...

히스토그램 균등화란 gray-level에서 좁은 영역에 존재하는 픽셀들을 gray-level 전 영역으로 확장시켜 이미지의 pixel 값들이 전체 gray-level에 넓게 퍼져 이미지가 좀 더 잘 보이도록 만드는 것이다.

예를 들면 만약 한 이미지가 gray-level 0에서 10에 분포하고 있다고 하자. 이러한 이미지는 너무 어두워 식별하기가 거의 불가능 하다. 이때 Histogram Equlalization을 사용해서 0-10의 gray-level에 존재하는 pixel값들을 0-255등의 넓은 영역의 gray-level로 확장시킨다. 그러면 어두워 식별이 어려웠던 이미지가 개선되어질 것이다.

수식으로 복잡한 Histogram Equalization을 한 예로 이해해 보자.
앞서 설명한 것처럼 0-10의 gray-level에 픽셀들이 다음 처럼 존재한다고 생각하자.
gray-level pixel개수
0 5
1 5
2 3
3 2
4 8
5 10
6 3
7 5
8 1
9 2
10 6

Step1 : pixel의 전체 개수를 구한다.
5 + 5 + 3 + 2 + 8 + 10 + 3 + 5 + 1 + 2 + 6 = 50

Step2 : 각 gray-level의 확률 분포를 구한다.
gray-level 누적 확률
0 5/50 = 0.1
1 (5/50 = 0.1) + 0.1 = 0.2
2 (3/50 = 0.06) + 0.2 = 0.26
3 (2/50 = 0.04) + 0.26 = 0.3
4 (8/50 = 0.16) + 0.3 = 0.46
5 (10/50 = 0.2) + 0.46 = 0.66
6 (3/50 = 0.06) + 0.66 = 0.72
7 (5/50 = 0.1) + 0.72 = 0.82
8 (1/50 = 0.02) + 0.82 = 0.84
9 (2/50 = 0.04) + 0.84 = 0.88
10 (6/50 = 0.12) + 0.88 = 1.0

Step3 : 확장하고 싶은 gray-level의 최대 값을 각 확률에 곱해 전 영역에 골고루 퍼지도록 한다.
gray-level 균등화된 새로운 gray-level 값
0 0.1 * 255 = 25.5(반올림) = 26
1 0.2 * 255 = 51
2 0.26 * 255 = 66.3 = 66
3 0.3 * 255 = 76.5 = 77
4 0.46 * 255 = 117.3 = 117
6 0.66 * 255 = 168.3 = 168
7 0.72 * 255 = 183.6 = 187
8 0.82 * 255 = 209.1 = 209
9 0.84 * 255 = 214.2 = 214
10 0.88 * 255 = 224.4 = 224

Step4 : 이제 다시 이미지를 그려준다.
0의 gray값을 같던 pixel들은 26의 그레이 값으로,
4의 gray값을 같던 pixel들은 117의 그레이 값으로,
10의 gray값을 같던 pixel들은 224의 그레이 값으로, 등등

결국 0-255의 전체 그레이레벨로 확장될 것이다.

댓글 없음: