gpt4 book ai didi

python - 如何在保持分辨率的同时将 2D float numpy 数组无损保存到灰度图像中?

转载 作者:太空宇宙 更新时间:2023-11-04 04:01:44 29 4
gpt4 key购买 nike

我有一些温度场值,我想将其转换为灰度图像,同时保留分辨率。 (例如,如果它是一个(100x100)大小的float数组,那么转换应该是一个灰度(100x100)图像)。然后我将处理图像并将其转换回Temperature numpy数组。图像处理部分可以被认为是一个黑盒过程。

转换无损很重要。

此外,图像处理代码将识别 .png 和 .jpg。 (我不确定其他文件格式的识别,包括 tiff。此外,即使是 jpg 格式也不是首选,因为它们会导致有损转换)。

到目前为止我的尝试:

  • Matplotlib 的 imsave() 保留分辨率且无损。但它将图像转换为 RGB 而不是灰度。这种方法对我来说也很好,但我无法准确地将 3 channel RGB 图像转换回 float numpy 数组。例如,我采用了一个 10x10 numpy float 组 temperature,使用了 plt.imsave('Temperature_profile.png',temperature)。然后,我重新打开同一张图像,但无法找到将其转换回 (10x10) float 组的准确方法。所以,如果有一种方法可以将 3 channel 图像无损地转换回 2D 矩阵,问题就解决了。

  • PIL 的 Image.fromarray() 保留分辨率并可以将图像保存为灰度图像。但是我无法无损地保存矩阵并无损地检索它。因此我会得到错误的结果。 ( Converting 2D Numpy array of grayscale values to a PIL image )

  • scipy.misc.imsave() 已弃用。

  • imageio.imwrite() 给出关于有损转换的警告。 (“从 float64 到 uint8 的有损转换”)。

  • opencvcv2 由于某种原因未被我的 spyder 环境(python 3.7、Anaconda 4.7.12)识别。

    <

最佳答案

你需要一种可以保存 float 的无损图像格式:

  • PNG最多只能保存16位整数,
  • JPEG 不是无损的,只有 8 位整数,
  • GIF 是整数和 8 位,
  • NetPBM 最多只能是 16 位整数。

因此请使用无损压缩或无压缩的 TIFF。或者你可以使用 PFM - 可移植 float map 。


这是一个演示:

import numpy as np
from PIL import Image

# Generate a small float image in Numpy array
grey32 = np.random.randn(2,3).astype(np.float32)

# Convert to PIL Image and save
Image.fromarray(grey32).save('test.tif')

# Read back from disk and convert to Numpy array
reloaded = np.array(Image.open('test.tif'))

# Inspect
print(grey32)

array([[-0.28032717, -1.7696048 , -0.9811929 ],
[-0.7785768 , -1.2427857 , -0.33241433]], dtype=float32)

print(reloaded)

array([[-0.28032717, -1.7696048 , -0.9811929 ],
[-0.7785768 , -1.2427857 , -0.33241433]], dtype=float32)

如果您的查看器无法显示包含 float 的 TIFF 文件,您始终可以使用 ImageMagick 将它们转换为可查看的内容:

magick float.tif -auto-level viewable.png

我知道tifffilepyvips都是处理 TIFF float 的好 Python 库。

关于python - 如何在保持分辨率的同时将 2D float numpy 数组无损保存到灰度图像中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58170901/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com