如何轻松地将NumPy数组中存储的多个灰度图像进行直方图均衡化?
我有这种4D格式的96x96像素NumPy数据:
(1800, 1, 96,96)
Moose指向此博客文章的评论相当不错。
为了完整起见,我在这里使用更好的变量名给出一个示例,并在问题中的4D数组中的1000张96x96图像上循环执行。它速度很快(在我的计算机上为1-2秒),只需要NumPy。
import numpy as np def image_histogram_equalization(image, number_bins=256): # from http://www.janeriksolem.net/2009/06/histogram-equalization-with-python-and.html # get image histogram image_histogram, bins = np.histogram(image.flatten(), number_bins, density=True) cdf = image_histogram.cumsum() # cumulative distribution function cdf = 255 * cdf / cdf[-1] # normalize # use linear interpolation of cdf to find new pixel values image_equalized = np.interp(image.flatten(), bins[:-1], cdf) return image_equalized.reshape(image.shape), cdf if __name__ == '__main__': # generate some test data with shape 1000, 1, 96, 96 data = np.random.rand(1000, 1, 96, 96) # loop over them data_equalized = np.zeros(data.shape) for i in range(data.shape[0]): image = data[i, 0, :, :] data_equalized[i, 0, :, :] = image_histogram_equalization(image)[0]