CLAHE 알고리즘

개념

  • CLAHE(Contrast Limited Adaptive Histogram Equalization)는 기존 히스토그램 평활화의 단점을 개선한 고급 명암 대비 향상 기법. (참고: 3. 영상 히스토그램)
  • 기존 평활화는 영상 전체에 동일한 누적 분포 함수(CDF)를 적용하여 어두운 영역은 밝아지지만, 노이즈도 함께 강조됨.
  • CLAHE는 이미지 전체가 아닌 작은 지역(region) 단위로 히스토그램 평활화를 적용하고, 과도한 대비 증폭을 제한(clip) 하여 부작용을 방지한다.

방법

1. 영상 분할

  • 영상 크기의 타일(영역)로 분할.
  • 각 타일을 라 정의함.

2. 각 타일에 대해 로컬 히스토그램 계산

  • 내의 밝기 값
  • 로컬 히스토그램
  • 정규화된 확률 분포
  • : 타일 의 총 픽셀 수

3. 클리핑 (Contrast Limiting)

  • 사용자 설정값 clipLimit 이상인 bin을 잘라냄.
  • 잘라낸 초과 값의 총량.
  • 초과량 를 전체 개의 bin에 균등 분배.
  • 이 과정을 통해 히스토그램이 평탄화되면서도 과도한 대비 증폭은 억제 된다.

4. 로컬 CDF 계산

  • 이 CDF를 통해 해당 타일 내 픽셀의 새로운 밝기를 계산한다.

5. 보간 (Interpolation)

  • CLAHE는 타일별로 독립적인 결과를 그대로 사용하지 않고, 타일 경계의 픽셀은 주변 타일 결과를 선형 보간하여 타일 경계의 부자연스러운 변화(discontinuity)를 제거한다.
  • 예를 들어, 현재 픽셀 위치가 4개 타일 , , , 사이에 걸쳐 있다면,
    • 해당 픽셀 밝기 값은 이 4개의 타일의 결과를 거리 기반으로 bilinear interpolation 함.

코드 (Python)

# CLAHE 객체 생성
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
# CLAHE 적용
result = clahe.apply(gray_image)
  • clipLimit : 히스토그램에서 각 bin의 최대 허용 픽셀 수. 클수록 대비 증가.
  • tileGridSize : 영상을 가로×세로 방향으로 나누는 타일 크기. 작을수록 세밀한 지역 보정이 가능하지만 계산량 증가.