基于HDF4 文件格式的MODIS 1B影像数据提取的研究与实现文档格式.docx
《基于HDF4 文件格式的MODIS 1B影像数据提取的研究与实现文档格式.docx》由会员分享,可在线阅读,更多相关《基于HDF4 文件格式的MODIS 1B影像数据提取的研究与实现文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
一个HDF4文件包含一个文件头,一个或多个描述符块,若干个数据元素(图1)。
文件头用来确定是否为HDF4文件,它由4个ASCII码形式的控制字符组成,每个字符占用一个字节,分别为N、C、S、A。
数据对象是HDF的基本结构。
一个数据描述符和一个数据元素组成一个数据对象。
数据描述符包含了数据元素的类型、位置、尺度等信息。
数据元素则是实际的数据资料。
所有的数据描述符都为12个字节长,包含标识符、参照数、
数据偏移量和数据长度4个部分(图2)
数据标识符(tag)用来确定数据元素的类型,它是16位无符号整型数(1~65535),如果没有与其相对应的数据元素类型,则tag值为DFTGA-NULL(或0)。
HDF文件中的每个标识符都有唯一的一个参照数与之相对应。
参照数是一个16位无符号整型数,在数据对象中一般是不可变的。
标识符和参照数相结合就可确定唯一的数据对象。
数据偏移量是指从文件开始位置到数据元素起始位置所包含的字节数。
数据长度指整个数据元素占用的字节数。
数据偏移量和长度均为32位无符号整型数
在HDF4文件中通常将含有相关数据的数据对象分为一组。
这些数据对象组称为数据集。
HDF4有6种主要数据对象类型:
栅格图像、调色板、科学数据集、注释、Vdata和Vgroups。
通过NCSA网站免费提供识别HDF对象接口的HDF软件库可以对每种类型的HDF数据对象进行访问和处理。
MODIS1B文件中使用的HDF数据对象有SDS、Vdata和对象注释3种。
3HDF软件库
HDF软件库包括3个接口层,分别是HDF底层、HDF应用层及HDF顶层(图3)
HDF底层为软件开发者所应用,它包括文件输入/输出、差错控制、内存管理、物理存储等应用程序接口。
应用层接口又分为单文件和多文件两种,包括多个独立的模块分别用来简化各种数据对象(8位图像、24位图像、色彩、科学数据、注释、Vdata等)的存储和访问过程。
HDF程序开发人员主要是使用这些应用接口,而不必考虑底层的细节,这大大简化了HDF应用程序的开发。
HDF顶层包括HDF应用、NCSA和第3方开发者制作的应用程序
在底层和应用层中,HDF软件库由可调用的程序组成,这些程序被汇集在一起构成接口。
每个接口都提供特定的HDF函数访问相应的HDF数据对象。
3.1 SDAPI
SDAPI是用来管理科学数据集SDS(ScientificDataSet)的接口,它由一系列可操作的SDS函数组成。
SDS就是多维数组集,存储和描述了除图像以外的其它对科学调查有用的科学数据。
每个SDS都必须包含SDS数组、名称、数据类型和维数4类元素(图4)
一个HDF文件可以有多个SDS数据集,通过SDS的索引号识别不同的数组。
SD接口提供了对SDS对象进行访问、定义、输入/输出、检索和应用的程序集,利用它可以轻易地实现读取、存储、管理SDS的属性和数值。
调用SDAPI创建或访问SDS步骤如下(括号内的函数支持C语言):
(1)打开一个HDF4格式文件并初始化SD接口(SDstart);
(2)创建一个新的数据集或者使用数据集索引号打开一个存在的数据集(SDcreate,SDselect);
(3)对指定的数据集执行期望的操作,如写数据(SDwritedata)、读数据(SDreaddata)、读属性(SDfileinfo)、压缩数据(SDsetcompress)等;
(4)结束数据集的访问(SDendaccess);
(5)结束SD接口,关闭HDF文件(SDend)。
3.2 VSAPI
VSAPI是管理Vdata数据的接口,它由一系列可操作Vdata函数组成。
在HDF中,Vdata模块提供给用户存储自定义表的框架,其表结构
如图5所示。
一个字段可以由多个实体元素组成,但是一个字段上的所有元素只能是同一种数据类型。
同SD接口一样,VS接口提供了一个程序集,用来实现对Vdata对象进行访问、定义、输入/输出、检索和应用等。
调用VSAPI来创建或访问Vdata步骤如下(括号内的函数支持C语言):
(1)打开一个HDF4格式文件(Hopen);
(2)初始化Vdata接口(Vstart);
(3)创建一个新的Vdata或者使用Vdata的参考
数打开一个存在的Vdata(VSattach、VSseek);
(4)对指定的数据集执行期望操作,如写数据(VSwrite)、定义字段(VSfdefine)、读数据(VSread)、读属性(VSnattrs)等;
(5)结束访问Vdata(VSdetach);
(6)结束VS接口(Vend);
(7)关闭HDF文件(Hclose)。
4 MODIS1B数据
MODIS是高信噪比仪器,具有高效的数据存储格式(HDF)、信息丰富、数据获取快及覆盖范围广等特点,使其在对地实时监测等方面有较大的应用价值。
在MODIS产品中将分辨率相同、光谱性质相同的数据放在同一数据集对象内,称为波段组。
MODIS1B资料有36个波段组,其波段介于0.405~14.385μm之间,涵盖可见光、近红外光与热红外光,并提供3种不同的空间解析度,它们分别为250m、500m和1000m。
一组MODIS1B的标准产品应该包括下列3个文件
:
①MODIS250m.hdf分辨率为250m,含1~2波段;
②MODIS500m.hdf分辨率为500m文件,含3~7波段,包括250m两个通道,其分辨率被降低到500m;
③MODIS1000m.hdf分辨率为1000m,含8~36波段,包括250m和500m两个通道,所有通道的分辨率均为1000m。
图6是通过HDFExplorer浏览器查看某1km分辨率的示意图。
图中列出了该MODIS文件中的36个波段组所在的数据集。
三维数据集中第一维(Dimension0)代表波段,第二维(Dimension1)代表轨道方向的观测值,第三维(Dimension2)代表扫描方向的观测值。
其中“RefSB”指的是太阳光反射波段“,Emissive”指的是热辐射波段
波段8~19实际上是14个波段,包括13lo,13hi,14lo,14hi(若加上波段26则为15个波段)。
波段26的数据作为单独的数据集列出来。
表1列出了MODIS1B数据中所有波段组的数据集分布和用途
表1MODIS1B波段分布及其主要用途
波段
波段范围
通道1~19/nm;
通道20~36/μm
数据集名称
分辨率/m
主要用途
1
620~670
EV-250-RefSB
250
陆地、云的分
界线
2
841~876
3
459~479
EV-500-RefSB
500
陆地、云的属
性
4
545~565
5
1230~1250
6
1628~1652
7
2105~2135
8
405~420
EV-1km-RefSB
1000
海洋颜色、水
体表层性质、
生物化学
9
438~448
10
483~493
11
526~536
12
546~556
13
662~672
14
673~683
15
743~753
16
862~877
17
890~920
大气、水蒸汽
18
931~941
19
915~965
20
3.660~3.840
EV-1km-Emissive
地表、云温度
21
3.929~3.989
22
23
4.020~4.080
24
4.433~4.498
大气温度
25
4.482~4.549
26
1.360~1.390
或EV-Band26
卷云、水蒸汽
27
6.535~6.895
28
7.175~7.475
29
8.400~8.700
30
9.580~9.880
臭氧
31
10.780~11.280
32
11.770~12.270
33
云顶高度
34
13.485~13.785
35
13.785~14.085
36
14.085~14.385
Latitude
经纬度值
Longitude
5提取MODIS1B影像数据的关键技术
一次卫星扫描的数据量非常大,且覆盖范围广,而实际应用中只能针对某地区某波段的数据进行分析处理。
因此影像数据的提取可以大大提高工作效率,同时也节省了存储空间。
提取MODIS1B影像数据有3个关键:
波段提取、定位数据提取和Vdata数据提取。
5.1 波段数据提取
根据各波段数据的主要用途,MODIS数据的应用通常是对某几个波段进行分析和处理。
例如,利用波段20、21、22、23、31和32可以反演整个地球陆地表面的温度;
波段1、2、6、7、20、21、22、23、31和32用于探测火灾的;
波段3对叶绿素和叶色素浓度敏感,叶绿素在波段4有一个反射峰,可以反映植被分布范围和生长密度等等
在研究了HDF文件格式和MODIS数据组成后,调用HDF软件库的SDAPI,实现读写MODIS1B中的任意波段数据集。
提取波段数据集流程图如图7所示。
图7 提取波段数据集流程图
在图7中,左边是打开已知的HDF文件并读取选择波段,右边是创建一个新的HDF文件并根据选择的波段创建相应的数据集,将源文件中该波段读出的数据写入此数据集中。
写数据到新的数据集的过程必须在结束源数据集的访问以前。
另外,对于大数据量进行写入时要考虑以块的方式和用不同的压缩方式等进行优化。
5.2 定位数据提取
MODIS产品中包括定位数据集——经度和纬度数据。
1km文件中包括高度、范围和太阳相对于MODIS的位置等辅助数据集。
读取HDF文件中经度值的关键代码如下:
/*按经度数据集的名称Longitude查找其索引值*/
index-sds=SDnametoindex(sd-id,“Longitude”);
/*根据数据集索引值选择数据集*/
sds-id=SDselect(sd-id,index-sds);
/*读取数据集的数据*/
status=SDreaddata(sds-id,start,NULL,
edges,(VOIDP)f32);
经纬度数据的提取类似于波段数据的提取。
打开HDF文件后,根据经纬度数据集的名称(分别为Longitude和Latitude),按名称查找数据集的索引值,然后根据其索引值打开该数据集,接着开始读数据,最后把读出的数据打印(printf)出来就可以了。
5.3 Vdata数据提取
MODIS1B数据中附加的元数据存储在名为“Level1BSwathMetadata”的Vdata中,记录扫描方向的数据信息。
一个记录包括一次扫描的14个元数据字段,记录了一些重要信息,如扫描时间、扫描帧数等。
通过调用HDF4软件库的VS接口,可实现读写Vdata数据。
Vdata数据提取流程图如图8所示。
图8 提取Vdata数据流程图
与提取SDS数据集不同,打开HDF文件后通过初始化VS接口开始Vdata访问,而访问SDS直接调用SDstart()函数就可以在打开HDF文件的同时初始化SD接口。
结束Vdata必须是先终止Vdata的访问,再结束VS接口,最后是关闭HDF文件,而调用SDend()函数就可以关闭SDS接口和HDF文件了。
6 结束语
1988年NCSA就推出了第一代HDF4文件格式和HDF软件库,1998年NCSA推出了HDF5文件格式,HDF5只是在概念上与HDF4以及从前的版本一脉相承,可以说是一种全新的语言。
虽然HDF5拥有很多HDF4无法比拟的功能,但是很多应用软件还没有提供识别HDF5文件的接口。
2003年12月,NCSA升级HDF4到4.20版本,扩展了原有HDF4用户的使用功能。
目前,国内MODIS数据资料应用的HDF格式都是HDF4版本,且处于初步应用阶段。
在MODIS1B影像数据提取的基础上可以科学地建立影像数据管理系统和影像数据发布系统,为进一步研究遥感课题提供便捷的平台。
随着对HDF文件的深入了解,相信未来会有更加广泛的应用。
参考文献
[1] NCSA,HDF4User’sGuideHDF4.2r0[EB/OL].http:
//hdf.ncsa.uiuc.edu/doc.html,2003.
[2] 刘玉洁,杨忠东.MODIS遥感信息处理原理与算法[M].北京:
科
学出版社,2001.
[3] 朱黎江,秦其明,陈思锦.ASTER遥感数据解读与应用[J].国土
资源遥感,2003,
(2):
59-63.
[4] 黄春林,李新.HDF-EOS数据格式在处理空间数据中的应用[J].遥感技术与应用,2001,16(4):
252-259.
[5] NASAMODISLevel1BProductsDataDictionary[EB/OL].www.mc2st.ssai.biz/L1B/L1B-docs/LATEST-L1B-DOCUMENTS/L1B-Data-Dictionary,2003.
[6] NASAMODISLevel1BProductUser’sGuideForLevel1BVersion4.2.0(Terra)andVersion4.2.1(Aqua)[EB/OL].www.mcst.ssai.biz/L1B/L1B-docs/LATEST-L1B-DOCUMENTS/L1B-Product-Users-Guide,2003.
[7] 曲辉,陈圣波.中分辨率成像光谱仪(MODIS)数据在地学中的应用前景[J].世界地质,2002,21
(2):
176-180.
[8] NCSAHDF5User’sGuide[EB/OL].http:
//hdf.ncsa.uiuc.edu/HDF5/doc/UG/Feb.2004.