MATLAB教程——MATLAB读取HDF文件
栅格图像: 数据模式提供一种灵活方法存储。描述栅格图像数据,包括8bit栅格图像和24bit栅格图像。栅格图像集(Raster Image Sets)提供用来存储图像和任意数量的可供选择的图像描述符的框架,通常包含图像数据布局的描述和图像数据,它还可能包含调色板和颜色校正信息和任何其他相关的用来显示图像的数据。将所有这些信息联系起来的就是栅格图像组(Raster Image Groups),它包含了所有这些数据对象的标识符和参照数。这些数据对象的数量不是固定的,可以通过选择来确定需要的信息。 调色板:提供图像的色谱。调色板是给一幅图像加入颜色的方法,它相当于一个表格,这个表格可能由不同的大小,但HDF文件只支持256色的显示。对于栅格图像中的每一个数据,在表格中都有其对应的RGB数值,用来显示颜色。 科学数据集: 用来存储和描述多维科学数据陈列。科学数据集提供了一个用来存储多维数组数据以及其相关信息的框架。数组的数据类型可以是整数或者是浮点数。它的组织方式与栅格图像相同。科学数据集必须包含的组件有数组、名称、数据类型和数组的维数。数组是一种多维的数据结构,它是科学数据集的主要组成部分,存储着所需要的核心数据,比如某一次科学实验结果的数据。科学数据集的名称在其刚产生的时候就赋予了它,在以后的应用中不能再被改变,它的名称在HDF文件中可以不是唯一的,但是唯一的名字将使得在同一文件中区别不同的科学数据集更加容易。数据类型指的是存储在数组中数据的类型。数据维数确定了数组的形式和大小。数组维数的数目被称为数组的阶数,每一维都有一个指针和一个标识符,还包含大小和名称。指针是用来描述某一维在数组中的位置。而标识符将它与其他维区别开来。每一维的大小是一个正整数,但是如果其值为零,表示这一维是无限维。另外,科学数据集还提供了三种类型的可供选择的组件:预定义的属性,用户定义的属性和维数规模。预定义的属性有保留的名称,在某些情况下还有预定义的数据类型和数据项目的个数,应用程序可以用预定义的属性来对数据进行操作。用户自定义属性包含了关于文件、数组或者维数的辅助信息。 Vdata: 是一个类似于框架,用于存储和描述数据的表格。Vdata 是verdex data的缩写,这种数据格式起初是用来存储多边形顶点和边的信息,但现在它的应用范围已经被大大扩展了。Vdata相当于一个表格,是很多记录(Records)的集合,每个记录的值存储在固定长度的域(Fields)中,所有的记录的数据结构都是相同的,每个域中的值都有相同的数据类型。一个Vdata都由一个名称,一个类和一系列单独的域的名称所唯一确定。 Vdata的名称主要是用来描述Vdata的内容,它通常被用来在文件中搜寻Vdata的位置,一个Vdata的类更进一步的确定了它的数据的用途和目的。最后,Vdata的域的名称是用来分配给Vdata域的标签。每一个记录是由一个或更多的固定长度的域所组成。Vdata的记录和域由指针来标识。这个指针是从零开始依次递增的。每一个域中的数据都有唯一的类型。同时在一个域总可以有几个组件,组件的个数称为域的序(Order)。 注释(Annotation):文本格式,用来描述HDF文件自身的属性或者HDF数据目标。我们通常需要把一个关于HDF文件信息的文本文件的注释联系起来,或者直接存储在HDF文件中。HDF提供了两种实现这一目的方法:注释数据对象和属性的分配。需要注意的是注释本身也是一种数据对象,因此它也有自己的描述符,并指向了包含有注释信息的数据元素。这个数据元素有以下的信息:被注释对象的标识符和参照数以及注释本身。 Vgroup: 用来将数据对象联系起来。一个Vgroup中可以包含其他的Vgroup或者HDF数据对象,因此这种结构类似于Unix文件结构。属于同一个Vgroup的数据对象通常被称为Vgroup的成员,Vgroup必须有一个名称以及一个可供选择的与其相联系的Vgroup类,此二者被用来描述属于同一个Vgroup的数据对象并将其分类。Vgroup的名称是字符串,在HDF文件中不同的Vgroup可以有相同的名字,但是不同的名字可以使得区分Vgroup更加容易,Vgroup类也是一个数据字符串,能够用来根据数据对象的使用目的来分类。同时需要注意的是,Vgroup可以包含任意数目的Vgroups和数据对象,包括其他Vgroup的成员。
1、HDF4
1)低级函数
首先,matlab为hdf函数的读取提供了接口。一种应用程序接口只能够操作一种类型的数据对象。当每调用一种数据类型的专用接口时,其他的数据类型对用户来说都是不可见的,相当于在HDF文件中只有这一种数据类型的数据结构存在。
i.程序包(使用fortran的数据结构)
matlab.io.hdf4.sd 用于HDF数据集
matlab.io.hdfeos.gd HDF-EOS 格点数据
matlab.io.hdfeos.sw HDF-EOS测绘带文件
ii.函数
hdfan,hdfhx ,hdfh,hdfhd,hdfhe,hdfml,hdfpt,hdfv,hdfvf,hdfvh,hdfvs ,hdfdf24,hdfdfr8
分别用于不同类型数据的接口。具体使用方法请自行help,因为二爷实在是没用过这些东东…不好意思了…如果有使用过这些东东的童鞋(估计八成是搞遥感的)愿意分享你们的使用心得,二爷在这里感激不尽!
2)高级函数
hdfinfo 读取hdf文件基本信息
hdfread 读取hdf文件相应内容
hdftool 可视化界面读取hdf文件信息
3)读取方法
用接口读取hdf的方法我就不说了,因为我不会……(─.─|||
使用高级函数去读hdf文件就简单多了
info = hdfinfo('example.hdf')%读取hdf文件信息
dsets = info.SDS%读取SDS信息
dset = hdfread('example.hdf', 'Example SDS')%愉快的读取文件啦~
貌似本文最重要的就是这三行了……
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)高级函数(我参考的是2015b,我记得之前的版本好像有点不一样。大家注意一下。)
h5create 创建hdf5文件
h5disp 显示hdf5文件属性
h5info 将文件结构读到结构体内
h5read 读取数据
h5readatt 读取属性信息
h5write 写hdf5文件
h5writeatt 写文件属性
3)读取方法
用接口读取hdf的方法我就不说了,因为我不会……(─.─|||
使用高级函数去读hdf文件就简单多了
info = h5info('example.h5')%读取hdf文件信息
level2 = info.Groups(2)
dataset1 = level2.Datasets(1)
data = h5read('example.h5','/g2/dset2.1');%愉快的读取文件啦~
至于批量读取神马的,之前在nc文件部分已经介绍了其精髓,大家模仿一下就好咯~说多了都是废话了~