Python使用Matplotlib和PIL提高Numpy数组到图像转换的分辨率

2024-06-16 16:26:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在Linux CentOS 7上使用Python3.7.3。我正在进行与美国宇航局的THEMIS全天成像仪(ASI)数据库相关的研究,我试图从.cdf文件中提取极光图像(keograms)(这些文件以NumPy数组的形式描述每个极光时代的视觉信息)。我在下面的代码中使用Matplotlib和PIL(Python图像库)将numy数组转换为其相应的图像:

我想指出的是,我在Linux终端中使用Python3控制台。另外,我还使用SpacePy库来读取.cdf文件pycdf.CDF文件(…)函数。

# Define .cdf file object as downloaded from NASA THEMIS ASI Database
>>> cdf = pycdf.CDF('/projectnb/burbsp/big/SATELLITE/themis/data/thg/l1/asi/gill/2008/01/thg_l1_asf_gill_2008011403_v01.cdf')
# Display .cdf file objects; 'thg_asf_gill' defines the set of arrays which contains the visual information stored for each image; i.e. cdf['thg_asf_gill'][0,:,:] would define the first epoch array up to cdf['thg_asf_gill'][1197,:,:] which is the last epoch array (a total 1198 epoch arrays).
>>> print(cdf)
range_epoch: CDF_EPOCH [2]
thg_asf_gill: CDF_UINT2 [1198, 256, 256]
thg_asf_gill_column: CDF_UINT2 [256] NRV
thg_asf_gill_epoch: CDF_EPOCH [1198]
thg_asf_gill_epoch0: CDF_EPOCH [] NRV
thg_asf_gill_row: CDF_UINT2 [256] NRV
thg_asf_gill_tend: CDF_REAL8 [1198]
thg_asf_gill_time: CDF_REAL8 [1198]

然后,我使用我在stack overflow上看到的建议,将NumPy数组(以最后一个epoch数组为例)转换为图像打印。你知道吗

>>> pyplot.imshow(cdf['thg_asf_gill'][1197,:,:])
>>> pyplot.show()

得到的图像(极光图像图)如下:

Image Plot of Aurora

正如您所看到的,有些功能没有显示,因为它们有点太暗,所以我尝试使用以下方法来调整颜色比例:

pyplot.clim(vmin,vmax)

其中vmin和vmax是一些值;特别是我使用vmin=5000和vmax=10000(我也使用了其他值),得到的图像(极光的改变图像图)是:

Altered Image Plot of Aurora

图像变得太扭曲(分辨率方面)。你知道吗

NASA THEMIS ASI图像如下:

NASA THEMIS ASI Image

如您所见,PIL和Matplotlib生成的图像在某种程度上是NASA实际图像的变换/旋转。此外,暗淡的特征也丢失了。那么,有什么方法可以提高合成图像的分辨率,这样明亮的特征就不会变得太亮/失真(从改变后的图像中可以看到),而暗淡的特征就会得到增强?你知道吗

谢谢你!你知道吗


Tags: 文件the图像数组nasacdfasfthemis