OpenCV-Python
OpenCV Python 히스토그램 평활화
rkftks22
2021. 8. 30. 13:00
히스토그램 평활화(= 균일화, 균등화, 평탄화)
: 히스토그램이 그레이 스케일 전체 구간에서 균일한 분포로 나타나도록 변경하는 명암비 향상 기법
이 방법은 정규화와 다릅니다.
정규화는 벌어진 부분 균일
평활화의 경우 픽셀 값이 많이 뭉쳐있는 부분 넓게 벌어져있고, 적게 있는 부분 조금 벌어져있습니다.
cv2.equalizeHist(src [, dst]) [] : 생략 가능
import cv2
import numpy as np
import matplotlib.pyplot as plt
src1 = cv2.imread('imgs/Lenna.png', cv2.IMREAD_GRAYSCALE)
# 원본
hist1 = cv2.calcHist([src1], [0], None, [
256], [0, 256])
plt.subplot(3, 1, 1)
plt.title('hist1')
plt.plot(hist1)
dst1 = cv2.equalizeHist(src1)
# 평활화
hist2 = cv2.calcHist([dst1], [0], None, [
256], [0, 256])
plt.subplot(3, 1, 2)
plt.title('equal')
plt.plot(hist2)
# 정규화
dst2 = cv2.normalize(src1, None, 0, 255, cv2.NORM_MINMAX)
hist3 = cv2.calcHist([dst2], [0], None, [
256], [0, 256])
plt.subplot(3, 1, 3)
plt.title('normal')
plt.plot(hist3)
cv2.imshow('src1', src1)
cv2.imshow('dst1', dst1)
cv2.imshow('dst2', dst2)
plt.show()
cv2.waitKey(0)
src : 입력영상(그레이 스케일)
dst : 출력 영상
컬러 히스토그램 평활화 : 색상 성분으로 하면 색 변할 수 있기 때문에 밝기 성분에 대해서만 히스토그램 평활화 수행
import cv2
import numpy as np
import matplotlib.pyplot as plt
src1 = cv2.imread('imgs/Lenna.png')
src1_ycrcb = cv2.cvtColor(src1, cv2.COLOR_BGR2YCrCb)
channel = cv2.split(src1_ycrcb)
channel[0] = cv2.equalizeHist(channel[0])
dst_ycrcb = cv2.merge(channel)
dst1 = cv2.cvtColor(dst_ycrcb, cv2.COLOR_YCrCb2BGR)
cv2.imshow('src1', src1)
cv2.imshow('dst1', dst1)
plt.show()
cv2.waitKey(0)