将 Numpy 阵列另存为 3 通道图像,同时保留分辨率



本质上,我的任务涉及将二维温度场(二维矩阵(转换为图像(以便保留分辨率(,然后对图像进行一些图像处理,然后将其转换回温度场。例如,如果我的"温度"字段是包含 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通道图像转换回包含温度值的二维矩阵?

正如人们在评论中所说,最好在灰度图像上操作,因为温度场正是......

灰度图像的典型格式是一个浮点数组,其值介于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

当然,只要可以还原正向变换,就可以应用非线性变换从温度转换为灰度级别。

最新更新