CLAHE 알고리즘
개념
- CLAHE(Contrast Limited Adaptive Histogram Equalization)는 기존 히스토그램 평활화의 단점을 개선한 고급 명암 대비 향상 기법. (참고: 3. 영상 히스토그램)
- 기존 평활화는 영상 전체에 동일한 누적 분포 함수(CDF)를 적용하여 어두운 영역은 밝아지지만, 노이즈도 함께 강조됨.
- CLAHE는 이미지 전체가 아닌 작은 지역(region) 단위로 히스토그램 평활화를 적용하고, 과도한 대비 증폭을 제한(clip) 하여 부작용을 방지한다.
방법
1. 영상 분할
- 영상 f(x,y)를 m×n 크기의 타일(영역)로 분할.
- 각 타일을 Ti,j 라 정의함.
2. 각 타일에 대해 로컬 히스토그램 계산
- Ti,j 내의 밝기 값 rk∈{0,…,L−1}
- 로컬 히스토그램
hi,j(rk)=Ti,j 안의 픽셀 중 rk 값의 개수
pi,j(rk)=Mi,jhi,j(rk)
3. 클리핑 (Contrast Limiting)
- 사용자 설정값 clipLimit 이상인 bin을 잘라냄.
hˉi,j(rk)=⎩⎨⎧hi,j(rk),C,if hi,j(rk)≤Cif hi,j(rk)>C
E=rk∑max(hi,j(rk)−C,0)
- 초과량 E 를 전체 L 개의 bin에 균등 분배.
hˉi,j(rk)←hˉi,j(rk)+LE
- 이 과정을 통해 히스토그램이 평탄화되면서도 과도한 대비 증폭은 억제 된다.
4. 로컬 CDF 계산
sk(i,j)=rm=0∑kMi,jhˉi,j(rm)
- 이 CDF를 통해 해당 타일 내 픽셀의 새로운 밝기를 계산한다.
rk′=round((L−1)⋅sk(i,j))
5. 보간 (Interpolation)
- CLAHE는 타일별로 독립적인 결과를 그대로 사용하지 않고, 타일 경계의 픽셀은 주변 타일 결과를 선형 보간하여 타일 경계의 부자연스러운 변화(discontinuity)를 제거한다.
- 예를 들어, 현재 픽셀 위치가 4개 타일 Ti,j, Ti+1,j , Ti,j+1, Ti+1,j+1 사이에 걸쳐 있다면,
- 해당 픽셀 밝기 값은 이 4개의 타일의 결과를 거리 기반으로 bilinear interpolation 함.
I′(x,y)=a=0∑1b=0∑1wab⋅rk′(i+a,j+b)
wab:거리 기반 가중치 (합=1)
코드 (Python)
# CLAHE 객체 생성
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
# CLAHE 적용
result = clahe.apply(gray_image)
- clipLimit : 히스토그램에서 각 bin의 최대 허용 픽셀 수. 클수록 대비 증가.
- tileGridSize : 영상을 가로×세로 방향으로 나누는 타일 크기. 작을수록 세밀한 지역 보정이 가능하지만 계산량 증가.