Python OpenCV Normalization, Equalization, CLAHE

Woohojin·2022년 10월 20일

OpenCV

목록 보기
3/7

참조링크

정규화(Normalization)

이미지 작업에서도 정규화가 필요한 경우가 있습니다.

특정 영역에 몰려 있는 경우 화질을 개선하기도 하고, 이미지 간의 연산 시 서로 조건이 다른 경우 같은 조건으로 만들기도 합니다.

src: 정규화 이전의 데이터

dst: 정규화 이후의 데이터

alpha: 정규화 구간 1

beta: 정규화 구간 2, 구간 정규화가 아닌 경우 사용 안 함

type_flag: 정규화 알고리즘 선택 플래그 상수

type_flag는 alpha와 beta 구간으로 정규화하는 cv2.NORM_MINMAX, 전체 합으로 나누는 cv2.NORM_L1, 단위 벡터로 정규화하는 cv2.NORM_L2, 최댓값으로 나누는 cv2.NORM_INF가 있습니다.

dst = cv2.normalize(src, dst, alpha, beta, type_flag)

평탄화(Equalization)

평탄화는 각각의 값이 전체 분포에 차지하는 비중에 따라 분포를 재분배하므로 명암 대비를 개선하는 데 효과적입니다.

src: 대상 이미지, 8비트 1 채널

dst(optional): 결과 이미지

dst = cv2.equalizeHist(src, dst)

CLAHE

평탄화를 하면 이미지의 밝은 부분이 날아가는 현상이 발생합니다.

이런 현상을 막기 위해 이미지를 일정한 영역으로 나누어 평탄화를 적용합니다.

그러나 이 방식에도 문제가 있습니다. 일정한 영역 내에서 극단적으로 어둡거나 밝은 부분이 있으면 노이즈가 생겨 원하는 결과를 얻을 수 없게 됩니다.

이 문제를 피하기 위해서 어떤 영역이든 지정된 제한 값(아래 코드에서 clipLimit 파라미터)을 넘으면 그 픽셀은 다른 영역에 균일하게 배분하여 적용합니다. 이러한 평탄화 방식을 CLAHE라고 합니다.

clipLimit: 대비(Contrast) 제한 경계 값, default = 40.0

tileGridSize: 영역 크기, default = 8 x 8

clahe: 생성된 CLAHE 객체

clahe = cv2.createCLAHE(clipLimit, tileGridSize)

src: 입력 이미지

clahe.apply(src): CLAHE 적용
profile
인생을 컴퓨터와 함께

0개의 댓글