生成LUT查找表
(2015-11-06 11:15:31)
标签:
股票 |
分类: 6S模型 |
逐像元大气校正,常预先计算查找表(LUT,LookUp Tabel),6S大气辐射传输模式也可以用来计算LUT。但6S源程序
输出信息多,且浮点数输出精度低,不利于提取关键信息生成LUT,本文描述了怎样修改6S源码以生成LUT。
首先确定LUT内容要素。
1)
2)
3)
4)
5)
6)
7)
8)
9)
10)
11)
其次,阅读源码,明确LUT各要素在6S源码中的变量名。
6S大气校正计算源码(Excel验证中采用此公式)
其中,asol是太阳天顶角,
phi0是太阳方位角,
avis是观测天顶角,
phiv是观测方位角,
adif是散射角,
phi是相对方位角,
idatm是大气模式号,
iaer是气溶胶模式号,
v是水平能见度,
taer55是550nm气溶胶光学厚度,
iwave表示波段号,
tgasm表示大气透过率,
ainr(1,1)是大气本身的反射率(姑且这么理解),
sutott*sdtott表示总散射,
rapp是表观反射率,
rog是校正后的地表反射率,
xa,xb,xc是校正计算参数。
Fortran77每行长度不能超过80个字符,续前行需在特定位置指明(示例中的iwave前的1即表示续行)。
该示例源码没有指定任何输出样式。浮点数会按默认样式输出,小数点后的位数比较多,精度较好。
挑选一个查找表文件用Excel验证后表明,excel公式计算值与6S输出值之间最大误差小于1E-7。说明方法
是可行的。
再次,编译源码,编写Shell脚本:
编译环境:OpenSUSE操作系统 g95编译器,版本未知。
编译命令:g95 *.f -o sixs(在BRDF相关代码处可能有几个warning,本文不涉及BRDF,故暂不修改调试。
在Windows下用f77编译,无warning,编译通过)
生成LUT的bash脚本getLUT.sh:
function LUTCalc(){
#
./sixs <<EOF | tail -n 1 >> ${fstat}
0
$SolarZ $SolarAz $ViewZ 0 3 15
$Idatm
$Iaer
0
$IAod
-0
-1000
${IBand}
0
0
0
0.0
-$Iref
EOF
function getLUT()
{
}
>source getLUT.sh
>getLUT
最好晚上计算早晨看结果,如果CPU给力的话,几个小时后就可以得到结果。
下面是生成的LUT示例:
asol,phi0,avis,phiv,adif,phi,idatm,iaer,v,taer55, iwave,tgasm,ainr,tott,rapp,rog,xa,xb,xc
1
0.10000000
1
0.10000000
1
0.10000000
1
0.10000000