Koo's.Co

[OpenCV] 히스토그램 평활화(Histogram Equalization) 본문

Python/영상처리

[OpenCV] 히스토그램 평활화(Histogram Equalization)

kth321 2023. 1. 5. 18:20

1. 히스토그램 평활화(Histogram Equalization)

 - 히스토그램이 그레이스케일 전체 구간에서 균일한 분포로 나타나도록 변경하는 명암비 향상 기법

 - 히스토그램 균등화, 균일화, 평탄화라고도 한다

 - 누적함수를 이용해 입력 영상의 명암비를 조절

(좌) 원본 이미지 (중) histogram stretching (우) histogram equalization

 

픽셀의 히스토그램 분포를 보면

기존 이미지는 좁게 분포해있지만 stretching과 equalization을 적용한 픽셀의 분포는 넓게 분포한 것을 알 수 있다.

stretching은 넓어지는 범위가 일정한 반면, equalization은 cdf를 사용하기 때문에 분포에서 값이 뭉쳐있는 범위가 더 넓게 퍼지게 된 것을 확인할 수 있다.

2. 컬러 영상 Histogram Equalization

BGR 색상 영역에서 split을 한 후 equalization을 적용하면 색의 왜곡이 발생할 수 있다.

컬러 영상에 equalization을 적용하기 위해서는 YCrCb 색상 영역으로 바꾼 후에 Y(휘도, 색상)에 equalization을 적용하면 색의 왜곡없이 contrast를 줄 수 있다.

(좌) 원본 이미지 (우) equalization 적용

import cv2
import sys

src = cv2.imread('cat.bmp', cv2.IMREAD_COLOR)
if src is None:
  print('Image load failed')
  sys.exit()

src_ycrcb = cv2.cvtColor(src, cv2.COLOR_BGR2YCrCb)
planes = cv2.split(src_ycrcb)

y_equalization = cv2.equalization(planes[0])
dst = cv2.merage([y_equalization, planes[1], planes[2])

cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()

'Python > 영상처리' 카테고리의 다른 글

필터링  (0) 2023.01.05
[OpenCV] 히스토그램 분석  (0) 2023.01.05
[OpenCV] 명암비 조절  (0) 2023.01.05
[OpenCV] 컬러 영상 기본 함수  (0) 2023.01.04
[OpenCV] 산술 연산  (0) 2023.01.04
Comments