【问题标题】:Save Numpy array as a 3 channel image while preserving resolution将 Numpy 数组保存为 3 通道图像,同时保留分辨率
【发布时间】:2020-01-15 09:44:14
【问题描述】:

基本上我的任务涉及将二维温度场(2D 矩阵)转换为图像(以保持分辨率),然后对图像进行一些图像处理,然后将其转换回温度场。例如,如果我的温度字段是一个包含 25x25 单元格的网格,那么我的图像应该具有 25x25 像素的分辨率。

另外,由于我的温度场会有浮点值,我希望将浮点值保留在图像中,然后能够提取相同的值。

我尝试了以下方法: 我有一个代表一些物理场(如温度)的 numpy 数组,我想将其转换为图像以进行进一步处理。但是在创建图像时,matplotlibcmap 似乎是 python 中保留分辨率的唯一选项。

但是当我将 numpy 数组保存到颜色图中时,生成的图像似乎是 4 通道图像,而我想要 3 通道图像。

我的问题有解决办法吗?

使用的代码是:

import matplotlib as plt
cmap = plt.cm.jet
norm = plt.Normalize(vmin=temp.min(), vmax=temp.max())

# Map the normalized data to colors.  
image = cmap(norm(temp))

# Save the image
plt.imsave('temperature2image.png', image)

# Display the image
plt.pcolor(image)

##### PROCESS THE IMAGE #################

temp_after_processing = plt.imread('processed_image.png')

编辑: 另外,谁能告诉我是否有办法将 3 通道或 4 通道图像转换回包含温度值的二维矩阵?

【问题讨论】:

  • 您可以在之后移除 Alpha 通道,如 stackoverflow.com/questions/9166400/…
  • 使用 to_rgb 函数转换为 rgb。 colormap 默认将值转换为 rgba。
  • 另外,有没有办法将处理后的 3 通道图像映射回包含温度值的二维矩阵?
  • 你可以像image[:, :, :3]一样切掉额外的通道...但是你在做什么图像处理?也许你可以在阵列上做到这一点。或者在灰度图像(即普通的二维数组)上进行。其中任何一个都可能比将 3 通道图像转换回单色图像(即 2D 阵列)更容易。
  • 我想对图像执行一些计算机视觉任务。是的,使用灰度图像而不是转换为 3 通道图像是一种可能性。但不考虑这一点,我想知道是否有办法将 3 通道图像转换回 2D 矩阵。

标签: python-3.x numpy matplotlib image-processing


【解决方案1】:

正如人们在 cmets 中所说的那样,对灰度图像进行操作可能是最好的,因为温度场就是这样......

灰度图像的典型格式是浮点数组,其值介于 01 之间,因此您需要输入温度,

t0 = np.loadtxt(...) # → t.shape is 25x25

并且您想对它们进行规范化(保存用于规范化的值)

m_in = t0.min()
m_ax = t0.max()
t1 = (t0-m_in)/(m_ax-m_in) # → 0 ≤ t1 ≤ 1

处理您的图像

t1 = imageproc(t1)

并从灰度图像转换回我们应用的线性变换的温度场。

t1 = t1*(m_ax-m_in)+m_in

当然,您可以应用非线性变换将温度转换为灰度,只要您可以恢复正向变换。

【讨论】:

  • 您能告诉我可以使用哪个库(以及该库中的什么命令)将 t1(标准化温度矩阵)转换为 .png 文件,同时保留分辨率吗?例如,如果我的 t1 矩阵大小为 25x25,那么我的图像应保存为 25x25 图像。没有其他东西(如边框、颜色条等)应该在那里。谢谢。
  • 在上面的链接中,他们使用 PIL 保存图像,我必须将浮点值转换为 uint8。由于我正在使用温度,因此来回进行无损转换很重要。 (这就是我开始使用 matplotlib 的 imsave() 的原因。但是 plt.imsave() 只能将浮点 numpy 数组保存为 3 通道图像,而不是灰度图像)。有没有办法在保持分辨率的同时无损地将浮点 numpy 数组保存到灰度图像中?
猜你喜欢
  • 2015-02-20
  • 2010-11-05
  • 2020-02-17
  • 1970-01-01
  • 2016-07-25
  • 2020-01-29
  • 1970-01-01
  • 2010-10-28
相关资源
最近更新 更多