히스토그램 획득 및 분석

hunnypooh·2022년 10월 21일
0

히스토그램 : 빈도 표현

  • x축(수평축)은 밝기 값, y축(수직축)은 밝기 값에 대응되는 크기를 가진 픽셀 수가 영상 안에서 몇개나 있는지 나타내는 빈도수.
  • 히스토그램이 고르게 분포할수록 명암 차이가 큼(=선명함)

  • 히스토그램으로 화질 향상, 자동추출 가능

Histogram Equalization

  • 모든 간격의 빈도 수는 같아서 양 끝으로 갈수록 촘촘해짐.

  • 알고리즘

    • 3번째는 정규화합 과정
      • 동그라미 친 부분이 ‘전체 등수 중에 얼만큼 차지하는지’란 의미.
        • ex) 50개 픽셀 중 25등 → 25/50 = 1/2, 최대 밝기의 1/2를 가져감
        • ex) 50개 픽셀 중 50등(제일 밝음) → 50/50 = 1, 최대 밝기를 전부 가져감.

Histogram Equalization 구현

import cv2 as cv
import numpy as np

img = cv.imread("citrus.bmp", cv.IMREAD_GRAYSCALE)
cv.imshow("img", img)
H, W = img.shape[:]

output = np.zeros((H, W), img.dtype)
#valuable 선언 및 초기화
hist = np.zeros(256, int) #히스토그램은 0~255이므로 256개이다.
sum_of_hist = np.zeros(256, int)

#1. Calculation of histogram
for y in range(H):
    for x in range(W):
        k = img[y, x]
        hist[k] = hist[k] + 1

sum = 0
#2. Cumulative Histogram
for i in range(len(hist)):
    sum = sum + hist[i]
    sum_of_hist[i] = sum


#3. Transform the input image to output image
area = H * W
Dm = 255 #0~255.
for y in range(H):
    for x in range(W):
        k = img[y, x]
        output[y, x] = (Dm/area) * sum_of_hist[k]

cv.imshow("output", output)
cv.imwrite('/Users/jiwonheo/bin/python3/Users/jiwonheo/Development/학교 강의/영상정보처리/lab3/HistogramEq.bmp', output)
cv.waitKey(0)

Histogram Stretching : 그냥 양옆으로 늘림

Gamma Correction : 디스플레이에서 똑같이 보이기 위해 보정해줌.

  • 디스플레이단에서는, Physical Power(전압) 에 의해서 rgb 값을 제어함.

  • 근데 Physical Power는 Linear 하게 동작하지 않기 때문에, 원래의 영상과 다른 색상 영상으로 보여지게됨

  • 알고리즘

profile
간단한것들 정리

0개의 댓글