卫星可见光波段观测模拟与分析系统设计与开发
2018-04-23曹丹阳
曹丹阳,霍 然,孙 凌,高 磊
(1. 北方工业大学 北京 100144;2. 国家卫星气象中心 北京 100081;3. 中国气象局中国遥感卫星辐射测量和定标重点开放实验室 北京 100081)
0 引言
卫星遥感在大尺度环境监测、全球和气候变化研究中占有重要地位[1]。随着遥感资料在全球变化、环境监测、数值预报预测中的应用日益深入,我国自主卫星数据的辐射精度和稳定度问题正在成为制约其高效应用的瓶颈。由于发射前测试有限、无可靠星上定标等原因,为保障卫星遥感器可见光波段的在轨辐射质量,需要采取替代方法进行遥感器在轨辐射特性分析,基于稳定地球目标的卫星观测模拟则是其中的重要手段之一[2]。本文面向可见光波段卫星观测模拟和分析的软件开发需求,针对Aqua MODIS和FY-3B MERSI的可见光波段,实现了全球深海晴空目标的卫星入瞳反射率模拟,以及模拟结果展示分析。
由于可见光波段的辐射传输计算耗时多,为了高效完成大数据量的辐射传输模拟计算,基于前期研究已经针对性建立了辐射传输模拟集群[3]。本文主要工作是完成卫星观测模拟前处理与辐射传输模拟集群的对接、对模拟结果进行展示分析,建立了为可见光波段卫星遥感器在轨辐射特性分析提供支撑的软件系统。
1 概要设计
1.1 系统体系结构
基于项目的需求,首先,本文所开发的系统主要针对深海晴空目标数据进行分析,因此需要对卫星数据进行观测模拟前的预处理工作,筛选出深海晴空数据。其次,由于可见光辐射传输模拟计算耗时多,体量大,为了高效完成辐射传输模拟计算,需要基于前期研究的模拟计算集群,设计与开发针对此集群的任务上传、计算结果的下载、调度与监控功能。最后,对模拟计算的结果进行数据分析和建模效果分析,设计与开发了可视化功能。根据以上需求分析,系统的体系结构如图1所示。
1.2 软件功能结构
根据需求提出的业务流程及需要实现的各项功能,系统主要划分为3个模块,详细划分及基本功能如图2所示。
其中预处理模块的主要功能是将卫星原始HDF文件中的数据按特定方案过滤、提取,生成可供模拟计算的预处理后任务列表;集群对接模块接收这个列表,逐行遍历,根据时间位置信息获取对应的环境数据,写成任务输入文件提交给集群。随后下载集群返回的计算结果文件,整理后写成用于分析的.CSV模拟结果文件。并在此过程中提供监控功能;分析与可视化模块主要针对模拟结果文件,对模拟计算的结果和建模效果进行分析。完成对数据标准化制图,输出统计信息或模型参数,并提供前台展示功能。
图1 系统体系结构Fig.1 S ystem architecture
图2 软件功能结构图Fig.2 Softw are functional structure
1.3 相关技术
(1)Python
关于开发语言的选择,由于Python语言开发效率高、跨平台性便于移植、拥有丰富的第三方扩展库,便于进行数据分析处理、机器学习算法的应用等,同样可以作为网站后台为前端展示提供支持,所以该项目决定采用Python作为开发语言。
(2)MySQL
在与集群对接模块,任务的上传下载等过程中,需要对计算任务或批次进行必要的管理、查看、监控。所以将使用数据库管理这些过程。MySQL数据库是一种关系型数据库,因其高效、开源、可移植性好、为多种语言提供 API、支持大量数据的查询存储等优良特性,为本项目所采用的数据库[5]。
(3)Django
系统的展示部分采用B/S结构。在网站后端框架的选择上,Python语言中有多款不同的 Web 框架,Django是最有代表性的一个。它是一款开源框架,采用了MVC设计模式,自带ORM框架,便于与数据库交互,还有表单、模板、缓存等许多实用功能[3]。因而Django作为本项目所采用的后台Web框架。
(4)数据可视化
数据可视化是一种表示数据或信息的技术,它将数据或信息编码为包含在图形里的可见对象,如点、线、条等,目的是将信息更加清晰有效地传达给用户,是数据分析或数据科学的关键技术之一流行的数据可视化框架种类繁多,在本文中主要应用了基于Python的Matplotlib、Basemap等扩展库。
1.4 运行环境
系统运行硬件环境最低配置:CPU 2.0GHZ 4核;内存4 GB;磁盘1 TB;网卡。系统运行软件环境:Python 2.7及相关扩展库;MySQL 5.7;Visual C++运行库>2010
2 详细设计与开发
2.1 预处理模块设计与开发
(1)功能说明
预处理模块的主要功能是提取卫星数据并按过滤方案过滤掉不适宜进行传输模拟计算的坐标点,该模块流程图如图3所示。
(2)实现方式
预处理模块的输入是卫星原始数据,HDF格式。HDF是一种可以存储图像信息以及其他与图像相关数据集的文件格式[1]。如MODIS观测数据,分辨率为 2040×1354。每个像素点对应实际位置坐标点,存储有该位置的经纬度值、可见光波段反射率和其它遥感数据。对HDF文件的读取使用了Python第三方扩展库pyhdf;过滤方案的各项过滤阈值作为参数传入该模块的函数,便于根据实际需求调整,过滤过程中必要的矩阵计算使用了科学计算库Numpy来实现。经过预处理过程中根据业务需求的过滤步提取骤后,每个像素点对应一条数据写入任务列表中,该模块的输出是所计算当天(如列表中数据为MODIS 2009-01-01日扫描数据)的预处理后任务列表.txt文件。
图3 预处理模块流程图Fig.3 Preprocessing module flow chart
2.2 与集群对接模块设计与开发
(1)功能说明
高效率地完成辐射传输模拟计算是项目中一个重要难点。由于辐射传输模拟是一个很耗时的工作,为了提高计算效率,本文使用了辐射传输模拟集群[3],该集群是专门开发的一款分布式计算集群,由服务节点调度,集群中每个计算节点分别运行辐射传输模式进行入瞳反射率模拟。集群软件具备完善的说明文档和调用 API。本模块的主要功能就是实现与辐射传输模拟集群的对接,模块的数据流图如图 4所示。
(2)数据库表设计
为了实现与集群的对接,完成对中间数据的存储和管理,使用了数据库 Mysql。根据需求,数据库主要包含两个物理模型:批次和任务。详细的数据库表设计及说明如表1、表2所示。
(3)实现方式
1. 上传任务
图4 与集群对接模块数据流图Fig.4 Cluster docking module data flow graph
表1 批次表Tab.1 Bat table
表2 任务表Tab.2 Ta sk table
该函数接收预处理后的任务列表,首先根据所计算天在批次表建立批次记录。随后遍历任务列表每条数据,根据每条数据对应的时间、经纬度从环境数据文件中提取环境数据。确认环境数据有效性后,以HTTP GET请求向集群请求任务号。在本模块中HTTP请求主要由第三方库Requests来实现。获取任务号后,将集群接收的计算输入信息按标准写成文件,以HTTP POST方式将任务号和计算输入文件提交给集群。集群返回成功后,将该条记录对应的任务号、状态号、数据信息存入任务表。并对批次表中该批次的计数进行更新。
容错机制:上传进程如果崩溃或断电,恢复重传的方式主要依靠表中字段任务名,任务名由批次+时间+行列号组成,确保唯一性。通过在任务列表中逐条遍历找到对应位置恢复重传;在上传过程中由于网络传输故障或集群服务器异常导致的上传失败,主要解决方式依靠状态号的变化,如在与集群建立连接或任务上传失败时,会将任务号设为填充值,上传内容暂时存入任务表中的上传内容字段,状态号设为未上传,继续执行程序。当网络或服务器恢复正常时,启动补传程序,查询状态号属于未上传的任务重新上传。
2. 下载任务
该函数输入为欲下载的批次名,根据批次名在任务表中查询对应批次中状态号属于已上传成功的任务,通过任务号向集群发起HTTP GET请求,下载对应的计算结果文件,把计算结果存入任务表中对应任务的下载内容字段,状态号设为已下载,并更新批次表中计数。
3. 输出结果文件
该函数输入为批次名,根据批次名在任务表中查询对应批次中状态号属于已下载的任务,把任务的原始数据和下载的计算结果按指定格式写成CSV的结果文件并输出。
4. 监控管理
为便于用户随时查询计算情况,该模块对数据库的批次表和任务表提供了监控界面,批次表包含增删改操作,任务表提供了根据关键词的查询搜索、详细信息查看等功能。具体的实现方式,网站后台基于Django框架;HUI作为前端展示框架,保证了界面的简洁与美观。
2.3 分析与可视化模块设计与开发
(1)功能说明
该模块接收经过辐射传输模拟的.CSV结果文件,它的主要功能是分析辐射传输模拟的计算结果和建模效果。包括对数据集信息的统计,按需求标准化制图、前台展示等功能。通过与卫星遥感器观测数据对比,分析模拟值与观测值的相关性、误差、与误差相关的参数等。以确保模拟仿真的准确率和可靠性。
(2)主要函数设计
数据读取与统计:数据的读取和处理主要应用了第三方库 Pandas。Pandas是一种基于 Numpy的为解决数据分析任务而创建的工具,提供了高效地操作大型数据集的函数或方法。除读取数据外,该方法同时提供对数据集的精确统计功能,包括各波段对模拟值观测值的均值、标准差、均方根误差、相关系数等统计信息,并以文件形式输出,便于用户查看分析。
相关性分析散点图:该函数接收两个参数序列,主要功能是分析其相关性。以自变量因变量二维散点图的形式制图,色标表示数据点密度。并以基本的一次线性回归模型拟合散点,输出权值和偏移。模型拟合则使用了机器学习库Scikit-learn中的线性回归模型。在图中也标注了两个参数序列的基本统计信息和相关系数等。
误差分布直方图:该函数主要接受辐射传输模拟值与观测值,分别计算其绝对误差、相对误差,并以直方图形式制图,便于用户了解误差的分布情况。图中也包含误差的均值、标准差等统计信息空间分布散点图:由于该项目针对全球范围数据进行模拟仿真,因此分析误差或不同参数与空间的相关性是十分重要的,该函数接收一个包含经度、纬度、参数的三维序列。以经纬度为坐标,打在全球图上,色标表示参数值。便于用户直观的从空间分布中分析数据。实现方式主要基于第三方库Basemap。
模型分析:该函数针对特定时间、波段的观测数据和模拟数据,根据用户选取的建模方式进行建模拟合。把拟合模型的系数、预测误差等标准化制图,并以文件形式输出模型系数。具体的回归模型实现方式主要采用了机器学习库Scikit-learn和科学计算库Numpy。
(3)前端展示
在百万级的数据中,读取数据和绘图的都是耗时操作,其速率制约了图片实时生成或查看。因此,在该模块中,首先按需求批次生成好图片。图片的展示查看主要通过标准化图名、存储路径来实现。在前端以HUI为基础,根据用户选择的查询条件,合成对应图片路径,并在前台展示。
3 应用与系统展示
该系统可完成针对 Aqua MODIS和 FY-3B MERSI的可见光波段观测模拟与分析。以 MODIS为例,选取了2009年1月-6月每月第一日的数据。经过质控筛选,每日参与辐射传输模拟计算的数据约为30万条。
辐射传输模拟集群采用了20个计算节点,1个服务节点,计算效率达到大约每日3万条。通过与集群的对接,数据全部计算完成。如图5为计算过程中对批次信息的监控。
随后对模拟计算的结果进行分析,如图 6是1月3波段观测值与模拟值得相关性分析散点图。
如图7是1月3波段的误差空间分布图。
建模分析效果如图8是对1月9波段进行单列拟合方式的模型效果图。
4 结论
本文面向基于洋面目标的可见光波段卫星观测模拟和分析的需求,在前期辐射传输模拟集群系统的基础上,完成了卫星观测模拟前处理、与辐射传输模拟集群对接、对模拟计算结果的分析、建模分析等各项功能。该系统已用于Aqua MODIS和FY-3B MERSI的数据处理分析,为可见光波段卫星遥感器在轨辐射特性分析研究提供了一款有效地支撑软件系统。
图5 集群对接模块监控图Fig.5 Cluster docking module monitoring chart
图6 相关性分析散点图Fig.6 Correlation analysis scatter plot
图7 误差空间分布图Fig.7 Error spatial distribution diagram
图8 模型效果图Fig.8 Model effect diagram
[1] E. J. Kwiatkowska, B. A. Franz, G. Meister, C. R. McClain,and X. Xiong, “Cross calibration of ocean-color bands from Moderate-Resolution Imaging Spectroradiometer on Terra platform, ” Applied Optics, 47(36), pp. 6796–6810, 2008.
[2] 孙凌, 郭茂华, 徐娜, 张立军, 刘京晶, 胡秀清, 李元, 戎志国. 基于敦煌场地定标的FY-3 MERSI反射太阳波段在轨响应变化分析. 光谱学与光谱分析, 32(7), pp. 1869-1877, 2012.
[3] 王昊. 大数据环境下面向FY3的辐射计算与分析研究[D].北方工业大学,
[4] 范文星. 基于Django的网络运维管理系统的设计与实现[J].计算机科学, 2012, 39(S2): 175-177.
[5] 吴沧舟, 兰逸正, 张辉. 基于MySQL数据库的优化[J]. 电子科技, 2013, 26(9): 182-184.
[6] 彭鹏, 彭佳红. 基于多元线性回归模型的电力负荷预测研究[J]. 中国安全生产科学技术, 2011, 7(9): 158-161.
[7] 高荣强, 范世福, 严衍禄, 等. 近红外光谱的数据预处理研究[J]. 光谱学与光谱分析, 2004, 24(12): 1563-1565.
[8] 李广云, 李明磊, 王力, 等. 地面激光扫描点云数据预处理综述[J]. 测绘通报, 2015(11): 1-3.
[9] 王光远, 周东强, 赵煜. 遥感卫星在轨微振动测量数据分析[J]. 宇航学报, 2015, 36(3): 261-267.
[10] 唐启义. 实用统计分析及其DPS数据处理系统[电子资源][M]. 科学出版社, 2002.
[11] 沙定国. 误差分析与测量不确定度评定[M]. 中国计量出版社, 2003.
[12] 王冉阳. 基于Django和Python的Web开发[J]. 电脑编程技巧与维护, 2009(2): 56-58.