shuchuan的个人博客分享 http://blog.sciencenet.cn/u/shuchuan

博文

[转载]MATLAB——HDF文件

已有 546 次阅读 2019-4-11 16:50 |个人分类:MATLAB|系统分类:科研笔记|文章来源:转载

1.介绍

HDF是由美国国家超级计算应用中心(NCSA)创建的,以满足不同群体的科学家在不同工程项目领域之间的需要,用于存储和分发科学数据的一种自我描述、多对象文件格式。

HDF最初产生于20世纪80年代,从HDF1到HDF4的各个版本在本质上是一致的,HDF4具有向后兼容的特性。HDF5在1998年推出,相较于以前的HDF文件,可以说是一种全新的文件格式,它与HDF4只在概念上一脉相承,而在数据结构的组织上却截然迥异。许多遥感影像采取HDF格式存取,一些大的图像处理软件也开始提供接口读取HDF文件。

HDF文件的数据格式是一种分层式数据管理结构,一个HDF文件可以包含多种类型的数据,如栅格图像数据、科学数据集和信息说明数据等,这种数据结构方便了我们对于信息的提取。例如,当我们打开一个HDF图像文件时,除了可以读取图像信息外,还可以很容易查取其地理定位、轨道参数、图像噪声等各种信息参数。

一个HDF文件应包括一个文件头(File Header),一个或多个描述块(Data Description Block),若干个数据对象(Data Object)。文件头位于HDF文件的头四个字节,其内容为四个控制字符的ASCII码值,四个控制字符为^N, ^C, ^S, ^A,可用于判断一个文件是否为HDF文件格式。数据对象是HDF文件最基本的存储元素,包括一个描述符合一个对应的数据元素。描述符的长度为12个字节,主要用来描述这个数据元素的某些信息。头两个字节称为标识符,其内容为16位的无符号整数,其作用为确定数据元素区的数据类型,每一种数据类型都对应一个默认无符号整数;紧跟其后的是两个字节的参照数,它也是16位的无符号整数,它是为了区别同一标识符下的不同数据对象,因此标识符和参照数二者合在一起唯一确定一个数据对象;后面四个字节组成的32位无符号整数表示的是数据元素在HDF文件中的偏移量,也就是从文件开始位置到数据元素的起始位置所包含的字节数;最后的四个字节用来表示本描述符所对应的数据元素区所占用的字节数,也是32位无符号整数。数据元素是数据对象中的裸数据部分,也就是数据本身,可以是字符、整数、浮点数、数组等。在实际的HDF文件中,描述符并不是和它对应的数据元素连在一起,而是把相关的许多描述符放在一起,构成一个数据描述符的块,在这个块的后面顺序存储了各个描述符所对应的数据元素。打个比方,这里的描述符相当于一本书的目录,而数据元素相当于目录中各个章节所对应的实际内容。这种数据描述符块的前面有对应的块头。块头的内容分为两个部分,第一部分为16位无符号整数,表示在这个数据描述块中数据描述符的个数;第二部分为32位无符号整数,表示了下一个数据描述符块相对于文件起始位置的偏移量。因此,最后一个数据符块的块头的第二部分的内容为零。 

总的说来,HDF文件中的物理分布格式如下:文件头、第一个描述符块、数据元素、更多的描述符块以及更多的数据元素等等。关于数据描述符块和数据元素在HDF文件中分布的唯一规则就是第一个数据描述符块必须紧跟在文件头后。在此之后的数据描述块的块头中的偏移量把数据描述符块连接起来,而每个数据描述符中的偏移量又把数据描述符和数据元素连接起来。HDF数据类型:在这里首先明确两个概念,数据集和组。HDF文件通常包含几个密切相关的数据对象,把这些数据对象放在一起形成一个数据集,以满足特殊用户的要求。HDF主要有6种主要数据集:栅格图像、调色板、科学数据库、注释、Vsets和Vgroup,例如,五个或者六个数据对象可以用来描述一个栅格图像;八个或者更多的数据对象可以用来描述一次科学实验的结果,由于要把不同的数据对象结合起来构成集,就需要一种方法将数据对象有机的结合起来,这样就产生了组的概念,HDF的组用来明确和控制数据集。一个组也是一个数据对象,但是它的数据元素是由一系列的标识符和参照数组成,这些标识符和参照数所对应的数据对象就可以构成实际的数据集。例如,构成一个栅格图像的五个或者六个数据对象,它们构成一个集,而它们的标识符和参照数应该放在一个组所对应的数据元素区中,以将它们联系起来。

2.HDF5
1)低级函数
Library (H5)
Attribute (H5A)
Dataset (H5D)
Dimension Scale (H5DS)
Error (H5E)
File (H5F)
Group (H5G)
Identifier (H5I)
Link (H5L)
MATLAB (H5ML)
Object (H5O)
Property (H5P)
Reference (H5R)
Dataspace (H5S)
Datatype (H5T)
Filters and Compression (H5Z)

2)高级函数
h5create 创建hdf5文件
h5disp 显示hdf5文件属性
h5info 将文件结构读到结构体内
h5read 读取数据
h5readatt 读取属性信息
h5write 写hdf5文件
h5writeatt 写文件属性
3)读取方法
info = h5info('example.h5');                          %读取hdf文件信息
data = h5read('example.h5','/g2/dset2.1');%读取文件



http://blog.sciencenet.cn/blog-3265439-1172709.html

上一篇:[转载]MATLAB中的ncinfo函数简介
下一篇:闲得蛋疼1

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备14006957 )

GMT+8, 2019-7-24 16:56

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部