我了解到您可能正在处理 CT 扫描/同步加速器提供的数据。作为我攻读博士学位的一部分,我有时会遇到这个问题,我必须开发一个程序来生成这个问题。我会给你一些提示来实现它。
提取一组图像的直方图最直接的方法是:
1) 将所有图像转换为相同类型(在我的情况下,我通常将它们转换为 8 位灰度)。
2) 声明一个全局直方图,您将在其中添加每个图像的每个灰度值的计数。我声明了一个 2 列数组。在第一列中,我将只写从 0 到 255 的灰度值。在第二列中,我将存储它们各自的计数。我这样做是为了以后更容易绘制
histogram_global = np.zeros((256,2))
3) 提取堆栈中每个图像的直方图。为此,您必须:
3.1) 使用库 PIL 打开图像并将每个图像转换为一个数组,其中数组的每个值都是 8 位图像的 0-255 之间的 grescale 值。
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 图片,过程类似,但不是只创建一个全局直方图,而是需要创建三个全局直方图,每个通道一个;红色、蓝色和绿色。其余类似。