728x90
반응형
히스토그램 평활화(Histogram equalization)
- 히스토그램이 그레이스케일 전체 구간에서 균일한 분포로 나타나도록 변경하는 명암비 향상 기법
- 히스토그램 균등화, 균일화, 평탄화로 불리기도 한다.
히스토그램 평활화를 위한 변환 함수 구하기
- 히스토그램 함수 구하기 :
- 정규화된 히스토그램 함수 구하기 :
- 누적 분포 함수(cdf) 구하기 :
- 변환 함수 : dst(x, y) = round(cdf(src(x, y)) x Lmax
히스토그램 평활화 계산방법

히스토그램 평활화와 히스토그램 누적 분포 함수와의 관계

히스토그램 평활화 함수
cv2.equalizeHist(src, dst=None) -> dst
- src : 입력 영상. 그레이스케일 영상
- dst : 결과 영상.
히스토그램 평활화 예제
src = cv2.imread('Hawkes.jpg', cv2.IMREAD_GRAYSCALE)
dst = cv2.equalizeHist(src)

히스토그램 스트레칭과 평활화 비교

- 히스토그램 스트레칭: 균일한 간격,
- 히스토그램 평활화 : 픽셀이 높은 구간은 넓게 펴주고, 픽셀이 낮은 구간은 좁게 펴줌
히스토그램 평활화는 그레이스케일 영상만 적용이 가능하지만 컬러 영상도 강제적으로 사용할 수 있다.
컬러 영상의 히스토그램 평활화
- 직관적 방법 : R, G, B 각 색 평면에 대해 히스토그램 평활화
* R,G,B를 평활화 하면 색이 바뀌어버릴 수 있다.
- YCrCb 영상에서 밝기 성분에 대해서만 히스토그램 평활화 수행

컬러 영상의 히스토그램 평활화
src = cv2.imread('field.bmp')
# BGR을 YCrCb2BGR로 변환
src_ycrcb = cv2.cvtColor(src, cv2.COLOR_BGR2YCrCb)
# Y / Cr / Cb 분리
ycrcb_planes = cv2.split(src_ycrcb)
# 밝기(Y)에 대해서만 히스토그램 평활화를 수행
ycrcb_planes[0] = cv2.equalizeHist(ycrcb_planes[0])
# Y / Cr / Cb 결합
dst_ycrcb = cv2.merge(ycrcb_planes)
# YCrCb2BGR을 다시 BGR로 변환
dst = cv2.cvtColor(dst_ycrcb, cv2.COLOR_YCrCb2BGR)

- 주의할 점: YCrCb를 다시 RGB로 변환하지 않고 출력하면 이상한 결과가 나온다.

728x90
반응형
'OpenCV' 카테고리의 다른 글
| OpenCV 영상처리 - 특정 색상 영역 추출(cv2.inRange) (0) | 2024.03.18 |
|---|---|
| OpenCV 영상처리 - 명암비 조절, cv2.normalize (0) | 2024.03.18 |
| OpenCV 영상처리 - 히스토그램 분석(cv2.calcHist) (0) | 2024.03.18 |
| OpenCV 영상처리 - 컬러 영상과 색 공간 (0) | 2024.03.18 |
| OpenCV 영상처리 - 산술 및 논리 연산 (0) | 2024.03.18 |