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中进行接下来的操作了。

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

  1. 6S大气传输模型修改源码添加、自定义卫星光谱响应(以HJ-1B CCD为例)

    6S大气传输模型修改源码添加.自定义卫星光谱响应(以HJ-1B CCD为例) 最近要做国产卫星的大气校正,打算用6s模型模拟气溶胶的查找表,但是发现6s模型中没有国产卫星的相应光谱响应函数,只能在输入 ...

  2. py6s 光谱响应函数_Windows7 64位环境6sv2.1大气传输模型修改源码添加国产高分卫星GF-1 GF-2光谱响应支持...

    下面开始添加国产卫星光谱响应的支持: 以下主要参考文章"6S大气传输模型修改源码添加.自定义卫星光谱响应(以HJ-1B CCD为例)"网址:http://blog.csdn.net ...

  3. yocto(七)——添加layer、添加内核模块、修改源码、制作补丁

    参考官方文档:https://docs.yoctoproject.org/kernel-dev/common.html#working-with-out-of-tree-modules 参考官方文档: ...

  4. 6S大气校正模型说明

    title: 6S大气校正 date: 2018-04-13 categories: 遥感图像处理 tags: 大气校正 6S辐射传输模型 6S(Second Simulation of Satell ...

  5. ensp大型网络环境设计与实现_mongodb内核源码设计实现、性能优化、最佳运维系列-网络传输层模块源码实现三...

    1. 说明 在之前的<<Mongodb网络传输处理源码实现及性能调优-体验内核性能极致设计>>和<<mongodb内核源码设计实现.性能优化.最佳运维系列-tran ...

  6. linux内核设计与实现 epub_mongodb内核源码设计实现、性能优化、最佳运维系列-网络传输层模块源码实现四...

    1. 说明 本文分析网络传输层模块中的最后一个子模块:service_executor服务运行子模块,即线程模型子模块.在阅读该文章前,请提前阅读下<<Mongodb网络传输处理源码实现及 ...

  7. html5机械双语源码,宽屏蓝色大气的云信CMS源码,中英文双语切换,外贸网站CMS源码,生成静态HTML...

    宽屏蓝色大气的云信CMS源码,中英文双语切换,外贸网站CMS源码,生成静态HTML, |% B  @$ a  ?; M5 r7 R  }4 t 8 F1 M$ F, ?) Q' c0 d  V! _/ ...

  8. mybatis-generator修改源码2

    参考: MyBatis Generator系列(三)----修改源码实现中文注释 (包括java.net.MalformedURLException at java.net.URL.<init& ...

  9. Jar包反编译后修改源码再编译

    Jar包反编译后修改源码再编译 文章目录 Jar包反编译后修改源码再编译 1. 场景 2. 详细步骤 2.1 查看源码 2.2 生成源文件 2.3 构建项目 2.4 编译成jar包 3. 参考链接 1 ...

最新文章

  1. 【数据安全案例】车管信息再遭窃取,数据安全缺乏保障
  2. 基于 Kafka + Flink + Redis 的电商大屏实时计算案
  3. 大数据WEB阶段 Js常用的页面操作
  4. key 和secret_Java Secret:加载和卸载静态字段
  5. MySQL数据库基础(mysql数据类型、数据表的操作)
  6. GraphQL从入门到实战
  7. 阿里首席架构师分享的Java工程师职业规划
  8. 4-27 外网访问VM虚拟机系统 以及 开启ubuntu远程访问
  9. CloudFlare:免费CDN加速-自定义节点IP教程
  10. Multitask Learning
  11. pandas 指定某两行或多行相加
  12. rust 入门笔记: rustlings(推荐一些学习rust语法的一些非常好的小练习)
  13. C#获取微信打卡数据
  14. iCheck插件的全选、反选、获取值操作
  15. eagle PCB软件使用心得
  16. android 自定义铃声 代码,Android通过代码设置铃声
  17. ubuntu16.04基于eclipse搭建px4编译环境+Jlink调式
  18. audio 自动播放 iPhone微信客户端
  19. requests接口自动化测试
  20. 羊皮卷的故事-第四章

热门文章

  1. 华为程控交换机 CC08 华为数字程控交换机
  2. 如何获取微信浏览器访问需要OAuth2.0网页授权的页面资源
  3. 华为交换机业务口堆叠
  4. EXP数据库时,SET_NO_OUTLINES问题
  5. 硅谷内幕:15个变态的谷歌面试问题
  6. Clickhouse_4_数据定义
  7. 【查验身份证】Python
  8. Android仿斗鱼领取鱼丸文字验证(二)
  9. 从摩拜单车看懂不同物联网制式
  10. fdk-aac交叉编译与使用