使用GDAL对HDF数据进行校正
在使用HDF的数据时,首先要对其进行校正处理。比如MODIS数据中,有个去除蝴蝶结现象。一般出现这种情况会在低分辨率卫星数据中(个人理解),比如气象卫星,海洋卫星等,这类数据一般的数据分辨率都很低,几百米到几公里,主要用于大范围的检测。
下面以MODIS数据为例,简单说明一下蝴蝶结现象出现的原因。
MODIS图像在其扫描线宽度方向由扫描条带组成,条带宽度为10(1000米分辨率)、20(500米分辨率)和40个象素(250米分辨率),所以地球的球面特性会导致扫描带两端产生数据的重叠现象,将扫描带组成遥感图像后即形成所谓的“蝴蝶结”效应(bowtie现象),如以1公里分辨率为例,每条扫描线1354个象素,其象素尺寸在星下点为1╳1公里,而随着扫描角的增大和地球曲率的影响象素尺寸逐渐增大,当扫描角为55度,其象素尺寸变为沿扫描方向4.83公里 、沿轨道方向2.01公里的大小,象素尺寸随扫描角的变化规律如图-1所示。这种象素尺寸的几何形变造成两个现象,一是边沿象素对象区域的重叠现象,而且越靠近边沿,象素重叠现象越严重;二是沿扫描方向图象的压缩失真,如图2所示。

图1 MODIS数据蝴蝶结现象产生的原因

图2 MODIS蝴蝶结现象
蝴蝶结的处理一般有两种:Bowtie处理算法主要有“星历表法”和“非星历表法”两种。“星历表法”是根据卫星的星历表生成标准地理网格,将数据按照其地理坐标投影到该网格上来进行匹配,在地理定标的同时消除bowtie现象。International MODIS/AIRS Processing Package (IMAPP)和NASA GSFC MODIS Level 1均使用的这种方法。
Terra卫星的星历表由TDRSS 星上导航系统(TDRSS Onboard Navigation System,TONS)生成,随着科学数据流的第二类工程组包(Type 2 Engineering Group packets)广播到地面站。
Aqua卫星没有星上导航系统,因此星历表需要通过地面控制站上传到卫星然后再下传给其他地面站,或者使用估计的星历表(精确的星历表在几个小时的延迟之后才可能获得)。
由于Terra和Aqua的MODIS L1B数据产品均不包含星历表,因此,用户无法使用星历表对MODIS L1B数据进行bowtie处理。对于Aqua卫星的MODIS数据,使用估计的星历表进行数据处理会影响bowtie处理的准确性,使用精确的星历表则无法实现实时处理。
对于气象卫星(静止卫星)、海洋卫星的数据的校正,一般也是使用的“星历表法”进行处理。对于HDF数据来说,这个星历表其实是两幅单波段的浮点型数据,其像元值是经度或者纬度值。下面以一个MODIS的数据为例(MOD021KM.A2010287.0250.005.2010287121743.hdf)进行说明。
首先我们使用gdalinfo工具查看这个MODIS数据的信息,输出的信息如下:
图3 第一个子数据集未校正前(R:15,G:14, B:13)接下来我们使用gdalwarp来对上面这个子数据集进行处理。由于坐标查找表是使用经纬度的,所以处理的结果数据也是WGS84的经纬度数据。在使用gdalwarp是需要指定输出图像的投影,我们手动指定为WGS84(EPSG:EPSG:4326)。处理的命令行代码如下:
图5 处理后的数据以及RGB波段组合
图6 经过gdal处理后的数据
参考资料:
1、http://liangshzh0816.blog.163.com/blog/static/3477676200892010294314/
2、http://wenku.baidu.com/view/7491f6fb700abb68a982fb9e.html
3、http://trac.osgeo.org/gdal/wiki/rfc4_geolocate