【问题标题】:How to create one Histogram with the input of many Pictures如何使用多张图片的输入创建一个直方图
【发布时间】:2019-11-06 17:18:30
【问题描述】:

图像处理

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

谢谢

【问题讨论】:

  • 你可以把你所有的图片和glob库一起上传,然后用matplotlibpil将它们转换成数组,然后用numpy进行像素操作。我希望这会有所帮助。
  • 因此,如果您有一个新图像,其中每个像素代表该位置所有 58 个图像的平均值,这就是答案吗?

标签: python image image-processing histogram


【解决方案1】:

我了解到您可能正在处理 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 图片,过程类似,但不是只创建一个全局直方图,而是需要创建三个全局直方图,每个通道一个;红色、蓝色和绿色。其余类似。

【讨论】:

    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2018-06-25
    • 2017-07-27
    • 2014-02-01
    相关资源
    最近更新 更多