基于6S模型的国产卫星数据大气校正
本文只讲干货,不讲客套话,不讲没有由头的技术细节。目的只为将6S模型用于国产卫星大气校正。
首先来讲为什么要进行大气校正,讲讲必要性。首先,只有定量化需求才会用到大气校正,当然为了满足项目要求,或者满足老板、甲方要求,强制做大气校正也没啥不可。我还见过对GF系列全色波段进行大气校正呢,技术可行,合理不合理另说。
接下来讲讲为什么要用6S模型,而不是Flaash,或者modtran,因为前者常见于ENVI软件自带,集成有一定约束性。Modtran3以前笔者的印象是精度稍低(也可能我不会用),毕竟看名字嘛modtran(MODerate resolution atmospheric TRANsmission)更适用于中尺度,Modtran4+后来没再用。6S模型使用比较熟练了,所以后续的开发和集成都是基于6S了,甚至笔者用C++重写了一遍6S模型,可以定制各种相机传感器。
6S模型都需要输入哪些参数?具体6S介绍就不提了,可以自行搜索一下。笔者使用的版本是6Sv4.1版本。根据6Sv4.1版本,将fortran语言进行C++重构,后来一直沿用此版本。基于fortran语言编写6S,大家常用的方法是,直接运行命令行程序,将输入参数构造成6S所需的输入文件。然后6S模型作为一个黑盒子,根据给定的参数,计算出结果并写入到输出文本文件。
行数 | 内容 | 释意 |
---|---|---|
1 |
0 |
几何参数(igeom)为用户自定义输入 |
2 |
88 180 40 0 3 18 |
太阳天顶角(度) 太阳方位角(度) 卫星天顶角(度) 卫星方位角(度) 月(1-12) 日(1-31) |
3 |
2 |
大气模式:2中纬度夏大气 |
4 |
1 |
气溶胶类型参数:1大陆型气溶胶 |
5 |
0 |
气溶胶含量参数:v=0:输入550纳米气溶胶光学厚度 |
6 |
1.950000 |
550纳米气溶胶光学厚度 |
7 |
0.000000 |
目标高度参数 |
8 |
-1000 |
传感器高度参数:xpp= -1000:卫星观测 |
9 |
1 |
光谱参数,自定义输入波段范围和光谱响应率 |
10 |
0.630000 0.690000 |
波段范围 |
11 |
0.232000 0.323000 0.413000 0.506000 0.589000 0.682000 0.766000 0.851000 0.936000 0.953000 0.969000 0.985000 1.000000 0.988000 90976.000000 0.965000 0.954000 0.926000 0.898000 0.871000 0.843000 0.757000 0.671000 0.584000 0.497000 |
光谱响应率,可以理解为在波段范围内间隔步长(2.5um)x内的y值 |
12 |
0 |
地表反射率类型, inhomo=0:均匀表面 |
13 |
0 |
idirec=0:不考虑方向效应 |
14 |
1 |
igroun = 1; 绿色植被 |
15 |
-2 |
rapp = -2; % 无大气校正,正向运算 |
将上述参数保存成TXT作为输入传递给6S模型,然后计算出结果保存成TXT文件,我们需要从结果TXT文件中获取xa,xb,xc三个系数。上述思路的前提是将6s模型算法编译成命令行程序,换成动态库形式原理也类似。
注意,如果都能获取到上述表格中的参数,那么不论是国产卫星还是火星产卫星,都是支持的。但是国产卫星通常有个风格就是参数不便获取,或者即使能获取,位置也比较隐晦,需要有经验和关系才能获取到。获取到参数只是第一步,第二部如何将参数信息(比如传感器定标系数,波谱响应函数等)转化成6S的输入规范也是一个比较麻烦的工作,虽然技术上没有啥难度,但是用户的精力不在此,时间用在刀刃上,这种造轮子技术细节应该有人来做,所以我索性把卫星类型做成了6S模型的一个参数项,用户只要指定了卫星传感器类型,相应的定标系数和光谱响应函数就都准备好了。此外,设定了参数,6S模型也能知道该类型数据该如何从哪里(通常是图像数据的辅助XML文件)获取观测几何等其他元数据信息,极大简化了大气模型调用技术复杂度,节省了用户宝贵科研时间(摸鱼时间)。
未完待续