Bongsu

히스토그램 평활화 (Histogram Equalization) 본문

컴퓨터비전

히스토그램 평활화 (Histogram Equalization)

bmsoo 2023. 7. 10. 23:15

지난 영상 처리의 기본 연산 포스팅에서 언급한 점 연산 중 히스토그램 평활화에 대해 다루고자 한다.

 

(아래 영상 처리의 기본 연산에 대한 글을 첨부해 두었으니 참고! )

 

2023.07.06 - [컴퓨터비전] - 영상 처리의 기본 연산(점 연산, 영역 연산, 기하 연산)

 

영상 처리의 기본 연산(점 연산, 영역 연산, 기하 연산)

이번 포스팅에서는 영상 처리의 기본 연산 3가지인 점 연산, 영역 연산, 기하 연산을 다루고자 한. 각 연산의 정의부터 알아보자. 1. 점 연산 : 점 연산은 이미지의 크기, 기하학 구조 및 로컬 구조

bmsoo.tistory.com

 

히스토그램 평활화(Histogram Equalization)란, 간단히 말하자면 명암 대비를 높여 영상에 있는 물체를 잘 식별할 수 있게 하는 것이다.

 

그런데 왜 히스토그램이 등장했을까?

 

우리의 영상은 실제로 화소값을 통해 이미지를 표현한다. 이러한 이미지에 대한 화소값의 빈도를 나타낸다면? 이라는 생각에서 히스토그램이 등장하게 된다.

 

히스토그램 평활화는 주로 밝기 성분에 대해서 이루어진다. 이유인 즉슨, RGB 필터 각각에 히스토그램 평활화를 수행하게 된다면, 각 필터 요소의 범위가 다르기 때문에 아래와 같은 문제가 발생할 수 있다.

https://overface.tistory.com/597

즉, 대부분의 영상은 밝기 스케일에 대해 히스토그램 평활화를 수행하여 명암 대비를 조절하게 된다.

이때, 각자가 생각하는 명암 영상으로 전처리 방법은 다를 수 있으니 이 부분은 생략하도록하겠다.  (그레이 스케일로 변환 BGR2GRAY, 밝기 성분 추출 BGR2YCrCb 등)

 

히스토그램 평활화는 누적 정규화 히스토그램을 가지고 새로운 명암값을 추출한다.

 

갑자기 결론부터 덩그러니 적어놓아서 이해가 어려울 수 있으니 표를 통해 차근차근 살펴보자.

 

  • l : 기존 영상의 명암값
  • H : 기존 영상 명암값의 빈도
  • h (정규화 히스토그램) : 모든 칸의 값을 더하면 1이 되는 히스토그램
  • h_cuml (누적 정규화 히스토그램) : 정규화 히스토그램의 누적 히스토그램 (i 번째 칸의 값 = 1 ~ (i-1) 번째 칸의 값의 합)
  • l' (새로운 명암값) = h_cuml * (L-1) 의 반올림 값
l H h h_cuml h_cuml * 5 l'
0 8 0.16 0.16 0.8 1
1 10 0.2 0.36 1.8 2
2 12 0.24 0.60 3 3
3 6 0.12 0.72 3.6 4
4 9 0.18 0.9 4.5 5
5 5 0.1 1.0 5.0 5

 

즉 원래 명암값 l은 히스토그램 평활화를 거쳐 새로운 명암값인 l' 을 얻게 되는 것이다.

 

이를 수식으로 표현하면 아래와 같이 표현할 수 있다.

 

 

 

 

히스토그램 평활화를 수행한 예시를 보면 아래와 같다.

 

 

OpenCV에서는 이러한 히스토그램 평활화를 cv2.equalizeHist(src, dst) 를 통해 지원하니 요긴하게 쓰면 될 것 같다.