遥感入门 | H5文件读写
遥感入门 | H5文件读写
ytkz什么是 H5 文件?
H5 是用于存储大量数据的分层数据格式 (HDF) 之一。它用于以多维数组的形式存储大量数据。该格式主要用于存储组织良好的科学数据,以便快速检索和分析。H5 是作为 H4 的一种更增强的文件格式引入的。它现在由 HDF Group 提供支持。
HDF 文件格式简史
HDF 文件格式被 NASA 选择为存储科学数据的标准方法。在此之前,图形基础工作组(Graphics Foundations Task Force,GFTF)于1987年开始制定这样的标准,HDF在对15种不同的文件格式进行调查后被正式批准。
HDF5 文件格式
H5 文件采用符合 HDF5 文件格式规范的分层数据格式。这些规范奠定了存储在磁盘上的 HDF5 文件的整体结构,但最终用户不需要这些底层细节。
H5文件常用于航空航天、物理、工程、金融、学术研究、基因组学、天文学、电子仪器和医学领域。
HDF5 数据模型
HDF5 文件就像一个由异构数据对象组成的容器。例如,这些数据集可以是图像、表格、文本元素、图形,甚至是PDF和Excel 文档等文档。
读写H5文件
大概流程是查询文件里的主键,读取主键的数据
以下代码是中国海洋一号的CZI_L2C数据中的叶绿素A数据,并保存为PNG图像格式
import h5py
from matplotlib.figure import Figure
from matplotlib.colors import LinearSegmentedColormap
import numpy as np
# RGB 也可以设置透明度
def colormap():
return LinearSegmentedColormap.from_list('cmap',
['#FFFFFFFF', '#0198F5FF', '#00FF00FF', '#FFFF00FF', '#FF0000FF',
'#FFFFFF00'],
256)
def trans_png(infile: str, nvi_file: str):
in_file = h5py.File(infile, mode='r')
# H5 主键
print(list(in_file.keys()))
print(list(in_file["Geophysical Data"].keys()))
nvi_ds = in_file['/Geophysical Data/Rrs460']
print(nvi_ds.shape,nvi_ds.dtype)
for attr_name,attr_value in nvi_ds.attrs.items():
print(attr_name,attr_value)
dataset = nvi_ds[:].astype(float)
fig = Figure(figsize=dataset.shape[::-1], dpi=400, frameon=False)
# cmap设置色带
# vmin,vmax 设置色带范围
dataset[dataset == nvi_ds.attrs['FillValue']] = np.NAN
dataset = dataset*nvi_ds.attrs['Slope'] #乘以缩放系数
vmin = np.nanmin(dataset)
vmax = np.nanmax(dataset)
ds = (dataset - vmin) / (vmax - vmin)
# fig.figimage(ds, cmap=colormap(),vmin=np.nanmin(ds),vmax= np.nanmax(ds))
fig.figimage(ds, cmap="jet")
fig.savefig(nvi_file, dpi=1, format='png')
print('success')
if __name__ == "__main__":
input_file = r"E:\DDD\HY1C\H1C_OPER_CZI_L2C_20200625T032700_20200625T032755_09418_10\H1C_OPER_CZI_L2C_20200625T032700_20200625T032755_09418_10.h5"
output_nvi_file = "./H1C_OPER_CZI_L2B_20190803T014203_20190803T014258_04730_10.nvi.png"
trans_png(input_file, output_nvi_file)
结果如下:
小结
H5文件和NC文件的读写大体上是一样的,海洋一号的数据可以在https://osdds.nsoas.org.cn/ 下载
本文的数据,可以在公众号里回复“海洋一号”下载