6S大气传输模型修改源码添加、自定义CASI传感器光谱响应

6S大气传输模型编译以及修改源码添加、自定义CASI传感器光谱响应

在利用6S模型进行CASI影像数据的大气纠正时,发现6S模型中没有对应的光谱响应函数,又不想自己整个输进去,就查资料对源码进行了修改。
主要参考博客:https://blog.csdn.net/sam92/article/details/50390556 光谱响应函数修改
http://blog.163.com/lys_zmz@126/blog/static/1683467372016445650616/ 6S2.1模型编译
http://blog.sina.com.cn/s/blog_77232fc50102ux1h.html 高斯函数模拟光谱响应函数


操作系统为Windows7 64位系统,源码为6s官网中的6sv2.1。

一.6sv2.1环境配置与编译
因为从6S官网下载得到的6sv2.1模型为Fortran语言编写的源码,而我们在利用IDL调用6S模型时需要调用.exe,因此需要先学习Fortran语言编写规则以及如何编译。
6SV2.1模型通过Fortran77编写,安装编译主要参照:http://blog.163.com/lys_zmz@126/blog/static/1683467372016445650616/博文中提到的关于py6S(面向Python调用6S模型的接口)的网址http://py6s.readthedocs.io/en/latest/installation.html ((这个网址的内容很全,资料也很丰富))
1.下载UNIX工具,方便之后对Makefile文件进行编译,下载make和tar两个工具(http://gnuwin32.sourceforge.net/packages.html)并以缺省值安装;
2.安装Fortran编译器,Fortran语言目前的编译器一般为Fortran95,而6sv2.1利用Fortran77编写,新的编译器可能不能很好支持,因此下载fort99.zip(http://www.cse.yorku.ca/~roumani/fortran/ftn.htm)。解压后,将文件夹下的G77复制到目标文件夹下(即存放解压后6S模型的文件夹);
3.环境变量配置,将GUNWin32中的bin,以及G77中的bin添加到系统变量的path中。
4.编辑Makefile文件,以文本文件的格式打开Makefile,找到结尾附近的-1m删除;
5.编译6S模型,管理员身份打开cmd.exe,cd到6s模型所在目录,输入make命令进行编译,编译成功后得到的6SV2.1文件就是6SV2.1.exe,在IDL中即可直接调用。

二.CASI数据光谱响应函数值模拟
高光谱传感器的波段光谱响应范围比较窄,一般数据中不提供每个波段的光谱响应函数,CASI数据也不例外,只提供了中心波长和半波宽FWHM。如果对高光谱传感器有过研究,应该知道一般传感器的光谱响应函数符合高斯函数分布,在中心波长处响应值最大,因为利用高斯函数拟合波谱响应函数值。
详细操作参照博文:http://blog.sina.com.cn/s/blog_77232fc50102ux1h.html
(以下两幅图片均来源于该博文)
这里写图片描述这里写图片描述
自己编译的源码如下:

function SRFS(middle,fwhm)
%UNTITLED通过高斯函数模拟高光谱影像数据的波谱响应函数值
%   需要输入中心波长值以及光谱分辨率,输入顺序为中心波长值(wavelength),光谱分辨率(fwhm)
FWHM=fwhm;
row=FWHM/(2*sqrt(2*log(2)));
begin=middle-fwhm;
stop=middle+fwhm;
center=(stop+begin)/2;
j=1;
for i=begin:2.5:stop
%for i=stop:-2.5:begin
wavelength(j)=i;
fun(j)=exp(-(i-center)^2/(2*row*row));
%srv(j)=roundn(fun(j),-4);%保留4位小数
j=j+1;
end
str = strcat(num2str(middle), '-SRV', '.mat');
save(str,'wavelength','fun'); 
plot(wavelength,fun)

end

三、修改、自定义CASI光谱响应
1.修改main.f
nast变量(364行左右)中加入CASI传感器波段名称,CASI共有48个波段,因此在定义nast变量时,要修改其长度为248。
这里写图片描述
这里写图片描述
这里写图片描述
在spectral condition中修改注释,添加自己的传感器。
这里写图片描述
接着,在大约1427行左右的注释说明不同传感器输入对应应该goto到哪一个语句,添加自己的传感器。
这里写图片描述
该注释表明如果输入时200-248,则goto到编号为165的行,检查goto的编号是否已经存在。修改注释后,修改代码,在注释下方的编号18的语句中,把自己的传感器加载下方:
这里写图片描述
这里写图片描述
注意这里的165的个数要与波段数一致,这里是48个。
然后编写编号为165的代码行,修改函数名即可(稍后要制作函数文件)
这里写图片描述
以上是对main函数的所有修改。

2.制作传感器文件(CASI.f)
新建文件,取名为CASI.f,文件名要与编号165语句中的call函数名一致。
为了方便编写,打开一个6S自带的传感器文件,打开全部复制粘贴,然后修改。
CASI的传感器有48个波段,定义sr需要48行。
这里写图片描述
接下来定义每一个波段的光谱响应。前边已经在MATLAB中利用高斯函数模拟了CASI传感器的光谱响应值。下边是第一个波段的例子:
这里写图片描述
首先注释行说明了起始波长和终止波长,下边是具体每一个波长上光谱响应值。每一行有1501列,因为6S光谱范围为0.52-4um,间隔为0.0025um,因此有1501个波长。注意要保证起始波长正好对应第一个非0光谱响应值,终止波长对应最后一个非0光谱响应值即可,一定要检查是否为1501个数据。
按照同样的方法完成剩余的47个波段,修改各个波段的上下限:
这里写图片描述
CASI.f文件制作完毕。
3.修改Makefile
打开Makefile,在最后一长串的字符最后加上CASI.o即可。
这里写图片描述
4.编译
cd到6S文件夹下,make回车,便已完成。如果编译成功,就可以运行了。
5.运行
cd到6S文件夹,输入sixsV2.1回车,输入各种参数,就可以看到各种反演参数以及大气校正的结果。
输入参数截图,其中201是自己设置的CASI的第二个波段,然后运行得到结果。关于各个参数的设置可以参照6S官网上的用户手册。
这里写图片描述
运行后会得到关于传感器的介绍以及大气反演的各项参数。
这里写图片描述
这里写图片描述
然后6S模型就算是可以放到IDL中进行接下来的操作了。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值