Histogram

Mechboy·2024년 4월 22일
0

OPENCV

목록 보기
2/9

OPEN CV를 활용한 Histogram 사용

Histogram

  • 히스토그램은 표로 되어 있는 도수 분포를 그래프로 나타내는 정보를 의미함
  • 영상 처리의 히스토그램은 이미지의 밝기값의 분포를 따라 픽셀의 개수를 표현하는 방법으로 많이 사용함

Opencv로 Histogram 구하기

calcHist

    hist = cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
  1. image : 원본 이미지 배열, 배열의 이미지는 모두 같은 크기값을 가져야 함.
  2. channels: 이미지에서 histogram을 연산을 할 채널 선택
  3. mask : 특정 영역을 지정하기 위한 mask로 원본 이미지와 똑같은 크기를 입력으로 사용
  4. HistSize : 각 구간에서 분포를 구할 영역의 개수
  5. ranges : 밝기 구간 선정 8bit의 이미지일 경우 0~255로 지정 해주면 됨

OpenCV Documentation

calcHist()

Histogram 구현

  • Python과 opencv 라이브러리를 활용한 구현 예시
import cv2
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
%matplotlib inline
plt.rcParams['image.cmap'] = 'gray'

img = cv2.imread('MRI_of_Human_Brain.jpg',cv2.IMREAD_GRAYSCALE )


hist =cv2.calcHist(images = [img],
                   channels = [0],
                   mask = None,
                   histSize = [256],
                   ranges = [0,255])

plt.subplot(121); plt.imshow(img);plt.title('MRI image')
plt.subplot(122); plt.plot(hist);plt.xlim([0,256]);plt.title('Opencv histogram')

이미지 출처

Histogram Equlation

  • 히스토그램의 밝기값을 누적확률분포를 활용하여 특정 스케일만큼 대비값을 주는 방법

equalizeHist

    dst = cv2.equalizeHist(src[, dst])
  1. source : 원본 이미지 배열
  2. dst: src와 동일한 크기와 유형의 대상 이미지.

OpenCV Documentation

equalizeHist()

코드 예시

  • Python과 opencv 라이브러리를 활용한 구현 예시
img_eq = cv2.equalizeHist(img)
hist2=cv2.calcHist(images = [img_eq],
                   channels = [0],
                   mask = None,
                   histSize = [256],
                   ranges = [0,255])

plt.subplot(121); plt.imshow(img_eq);plt.title('MRI image')
plt.subplot(122); plt.plot(hist2);plt.xlim([0,256]);plt.title('Opencv histogram')

  • Histogram 처리 전후 이미지를 비교 해보면 기존 이미지 보다 밝기 분포가 개선 된것으로 확인
  • 기존의 이미지 곱연산을 진행하면 특정 픽셀에서 모든값에 균일하게 가중이 되어 일정 밝기 이상의 이미지의 데이터값 초과가 되는 문제가 발생하지만, Histogram Equalization을 활용하면 이미지 range 내에서 확률 분포에 따라 밝기 값을 분포 시켜주기 때문에 clipping 문제에서 자유로운 장점이 있음
  • Histogram Equalization에 대한 이론적인 내용을 알고 싶다면 아래글을 참고
    https://velog.io/@woosee000/Histogram-EQ

limitation of Histogram

  • 히스토그램은 각 픽셀의 밝기 값 분포를 분석 해주는 방법일 뿐, 각 이미지마다 고유한 정보라고 보기 어렵다.
  • 위의 2 이미지를 보면 전혀 다른 이미지 지만 동일한 히스토그램을 확인 할 수 있음.
  • 따라서 이미지가 동일한 히스토그램을 가지고 있다고 해서 같은 이미지라고 볼 수 없다.
profile
imageprocessing and Data science

0개의 댓글

관련 채용 정보