Python直方圖均一化(Histogram Equalization)是一種常見的圖像處理技術,通過對圖像像素的灰度值進行重新分配,使得圖像的對比度得以提高、細節得到增強。
Histogram Equalization的核心思想在于讓圖像中的像素分布更加均勻,從而使得更多的像素能夠充分利用灰度級,而不是聚集在某些特定灰度值上。這種均一化方法主要包括以下兩個步驟:
1. 統計圖像中不同灰度值的像素個數,生成原始灰度級分布圖;
import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE) hist, bins = np.histogram(img.flatten(), 256, [0,256]) plt.plot(hist) plt.show()
上述代碼通過使用OpenCV庫、numpy庫和matplotlib庫對圖像進行灰度化,并通過numpy庫的histogram()函數計算出灰度直方圖并通過matplotlib庫繪制圖像。運行結果如下圖所示:
2. 根據原始灰度級分布圖,生成新的灰度值映射表,將圖像像素的舊灰度值映射為新的灰度值。
cdf = hist.cumsum() cdf_normalized = cdf * float(hist.max()) / cdf.max() cdf_m = np.ma.masked_equal(cdf_normalized, 0) cdf_m = (cdf_m - cdf_m.min())*255/(cdf_m.max()-cdf_m.min()) cdf = np.ma.filled(cdf_m,0).astype('uint8') res = cdf[img] plt.hist(res.flatten(), 256, [0,256], color = 'r') plt.xlim([0, 256]) plt.show()
上述代碼使用numpy庫計算出累計分布函數(CDF),并對其進行歸一化和映射,最后使用matplotlib庫展示出均一化后的灰度級分布圖。運行結果如下圖所示:
通過Histogram Equalization技術可以將一張灰度圖像進行均一化處理,最終產生出更加明亮、細節更加清晰的圖像,使圖像處理和顯示更加準確。