Skip navigation

Hisztogram kiegyenlítés

Hatása

A hisztogram kiegyenlítés művelettel egy kontrasztszegény kép megjelenését javíthatjuk. Az eredmény jobban kitölti a rendelkezésre álló intenzitástartományt. Szomszédos, ritkán előforduló intenzitásokat össze tud vonni. Szétbontani nem tud, az eredeti kép egy intenzitásértékéhez ugyanazt az értéket rendeli, de a gyakoribb értékeket "távolabb" viszi egymástól.

Az OpenCV cv2.equalizeHist() függvényét használhatjuk. Eredményként egy új képmátrixot kapunk, a bemeneti paraméter pedig a javítandó képmátrix. Nincs tehát szükség a hisztogram előzetes meghatározására, a következő példaprogramban az eredmény szemléltetése miatt tesszük csak ezt! A műveletet hatása az, hogy az előfordulási gyakoriságok megfelelő figyelembe vételével változik a kép hisztogramja.

05_02_histEq_gray.py

import cv2
import numpy as np
from matplotlib import pyplot as plt


def drawHistogram(src):
hist_gray = cv2.calcHist([src], [0], None, [256], [0, 256])
plt.figure(figsize=(4, 2), dpi=100)
  # plt.plot(hist_gray)
# plt.scatter(np.arange(256), hist_gray, s=1)
# plt.bar(np.arange(256), np.transpose(hist_gray.astype(int))[0])
plt.vlines(np.arange(256), 0, hist_gray) plt.plot(hist_gray)

# plt.xlim([0, 255])
plt.ylim([0, np.max(hist_gray)])
plt.show()


img = cv2.imread('GolyoAlszik_rs.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('img', img)
drawHistogram(img)

img_histeq = cv2.equalizeHist(img)
cv2.imshow('img', img_histeq)
drawHistogram(img_histeq)

Feladat

Teszteljük a hisztogram kiegyenlítést többféle bemeneti képre!

Teendők színes képek esetén

Konvertáljuk a képet BGR-ből YUV színtérbe, hajtsuk végre a hisztogram kiegyenlítés műveletet az Y (szürke) csatornán, vonjuk össze a csatornákat, és térjünk vissza BGR-be!

Lépésről lépésre videó a megoldásról:

  • KfGyak_05_02_histeq_bgr.mp4