색 보정
히스토그램
- 채널별로 밝기의 분포를 시각화
import matplotlib.pyplot as plt
for i, color in enumerate('bgr'):
hist = cv.calcHist([image], [i], mask=None, histSize=[256], ranges=[0, 256])
plt.plot(hist, color=color)
- 빨간색은 어두운 영역에 많고, 초록색은 중간, 파란색은 밝은 영역에 많음
히스토그램 균일화
- 밝기 분포를(히스토그램) 고르게 만듦(균일화)
src = cv.imread('xray.jpg', cv.IMREAD_GRAYSCALE)
hist1 = cv.calcHist([src], [0], mask=None, histSize=[256], ranges=[0, 256])
eqd = cv.equalizeHist(src)
hist2 = cv.calcHist([eqd], [0], mask=None, histSize=[256], ranges=[0, 256])
- 전반적으로 뿌연 밝기
- 검은 부분이 없음
- 하얀 부분도 없음
- 어두운 곳은 확실히 어둡게
- 밝은 곳은 확실히 밝게
CLAHE
컬러 이미지의 히스토그램 균일화
- BGR에서 균일화하면 선명해지기는 하지만 색상 간의 비율이 달라져서 색상이 바뀜
src = cv.imread('low.jpg')
b,g,r = cv.split(src)
be = cv.equalizeHist(b)
ge = cv.equalizeHist(g)
re = cv.equalizeHist(r)
eqd1 = cv.merge((be,ge,re))
- src: 전반적으로 뿌옇다
- eqd1: 선명해졌지만 색상의 비율이 달라졌음
컬러 이미지의 히스토그램 균일화
hsv = cv.cvtColor(src, cv.COLOR_BGR2HSV)
h,s,v = cv.split(hsv)
eqd_v = cv.equalizeHist(v)
mgd = cv.merge((h,s,eqd_v))
eqd2 = cv.cvtColor(mgd, cv.COLOR_HSV2BGR)
- src: 전반적으로 뿌옇다
- eqd2: 색상과 채도는 유지하면서 밝기만 균일화되어 선명해짐
퀴즈