히스토그램 평탄화

섬네일|오른쪽|300px|alt=중앙 영역에 강한 피크가 포함된 히스토그램이 피크 영역을 늘려 전체 x축을 채우도록 변환되는 모습.|평탄화 전후 이미지의 히스토그램.

**히스토그램 평탄화**(Histogram equalization)는 영상 처리에서 이미지 히스토그램을 사용하여 대비를 조정하는 방법이다.

히스토그램 평탄화는 더 일반적인 클래스인 히스토그램 재매핑 방법의 특수한 사례이다. 이러한 방법들은 분석을 용이하게 하거나 시각적 품질(예: retinex)을 개선하기 위해 이미지를 조정하는 것을 목표로 한다.

## 개요
이 방법은 대개 많은 이미지의 전역 대비를 증가시키며, 특히 이미지가 좁은 범위의 강도 값으로 표현될 때 효과적이다. 이러한 조정을 통해 히스토그램에서 광도가 더 잘 분산되어 전체 강도 범위를 고르게 활용할 수 있게 된다. 이를 통해 국부적 대비가 낮은 영역이 더 높은 대비를 얻을 수 있다. 히스토그램 평탄화는 이미지 대비를 저하시키는 경향이 있는 밀집된 강도 값들을 효과적으로 넓게 펼침으로써 이를 수행한다.

이 방법은 배경과 전경이 모두 밝거나 모두 어두운 이미지에서 유용하다. 특히 엑스선 영상에서 뼈 구조를 더 잘 보여주거나, 과다 노출 또는 과소 노출된 사진에서 세부 묘사를 개선하는 데 도움이 될 수 있다. 이 방법의 주요 장점은 입력 이미지에 적응하는 상당히 간단한 기술이며 역연산이 가능하다는 점이다. 따라서 이론적으로 히스토그램 평탄화 함수를 알 수 있다면 원래의 히스토그램을 복구할 수 있다. 계산은 컴퓨테이션 집약적이지 않다. 이 방법의 단점은 무분별하다는 점이다. 배경의 신호 잡음 대비를 높이는 동시에 유용한 신호를 감소시킬 수 있다. 강도 신호보다 공간적 상관관계가 더 중요한 과학적 이미징(양자화된 길이의 DNA 조각 분리 등)에서는 낮은 신호 대 잡음비로 인해 시각적 탐지가 방해받는 경우가 많다.

히스토그램 평탄화는 사진에서 비현실적인 효과를 내는 경우가 많으나, 열화상, 인공위성 또는 엑스선 이미지와 같은 과학적 이미지에는 매우 유용하며, 종종 폴스 컬러(false-color)를 적용하는 것과 동일한 종류의 이미지에 사용된다. 또한 낮은 색 깊이를 가진 이미지에 적용할 경우 바람직하지 않은 효과(가시적인 이미지 그라디언트 등)가 나타날 수 있다. 예를 들어, 8비트 그레이스케일 팔레트로 표시되는 8비트 이미지에 적용하면 이미지의 색 깊이 (고유한 회색 음영의 수)가 더욱 감소한다. 히스토그램 평탄화는 연속 데이터나 16비트 그레이스케일 이미지와 같이 팔레트 크기보다 훨씬 높은 색 깊이를 가진 이미지에 적용될 때 가장 효과적이다.

히스토그램 평탄화를 생각하고 구현하는 방법에는 이미지 변경 또는 팔레트 변경의 두 가지 방식이 있다. 이 연산은 P(M( I ))로 표현될 수 있으며, 여기서 I는 원래 이미지, M은 히스토그램 평탄화 매핑 연산, P는 팔레트이다. 만약 새로운 팔레트를 P' = P(M)으로 정의하고 이미지 I를 변경하지 않은 채로 둔다면 히스토그램 평탄화는 팔레트 변경 또는 매핑 변경으로 구현된다. 반면에 팔레트 P가 변경되지 않고 이미지가 I ' = M(I)로 수정된다면 이미지 변경을 통해 구현된 것이다. 대부분의 경우 원본 데이터를 보존하는 팔레트 변경 방식이 선호된다.

이 방법의 변형으로, 전체적인 전역 대비보다는 국부적 대비를 강조하기 위해 하위 히스토그램(subhistograms)이라고 불리는 여러 히스토그램을 사용하는 방식이 있다. 이러한 방법의 예로는 적응형 히스토그램 평탄화(adaptive histogram equalization)와 대비 제한 적응형 히스토그램 평탄화(CLAHE), 다중 피크 히스토그램 평탄화, 다목적 베타 최적화 이중 히스토그램 평탄화(MBOBHE) 등이 있다. 이러한 방법들, 특히 MBOBHE의 목표는 밝기 평균 이동과 세부 정보 손실 아티팩트를 발생시키지 않으면서 대비를 개선하도록 알고리즘을 수정하는 것이다.

히스토그램 평탄화와 동등한 신호 변환은 입력 통계의 함수로서 뉴런의 출력 발화율을 최대화하기 위해 생물학적 신경망에서도 일어나는 것으로 보인다. 이는 특히 파리목의 망막에서 입증되었다.

### 역투영 (Back projection)
히스토그램화된 이미지의 역투영은 픽셀 밝기 값에 대한 룩업 테이블(look-up table) 역할을 하며 수정된 히스토그램을 원래 이미지에 다시 적용하는 것이다.

모든 입력 단일 채널 이미지의 동일한 위치에서 가져온 각 픽셀 그룹에 대해, 함수는 히스토그램 빈(bin) 값을 대상 이미지에 배치하며, 여기서 빈의 좌표는 이 입력 그룹의 픽셀 값에 의해 결정된다. 통계적 측면에서 각 출력 이미지 픽셀의 값은 해당 입력 픽셀 그룹이 히스토그램이 사용된 객체에 속할 확률을 나타낸다.

## 구현
이산적인 그레이스케일 이미지 X를 고려하고 n_i를 회색 레벨 i의 발생 횟수라고 하자. 이미지 X에서 균일하게 무작위로 선택된 픽셀 값이 i일 확률은 다음과 같다.
:\ p_X(i) = \frac{n_i}{n},\quad 0 \le i 
여기서 L은 이미지의 총 회색 레벨 수이고, n_i는 값이 i인 이미지의 픽셀 수이며, n은 이미지의 총 픽셀 수이다. 그러면 p_X(i)는 전체 면적이 1이 되도록 정규화된 i에 대한 이미지 히스토그램 값이다.

그 다음 이미지 X에 있는 픽셀의 누적 분포 함수를 정의해 보자. 값 i에 대하여 다음과 같다.
:\operatorname{cdf}_X(i) = \sum_{j=0}^i p_X(j),
이는 이미지의 누적 정규화 히스토그램이기도 하다.

우리는 평탄한 히스토그램을 갖는 새 이미지 Y를 생성하기 위해 T:[0,L-1] \rightarrow [0,L-1] 형태의 변환을 만들고자 한다. 그러한 이미지는 값 범위에 걸쳐 선형화된 누적 분포 함수(CDF)를 갖게 될 것이다. 즉,
:\operatorname{cdf}_Y(i) = (i+1) K (단,  0 \le i )
여기서 K는 상수이다. CDF의 특성을 통해 이러한 변환을 수행할 수 있다(역분포 함수 참조). 이는 다음과 같이 정의된다.
:\ T(i) = \operatorname{cdf}_X(i)
여기서 \ i 의 범위는  [0,L-1] 이다. X의 정규화된 히스토그램을 사용했으므로 \ T 는 레벨을 [0,1] 범위로 매핑한다는 점에 유의하라. 값을 원래 범위로 다시 매핑하려면 변환된 각 이미지 값 k에 다음과 같은 간단한 변환을 적용해야 한다.
:\ k^\prime = k \cdot(\max(i) - \min(i)) + \min(i)= k \cdot(L- 1)

k 는 실수 값인 반면 \ k^\prime 은 정수여야 한다. 직관적이고 널리 쓰이는 방법은 반올림 연산을 적용하는 것이다.
:\ k^\prime = \operatorname{round} (k \cdot(L- 1)).
그러나 정밀한 분석 결과는 약간 다른 공식을 도출한다. 매핑된 값 k^\prime 은 0 범위에서 0이어야 한다. 그리고 1/L 에서 k^\prime =1, 2/L 에서 k^\prime = 2 , ... , 그리고 마지막으로 (L-1)/L 에서 k^\prime =L-1이어야 한다. 그러면 k에서 k^\prime 으로의 양자화 공식은 다음과 같아야 한다.

k^\prime=\operatorname{ceil}(L \cdot k)-1 .

(참고: k=0 일 때 k^\prime=-1 이 되지만, k=0 은 해당 값에 해당하는 픽셀이 없음을 의미하므로 발생하지 않는다.)

## 컬러 이미지에서의 활용
위에서 설명한 히스토그램 평탄화는 그레이스케일 이미지에서 작동한다. 컬러 이미지에도 사용할 수 있다. 한 가지 방법은 이미지의 RGB 컬러 값 중 빨강, 초록, 파랑 구성 요소에 개별적으로 이 방법을 적용하는 것이지만, 이는 알고리즘 적용 결과로 색상 채널의 상대적 분포가 변하기 때문에 이미지의 색조화에 급격한 변화를 일으킬 가능성이 크다. 그러나 이미지를 먼저 다른 색 공간, 특히 Lab 또는 HSL/HSV로 변환한 후, 이미지의 색상 특성을 변경하지 않고 휘도나 명도(value) 채널에 알고리즘을 적용할 수 있다.

3D 공간에서의 여러 히스토그램 평탄화 방법이 있으며, 이는 미백(whitening), 즉 밝은 픽셀의 확률이 어두운 픽셀보다 높아지는 결과를 초래한다. 한지희(Han) 등은 ISO-휘도 평면으로 정의된 새로운 CDF를 사용할 것을 제안했으며, 이는 균일한 그레이 분포를 가져온다.

## 예시
평탄화 작업 과정은 작은 이미지로 가장 잘 설명된다. 전체 크기 이미지는 이 과정을 통해 얻을 수 있는 전반적인 결과를 보여준다.

### 작은 이미지
섬네일|256px|8비트 그레이스케일로 표시된  하위 이미지
표시된 8비트 그레이스케일 이미지는 다음 값을 갖는다.

이 이미지의 히스토그램은 다음 표와 같다. 간결함을 위해 개수가 0인 픽셀 값은 제외했다.
:

누적 분포 함수(CDF)는 아래와 같다. 다시 한번, 함수 값의 증가에 기여하지 않는 픽셀 값은 간결함을 위해 제외했다.
: (참고로 h(v)=\operatorname{ceil}(\operatorname{CDF}(v))-1  버전은 아직 그림에 반영되지 않았다.)

이 CDF는 하위 이미지의 최솟값이 52이고 최댓값이 154임을 보여준다. 값 154에 대한 64의 CDF는 이미지의 픽셀 수와 일치한다. CDF는 [0,255]로 정규화되어야 한다. 일반적인 히스토그램 평탄화 공식은 다음과 같다.

:
h(v) =
 \mathrm{round}
 \left(
   \frac {\operatorname{CDF}(v) - \operatorname{CDF}_{\min}} {(M \times N) - \operatorname{CDF}_{\min}}
   \times (L - 1)
 \right)


여기서 \operatorname{CDF}_{\min}은 누적 분포 함수의 0이 아닌 최솟값(이 경우 1)이고, M \times N은 이미지의 픽셀 수(위 예에서는 64이며, M은 너비, N은 높이)이며, L은 사용된 회색 레벨의 수(이 경우와 같이 대부분 256)이다.

원래 데이터에서 0보다 큰 값을 1에서 L-1까지의 범위로 조정하려면 위 식은 다음과 같이 바뀔 것이다.

:
h(v) =
 \mathrm{round}
 \left(
   \frac {\operatorname{CDF}(v) - \operatorname{CDF}_{\min}} {(M \times N) - \operatorname{CDF}_{\min}}
   \times (L - 2)
 \right) + 1

단, cdf(v) > 0인 경우이다. 1에서 255까지로 스케일링하면 최솟값의 '0이 아님'이 유지된다.

데이터를 0에서 255까지의 범위로 스케일링하는 예제에 대한 평탄화 공식은 다음과 같다.

:
h(v) =
 \mathrm{round}
 \left(
   \frac {\operatorname{cdf}(v) - 1} {63}
   \times 255
 \right)


예를 들어 78의 CDF는 46이다. (78이라는 값은 마지막 행의 7번째 열에 사용되었다.) 정규화된 값은 다음과 같다.

:
h(78) =
 \mathrm{round}
 \left(
   \frac {46 - 1} {63}
   \times 255
 \right)
=
 \mathrm{round}
 \left(
   0.714286
   \times 255
 \right)
=
182


이 작업이 완료되면 평탄화된 이미지의 값은 정규화된 CDF에서 직접 가져와 평탄화된 결과를 생성한다.

최솟값 52는 이제 0이 되었고 최댓값 154는 이제 255가 되었음을 알 수 있다.

:

:

### 전체 크기 이미지

위 그래프에서 누적 히스토그램의 세로축 척도는 히스토그램의 척도와 다르다는 점에 유의하라. 두 그래프를 동일한 척도로 그린다면 누적 히스토그램이 히스토그램보다 훨씬 더 높게 나타날 것이다. 이는 히스토그램이 특정 값을 갖는 픽셀 수를 보여주는 반면, 누적 히스토그램은 주어진 값 이하의 총 픽셀 수를 세기 때문이다. 따라서 가장 높은 값에서의 누적 히스토그램은 이미지를 구성하는 총 픽셀 수와 같아야 한다.

또한 평탄화되지 않은 이미지의 히스토그램 세로축 척도는 평탄화된 이미지의 히스토그램 척도와 다르다. 두 히스토그램을 동일한 척도로 그린다면 평탄화된 이미지의 히스토그램 막대는 평탄화되지 않은 이미지의 막대보다 높이가 낮을 것이다.

## 같이 보기
* 디지털 화상 처리
* 히스토그램 매칭
* 영상 분할

## 각주

* Acharya and Ray, Image Processing: Principles and Applications, Wiley-Interscience 2005 
* Russ, The Image Processing Handbook: Fourth Edition, CRC 2002 
* "Histogram Equalization" at Generation5 

분류:영상 처리