基于GDAL的卫星图像仿真生成方法
2018-08-22周晓华吴帅王霁云郭海艮
周晓华,吴帅,王霁云,郭海艮
(1.火箭军指挥学院,武汉 430012;2.北京四中,北京 100000)
0 引言
在遥感卫星实时仿真中,常常需要仿真输出含有动态仿真实体的可见光卫星图像,并在此基础上快速识别卫星图像。由于在仿真系统中,卫星和各仿真实体状态随仿真时间不断变化,不能直接使用现有的历史卫星图像数据,而是需要根据卫星和仿真实体的动态,实时生成仿真卫星图像。另外,在检验图像识别算法时,也需要有大量不同的卫星图像做支撑。因此,研究卫星图像仿真生成技术是个很重要的课题。目前国内做这方面研究的人不多。王更科[1]主要研究了地表反射率、大气辐射传输模型、典型植被光谱数据,并在此基础上仿真生成卫星图像,方法比较复杂,没有考虑不同的气象和观测对象。
本文根据仿真系统中卫星的实时位置、运动方向,并根据各仿真实体的状态以及周边的地理、气象环境,采 用 GDAL(Geospatial Data Abstraction Library)和VC++编程,快速生成一景标准格式的可见光卫星图像。主要涉及到卫星轨道及实时状态获取、卫星图像格式分析、卫星图像的平移和旋转、陆地岛屿的叠加、仿真实体和环境信息的叠加、卫星图像显示等。其中卫星轨道及实时状态的获取采用基于SGP4/SDP4的卫星轨道摄动模型,和真实卫星轨道误差每天小于500米,本文不作讨论;卫星图像格式分析参考了刘修国[2]等人的论文;卫星图像的平移和旋转、陆地岛屿的叠加、仿真实体和环境信息的叠加等采用GDAL和VC++编程来实现;卫星图像的显示采用基于ArcGIS平台开发的三维仿真系统实现。
1 可见光卫星图像格式
可见光卫星过境拍照时,会按照其相机幅宽,形成一轨卫星条带数据。每轨条带数据,通过几何校正、辐射校正后,再将其切割成一块一块的图像,每块图像称为一景。
卫星图像通常是采用GeoTIFF格式存储的。TIFF是栅格文件格式的通用格式之一,由许多标签(Tag)组成,各个标签的实际入口称为域(Field)[3]。GeoTIFF是TIFF格式的扩展,它的结构继承了TIFF6.0标准。在GeoTIFF中需要描述图像的各种地理信息,这涉及到多种投影类型。若将这些投影类型和投影参数都作为单独的TIFF标签,将可能需要成百上千的标签。为避免这些问题,GeoTIFF把投影参数存储在一系列与标签功能相同,但更抽象的6个元标签(Meta-Tag)中,也称为GeoTag[4]。其中GeoDirectoryTag(地理信息目录表)存储了所有的GeoKey,我们生成卫星图像时也需要从中读取和写入地图的相关信息,这个过程通过调用GDAL的相关类和函数来实现。
2 GDAL简介
GDAL是一款功能强大的开源栅格数据处理类库,它提供了抽象数据类型来表达它支持的所有数据格式[5],可以提供对多种矢量和栅格文件的支持。很多GIS系统都使用了GDAL库,包括著名的ArcGIS、Google Earth等。
3 卫星图像平移和旋转
一景长宽均为80000像素(对应地面面积约500×500km2)的卫星图像,数据量大约7.2GB,为了处理方便,我们一般使用将1景卫星图像均分成4×4共16幅图的二级产品。
3.1 图像准备
由于卫星图像数据量很大,完全重新生成一景图像耗时较长。本文采用的方法是预先准备一景共16幅用Photoshop图像处理软件处理好的全水域的卫星图像,然后对图像进行平移、旋转、图层叠加,主要采用GDAL和VC++编程来实现。
使用GDAL库前首先要进行注册和初始化设置,代码如下:
3.2 图像平移
图像平移目的是将一景卫星图像的中心点平移到卫星临空时的星下点坐标(Lon1,Lat1)。首先读取第三行第三列图像的坐标系(UTM投影坐标系)和左上角UTM坐标(X0,Y0),即本景图像的中心点坐标,然后构建从WGS坐标系到UTM投影坐标系的坐标转换体系,将坐标(Lon1,Lat1)转换成 UTM 坐标(X1,Y1),从而计算出图像偏移量(ΔX,ΔY)。再依次更新16幅图的左上角坐标平移图像。部分核心代码如下:
3.3 图像旋转
除了地球同步卫星外,大部分卫星都是以一定的倾角绕地球飞行,典型的卫星轨道和轨道在地面投影示意图如图1所示。
图1 卫星飞行轨道示意图
卫星处于不同位置时,其速度方向与赤道面的夹角也是不同的,这就导致了不同纬度的卫星图像朝向不一致。因此需要根据卫星轨道摄动模型求出卫星的瞬时速度方向,再将卫星图像旋转。部分核心代码如下:
4 图层叠加
经过平移和旋转的卫星图像还是全水域的,需要根据其坐标依次叠加对应区域的陆地、岛屿、仿真实体和仿真气象等图层。
4.1 陆地岛屿图层叠加
预先准备好带Alpha通道的全球大部分陆地、岛屿的PNG图像,水域部分设置成透明,图像采用UTM投影(Universal Transverse Mercator Projection)。这种投影是将北纬84°至南纬80°之间的全球区域按照经度分为60个带,每带经度跨度6°,该投影在两条相割的经线上没有变形,角度也没有变形,通常用于世界军用地图和地球卫星图像。
然后根据卫星图像中心点坐标,截取对应区域的PNG图像叠加到卫星图像上。
图层叠加用到的核心函数是:
CPLErr RasterIO(GDALRWFlag,int,int,int,int,void*,int,int,GDALDataType,int,int*,int,int,int);
4.2 仿真实体图层叠加
预先准备多种类型仿真实体的卫星照片,转换成PNG格式,背景部分设置成透明,朝向统一朝正北。然后根据仿真实体的类型、朝向、状态来选择图像,并旋转角度,叠加到卫星图像上。
仿真实体的图像旋转可以用VC实现,图层叠加方法类似4.1。
4.3 气象图层叠加
气象主要考虑云层的影响。预先准备好少云、薄云、厚云等类型的PNG云图,背景部分设置成透明。然后根据气象仿真模型的仿真数据,选择对应的云图叠加到卫星图像上。
图层叠加方法类似4.1。
5 卫星图像的显示
生成的卫星图像可以在任何支持GeoTIFF格式图像的软件平台上显示,图2、图3、图4是我们基于Arc-GIS平台开发的三维仿真系统的显示效果。
6 结语
采用以上方法设计了可见光卫星图像动态生成软件,运行结果表明,该软件能迅速生成仿真卫星图像,位置误差小于4km,生成的图像经与真实的可见光卫星图像相比较,主观目测上差异很小,完全能够满足仿真和检验图像识别算法的需要。
图2 一景卫星图像三维效果图
图3 叠加陆地岛屿后的卫星图像局部放大图
图4 叠加气象和仿真实体的 卫星图像局部放大图