Python 如何通过输入多张图片创建一个直方图

Python 如何通过输入多张图片创建一个直方图,python,image,image-processing,histogram,Python,Image,Image Processing,Histogram,图像处理 我拍摄了58张具有相同曝光和距离的旋转对象的照片,现在我想在所有图片上创建Python中像素列或像素行x轴和y轴上亮度分布的直方图。我正在寻找实现的技巧,目前我已经在一个图片列表中读到了,或者我听说了批处理 谢谢我知道您可能正在处理CT扫描/同步加速器提供的数据。作为我博士学位的一部分,我有时会遇到这个问题,我必须制定一个常规来产生这个问题。我会给你一些提示来实现它 提取图像集直方图最直接的方法是: 1) 将所有图像转换为同一类型(在我的例子中,我通常将它们转换为8位灰度) 2) 声明

图像处理

我拍摄了58张具有相同曝光和距离的旋转对象的照片,现在我想在所有图片上创建Python中像素列或像素行x轴和y轴上亮度分布的直方图。我正在寻找实现的技巧,目前我已经在一个图片列表中读到了,或者我听说了批处理


谢谢

我知道您可能正在处理CT扫描/同步加速器提供的数据。作为我博士学位的一部分,我有时会遇到这个问题,我必须制定一个常规来产生这个问题。我会给你一些提示来实现它

提取图像集直方图最直接的方法是:

1) 将所有图像转换为同一类型(在我的例子中,我通常将它们转换为8位灰度)

2) 声明一个全局直方图,您将在其中为每个图像的每个灰度值添加计数。我声明了一个2列数组。在第一列中,我只写0到255之间的灰色值。在第二列中,我将存储它们各自的计数。我这样做是为了以后更容易策划

histogram_global = np.zeros((256,2))
3) 提取堆栈中每个图像的直方图。为此,您必须:

3.1)使用库PIL打开图像,并将每个图像转换为数组,其中对于8位图像,数组的每个值都是0-255之间的灰度值

im=Image.open(image_path)
a = np.array(im.getdata())
3.2)通过库“Numpy”,您可以获得每个灰度值的计数,即该图片的直方图

bins_hist = list(range(0,257))
hist_image = np.histogram(a, bins=bins_hist)
counts = hist_image[0]
3.3)将这些计数添加到您在开始时声明的全局直方图中

4) 绘制全局直方图

fig, ax1 = plt.subplots()
color = 'tab:red'
ax1.bar(histogram_i[:,0], histogram_i[:,1], color=color)

如前所述,此过程适用于8位(灰度)图片。但是,如果处理RGB图片,过程类似,但不是只创建一个全局直方图,而是需要创建三个全局直方图,每个通道一个;红色、蓝色和绿色。其余部分类似。

您可以将所有图片与
glob
库一起上载,然后使用
matplotlib
pil
将它们转换为数组,然后使用
numpy
执行像素操作。我希望这有点帮助。所以如果你得到一张新图像,其中每个像素代表该位置所有58张图像的平均值,这就是答案吗?