本质上,我的任务涉及将二维温度场(二维矩阵(转换为图像(以便保留分辨率(,然后对图像进行一些图像处理,然后将其转换回温度场。例如,如果我的"温度"字段是包含 25x25 单元格的网格,则图像的分辨率应为 25x25 像素。
此外,由于我的温度场将具有浮点值,因此我希望浮点值保留在图像中,并且能够在之后提取相同的浮点值。
我尝试了以下方法: 我有一个表示某个物理场(如温度(的 numpy 数组,我想将其转换为图像以进行进一步处理。但是在创建图像时,matplotlib
的cmap
似乎是 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通道图像转换回包含温度值的二维矩阵?
正如人们在评论中所说,最好在灰度图像上操作,因为温度场正是......
灰度图像的典型格式是一个浮点数组,其值介于0
和1
之间,因此您需要输入温度,
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
当然,只要可以还原正向变换,就可以应用非线性变换从温度转换为灰度级别。