[DIP] Contrast Limited Adaptive Histogram Equalization (CLAHE)

2024. 10. 7. 12:13·Programming/DIP
728x90
728x90

Global Histogram Equalization의 단점.

Illumination이 불균일한 경우, 이미지에서 특정 부분은 밝고 특정 부분은 어두움.
이 경우, Global Processing 기반의 Histogram Equalization은 효과가 좋지 못함.

 

아래 그림에서 조명이 불균일하여 global HE가 효과가 좋지 않음을 보여줌 (석고상의 대비가 오히려 나뻐짐)

Global HE

이를 개선한 방법이 Contrast Limited Adaptive Histogram Equalization (CLAHE)임.

 

관련 gist

https://gist.github.com/dsaint31x/5606a3b51023d64f5e29ea524ac469dc

 

dip_clahe.ipynb

dip_clahe.ipynb. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com


 

CLAHE의 과정

이미지는 "tiles"(OpenCV에서 기본 tileSize는 8x8)라고 불리는 작은 block (or patch)으로 나뉨: Adaptive

  • 각 블록에 대해 일반적인 histogram equalization이 수행됨.
    • 작은 영역 내에서 히스토그램은 그 영역에 제한됨(노이즈가 없는 경우).
    • 해당 블록에 노이즈가 있을 경우, 증폭되는 문제점이 있음.

이를 방지하기 위해 contrast limiting이 적용됨: Contrast Limited

  • 특정 히스토그램 bin이 지정된 대비 한계(기본적으로 OpenCV에서는 40)를 초과하면,
    • 초과 픽셀들은 잘리고 다른 bin에 균일하게 분배됨.

contrast limited

  • 이같은 redistribution을 수행하고 나서 cdf를 계산하여 histogram equalization 적용.

추가적으로 타일 경계에서 발생하는 아티팩트를 제거하기 위해 bilinear interpolation이 적용됨.


결과

OpenCV에서 제공하는 CLAHE의 결과는 다음과 같음.

# CLAHE(Contrast Limited Adaptive Histogram Equalization) 객체를 생성하는 코드
# clipLimit: 히스토그램 클립핑 한계를 설정하는 파라미터. 
#            이 값은 대비를 제한하는 기준으로, 높은 값일수록 더 많은 대비가 적용됨. 
#            기본값은 40.0으로 설정되어 있음.
# tileGridSize: 이미지를 작은 타일로 나눌 때의 타일 크기를 설정하는 파라미터. 
#               각 타일에 대해 개별적으로 히스토그램 평활화를 수행함.
#               (8,8)은 이미지를 8x8 크기의 작은 블록으로 나눈다는 뜻임.
#               기본값은 (8,8)으로 설정되어 있음.
clahe = cv2.createCLAHE(clipLimit=40.0, tileGridSize=(8,8))

# img에 CLAHE를 적용하여 히스토그램 평활화된 이미지를 img2에 저장.
# clahe.apply()는 이미지를 입력받아 CLAHE를 적용한 후 결과를 반환함.
img2 = clahe.apply(img)

 

'Programming > DIP' 카테고리의 다른 글

[DIP] Histogram Stretching  (0) 2024.10.07
[DIP] (Global) Histogram Equalization  (0) 2024.10.07
[DIP] Histogram Matching: Image Enhancement  (1) 2024.10.07
[DIP] Moirè (모아레) (and Beat)  (3) 2024.09.30
[DIP] cv2.convertSacleAbs(): contrast, brightness 수동조정  (0) 2024.09.23
'Programming/DIP' 카테고리의 다른 글
  • [DIP] Histogram Stretching
  • [DIP] (Global) Histogram Equalization
  • [DIP] Histogram Matching: Image Enhancement
  • [DIP] Moirè (모아레) (and Beat)
dsaint31x
dsaint31x
    반응형
    250x250
  • dsaint31x
    Dsaint31's blog
    dsaint31x
  • 전체
    오늘
    어제
    • 분류 전체보기 (740)
      • Private Life (13)
      • Programming (56)
        • DIP (104)
        • ML (26)
      • Computer (119)
        • CE (53)
        • ETC (33)
        • CUDA (3)
        • Blog, Markdown, Latex (4)
        • Linux (9)
      • ... (351)
        • Signals and Systems (103)
        • Math (172)
        • Linear Algebra (33)
        • Physics (42)
        • 인성세미나 (1)
      • 정리필요. (54)
        • 의료기기의 이해 (6)
        • PET, MRI and so on. (1)
        • PET Study 2009 (1)
        • 방사선 장해방호 (4)
        • 방사선 생물학 (3)
        • 방사선 계측 (9)
        • 기타 방사능관련 (3)
        • 고시 (9)
        • 정리 (18)
      • RI (0)
      • 원자력,방사능 관련법 (2)
  • 블로그 메뉴

    • Math
    • Programming
    • SS
    • DIP
  • 링크

    • Convex Optimization For All
  • 공지사항

    • Test
    • PET Study 2009
    • 기타 방사능관련.
  • 인기 글

  • 태그

    Probability
    Term
    numpy
    math
    Vector
    opencv
    Optimization
    Python
    fourier transform
    SIGNAL
    검사
    random
    signal_and_system
    function
    SS
    linear algebra
    인허가제도
    Programming
    Convolution
    signals_and_systems
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dsaint31x
[DIP] Contrast Limited Adaptive Histogram Equalization (CLAHE)
상단으로

티스토리툴바