AI 그게 뭔데
끄적끄적 개발일지
AI 그게 뭔데
전체 방문자
오늘
어제
  • 분류 전체보기 (342)
    • 논문 (5)
    • DL(Deep-Learning) (34)
      • 개념 (14)
      • Python 기초 (14)
      • Tensorflow (6)
      • Pytorch (0)
    • NLP (10)
    • OpenCV (53)
    • DevOps (10)
      • AWS (2)
      • Docker & Kubernetes (4)
      • Spark (3)
      • SQL (1)
    • MacOS (1)
    • React-Native (2)
    • BI (3)
      • GA(Google Analytics) (3)
      • Tableau (0)
    • 알고리즘 (221)
      • 백준 (76)
      • 프로그래머스 (108)
      • 기타 알고리즘 (37)

인기 글

태그

  • 연습문제
  • 알고리즘
  • Python
  • 이코테
  • level1
  • 프로그래머스
  • 백준
  • OpenCV
  • 파이썬
  • LEVEL2

최근 글

hELLO · Designed By 정상우.
AI 그게 뭔데

끄적끄적 개발일지

[OpenCV with Python] 영상처리 : 히스토그램 평활화 Histogram equalization
OpenCV

[OpenCV with Python] 영상처리 : 히스토그램 평활화 Histogram equalization

2022. 2. 1. 13:45

히스토그램 평활화(Histogram equalization)

  • 히스토그램이 그레이스케일 전체 구간에서 균일한 분포로 나타나도록 변경하는 명암비 향상 기법
  • 히스토그램 균등화, 균일화, 평탄화라고 한다.

 

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

  • 히스토그램 함수 구하기 :  $h(g) = N_{g}$
  • 정규화된 히스토그램 함수 구하기 :  $p(g) = \frac{h(g)}{w \times h}$
  • 누적 분포 함수(cdf) 구하기 :  $cdf(g) = \sum_{0\leq i< g}p(i)$
  • 변환 함수 : $ dst(x, y)= round(cdf(scr(x,y))\times L_{max}) $

 

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

 

 

 

✔︎  히스토그램 평활화 함수  -  cv2.equalizeHist

cv2.equalizeHist(src, dst=None)
  • src : 입력 영상 (그레이스케일 영상)
  • dst : 결과 영상

 

# 그레이스케일 영상의 히스토그램 평활화
src = cv2.imread('Hawkes.jpg', cv2.IMREAD_GRAYSCALE)

if src is None:
    print('image load failed!')
    sys.exit()
    
dst = cv2.equalizeHist(src)

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

cv2.destroyAllWindows()

 

 

 

 

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

 히스토그램평활화는 뭉쳐져있는 부분을 펼쳐주고 픽셀 빈도가 적은 곳은 오히려 뭉쳐지게 한다.

 

 

컬러 히스토그램 평활화

히스토그램 평활화는 그레이스케일 영상만 가능하다. 그러면 컬러 영상은 어떻게 평활화를 해야 할까?

 

1. R, G, B 각 색 평면에 대해 히스토그램 평활화

RGB를 각각 평활화하여 합쳤을 때, 색상이 푸르게 나타났음을 알 수 있다.

 

 

2. 밝기 성분에 대해서만 히스토그램 평활화

YCrCb로 변환하여 밝기만 평활화 하고 합쳤을 경우 색감이 뚜렷해짐을 볼 수 있다.

 

 

💬  실습

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)
ycrcb_planes = cv2.split(src_ycrcb)

# 밝기 성분에 대해서만 히스토그램 평활화 수행
ycrcb_planes[0] = cv2.equalizeHist(ycrcb_planes[0])

dst_ycrcb = cv2.merge(ycrcb_planes)
dst = cv2.cvtColor(dst_ycrcb, cv2.COLOR_YCrCb2BGR)

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

cv2.destroyAllWindows()

 

'OpenCV' 카테고리의 다른 글

[OpenCV with Python] 영상처리 : 히스토그램 역투영  (0) 2022.02.01
[OpenCV with Python]영상처리 : 특정 색상 영역 추출  (0) 2022.02.01
[OpenCV with Python] 영상처리 : 명암비 조절  (0) 2022.02.01
[OpenCV with Python] 영상처리 : 히스토그램 분석  (0) 2022.02.01
[OpenCV with Python] 영상처리 : 컬러 영상과 색 공간  (0) 2022.02.01
    AI 그게 뭔데
    AI 그게 뭔데
    공부와 개발 그리고 AI가 약간 첨가된 흔적 남기기

    티스토리툴바