Computer Vision/opencv(python)

[17] 6) 히스토그램 평활화

jwjwvison 2021. 3. 18. 13:03
  • 히스토그램 평활화 (Histogram equalization)
    • 히스토그램이 그레이스케일 전체 구간에서 균일한 분포로 나타나도록 변경하는 명암비 향상 기법
    • 히스토그램 균등화, 균일화, 평탄화

 

  • 히스토그램 평활화를 위한 변환 함수 구하기

 

  • 히스토그램 평활화 계산 방법

 

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

 

cv2.equalizeHist(src,dst=None) -> dst

 • src: 입력 영상 . 그레이스케일 영상
 • dst: 결과 영상

 

  • 히스토그램 평활화 예제
import sys
import numpy as np
import cv2

src=cv2.imread('Hawkes.jpg',cv2.IMREAD_GRAYSCALE)

if src is None:
    print('Image load failed!')
    sys.exit()

dst=cv2.equalizeHist(src)  #grayscale 영상만 받는다

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

 

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

 

  • 컬러 히스토그램 평활화
    • 직관적 방법: R, G, B 각 색 평면에 대해 히스토그램 평활화

 

  • 밝기 성분에 대해서만 히스토그램 평활화 수행 (색상 성분은 불변)   

 

  • 컬러 영상의 히스토그램 평활화
import sys
import numpy as np
import cv2

#컬러 영상의 히스토그램 평활화

src=cv2.imread('field.bmp')

if src is None:
    print('Image load failed!')
    sys.exit()

src_ycrcb=cv2.cvtColor(src,cv2.COLOR_BGR2YCrCb)
planes=cv2.split(src_ycrcb)  #3개짜리의 리스트가 됨 y,cr,cb
planes[0]=cv2.equalizeHist(planes[0])     #y

dst_ycrcb=cv2.merge(planes)  #ycrcb
dst=cv2.cvtColor(dst_ycrcb,cv2.COLOR_YCrCb2BGR)  #BGR

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