Histogram Equalization, HE :이미지 명암대비 개선

import cv2 as cv
import matplotlib.pyplot as plt 
import pandas as pd 
img = cv.imread('KakaoTalk_20210927_192557462.jpg',0)
# 이미지 저장하는 과정
  • 마지막 숫자 0 : 이미지를 흑백으로 저장
  • cmap = 'gray' => 흑백으로 불러와라

  • vmin & vmax의 범위는 명암 범위? 뭐 이런 것 같음

plt.imshow(img,cmap='gray',vmin=0,vmax=255)
plt.colorbar()
<matplotlib.colorbar.Colorbar at 0x25cfb4eeaf0>
img
array([[235, 233, 228, ..., 224, 224, 224],
       [229, 231, 231, ..., 222, 222, 222],
       [226, 227, 231, ..., 223, 223, 223],
       ...,
       [227, 231, 224, ...,  29,  20,  26],
       [230, 235, 229, ...,  21,  10,  15],
       [238, 239, 233, ...,  19,  14,  20]], dtype=uint8)

- 이미지자료 : 0(검정)~255(흰색) 사이의 어떠한 숫자들이 포함된 매트릭스

2차원으로 이루어졌음

plt.imshow(img[500:600,500:600],cmap='gray',vmin=0,vmax=255)
<matplotlib.image.AxesImage at 0x25cfb57e2b0>
img.shape
(1084, 1084)
  • 이미지는 1084x1084=1175056 개의 숫자의 모임
  • 벡터로 만든다음 히스토그램을 그려보자
fig1=plt.hist(img.flatten(),256,[0,256])
#0부터 256까지 256개로 잘라서 각 범주당 개수를 표현

- 히스토그램을 그려보니 특정 구간에 너무 값들이 모여있음

- 원래 0~255까지의 색을 표현할 수 있는데 컴퓨터가 표현가능한 색상보다 적은 조합만을 사용하고 있음.

- 아이디어: 좀 더 많은 색상을 표현할 수 없을까? $\to$ 위의 히스토그램은 좀 평평하게 만들면 되지 않을까?

img2=cv.equalizeHist(img)
fig2_1=plt.hist(img2.flatten(),256,[0,256])
  • 값의 분포도가 커졌음
plt.imshow(img2,cmap='gray',vmin=0,vmax=255)
plt.colorbar()
<matplotlib.colorbar.Colorbar at 0x25cfdad86d0>
import numpy as np
_img=np.hstack((img,img2))
plt.imshow(_img,cmap='gray')
<matplotlib.image.AxesImage at 0x25cfdc80ac0>