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

最近要做国产卫星的大气校正,打算用6s模型模拟气溶胶的查找表,但是发现6s模型中没有国产卫星的相应光谱响应函数,只能在输入的时候把光谱响应函数整个输进去,觉得麻烦,研究了一下,发现修改源码可以实现添加自定义的卫星光谱响应函数,现在与大家分享一下我的做法:
(p.s. 我是在Linux系统下做的,Windows系统大家自己摸索吧··)

  • 所需文件
  1. 6s源码:http://6s.ltdri.org/pages/downloads.html
    目前最新的是2015年发布的V2.1版本。
  2. 所需卫星的光谱响应函数文件
    我用的是HJ-1B卫星的CCD相机的光谱响应函数,可以在
    http://www.cresda.com/site1/Downloads/gpxyhs/index.shtml
    下载,这个网页还有GF、ZY等卫星的光谱响应函数文件。(吐槽,在网上找GOCI卫星的光谱响应函数怎么也找不到,不知道藏着这些干嘛)。
  • 步骤
    1. 修改main.f
    解压压缩包之后,找到main.f打开。(建议大家浏览一下这个文件,各种输入参数的说明、注释非常到位,还有彩蛋)
    大家可以发现首先出现与传感器有关的代码是在第364行左右:

    nsat 这个东西(对Fortran不了解不知道怎么叫它····姑且叫它东西吧···)保存了传感器波段名称字符串,在输出结果的时候用的上。所以我们要在nsat的末尾加上我们自己的传感器:

    我加了4个字符串,HJ1/CCD 1-4,代表CCD的4个波段。之所以字符串长度和之前的字符串长度一致(包含空格17个字符),除了看着爽之外,也是有原因的,看到代码292行左右:

    这里是nsat的定义,可以看到是一个204*17的character,就是说共有204个XX,每个XX长度是17字符。这个204也是我后来修改的,之前是200,加了4。
    接下来,看到代码大约1100行,关于spectral conditions的说明:

    不同输入对应不同的spectral condition。当输入大于2时,便是内置的传感器波段了。我们也装模作样的把我们自己的传感器写到这个注释里面:

    当然这个编号(200-204)也是有用的。再往下看,大约1370行左右:

    这个注释说明了不同传感器输入对应应该goto哪一个语句(尼玛Fortran这么多的goto也是看醉了),我们也装模作样的把自己的传感器加进去。如果输入是200-203,则goto 165编号的行。注意检查一下goto的编号是否已经存在了。
    这只是修改了注释,接下来修改代码。就在注释下方编号18的goto,观察一下就是与注释相对应的,我们把自己的传感器加在下方:

    然后就是写编号为165的代码行了,在编号164的下方,稍微修改一下函数名就好:

    至此,对mian.f的修改完成!

2. 制作传感器文件(HJ1.f)
下面是重头戏,制作我们自己的传感器文件。新建一个文件,我取名为HJ1.f,注意文件名和上一步call的函数名一致。
首先可以打开一个6s自带的传感器文件,就拿MODIS吧,打开看一下,先全部复制粘贴过来吧·····没关系,后面慢慢改。
由于我们只有4个波段,所以定义sr只需要4行(下图标号11的行),我还装模作样的写了一些注释:

下面就是定义每一个波段上的光谱响应了。我先在matlab里面把光谱响应函数的光谱间隔差值到了2.5nm,这也是必须的。下面是CCD第一个波段的例子:

一行一行解释,首先注释行说明了起始波长和终止波长,下面是具体每一个波长上光谱响应值。注意每一行是1501列的,这个不能修改,不然会出错。因为6s中光谱范围是0.25-4um,间隔为0.0025um,所以有(4-0.25)/0.0025+1=1501个波长。14行的数据中第一项69*0说明这一行数据前69个数为0,69=(0.4225-0.25)/0.0025;最后一项1385 * 0说明最后1385个数为0,1385 = (4-0.5375)/0.0025。检验一下,前面有69个0,后面有1385个0,中间有47个光谱响应值,一共是69+1385+47=1501个波段,简直颇费。只要保证起始波长(0.4225)正好对应第一个非0光谱响应值(0.092),而终止波长(0.5735)正好对应最后一个非0光谱响应(0.175),就能按照上面的计算方法保证不多不少正好。不然的话就要绕一些了···总之大家检查一下是不是一共有1501个数据,还有波段上是否每个波长都有光谱响应值就ok。
按照上面的方法继续完成剩余的3个波段,最后需要修改各个波段的上下限:

大功告成!

3. 修改makefile
最后要修改一下makefile,很简单,打开makefile,在那一长串的字符最后加上我们的 HJ1.o就OK了:

4. 编译
下面就是编译了,cd到6s的文件夹下,输入命令 make ,回车,
and good luck!
如果有问题,可以根据错误提示找找哪里出错了,我之前有几次就是在main.f中不小心多打了一些符号或者错删了一些语句造成了失败。可以与原来的main.f比较一下很快就发现问题了。

5. 运行6s
如果编译成功的话,就可以运行6s程序了,
cd到6s的文件夹,输入命令 ./sixsV2.1 回车
此时会等待输入各种参数。

关于6s的参数说明,还是推荐大家看main.f里面的说明,这里贴一张6s User Manual里面的图:

下面是我的输入,注意看第9行,数字201代表了我们自己加入的CCD band2,


然后回车···good luck······

output中可以看到我们自己加入的传感器波段名

以及大气校正的结果。


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

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

    6S大气传输模型编译以及修改源码添加.自定义CASI传感器光谱响应 在利用6S模型进行CASI影像数据的大气纠正时,发现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. Windows7 WIN 7 64位 环境编译6sv2.1版本的大气传输模型

    从来没见过Fortran...这次为了添加国产卫星光谱响应的支持,只能从零开始肯了. 6S模型主页:http://6s.ltdri.org/index.html. 下载最新的2015年更新的6SV2. ...

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

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

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

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

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

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

  9. mybatis-generator修改源码2

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

最新文章

  1. python语音播报计算结果_Python 天气查询到实现语音播放
  2. 一分钟了解spark的调优
  3. web前端技巧-文本如何垂直居中?多行文本如何实现上下居中?
  4. MVC强类型和弱类型的区别
  5. thymealf如何实现传单个变量给html_纯前端使用JavaScript发送电子邮件,5个步骤图文教程...
  6. html 下拉到一定位置,浏览器向下滚动到一定位置继续滚动时,侧边导航固定在页面顶部,再滚动到一定位置时页面再向下滚动侧边导航不再固定。这种效果怎么实现呢...
  7. 华为云PB级数据库GaussDB(for Redis)揭秘第十期:GaussDB(for Redis)迁移系列(上)
  8. 大数据分析体系由哪些层级构成
  9. 把C#逻辑处理程序搬移至SQL存储过程中去
  10. J2EE视频实战教程网址
  11. Yandex浏览器 - 可以在手机上安装chrome插件的浏览器
  12. 高德地图改变地图的主题色
  13. 2020届华为面试题【Python】
  14. 巨星MTV2002模板使用教程
  15. 小程序tab栏菜单的切换
  16. 有道智云 php,有道智云编辑器 Android SDK
  17. python三维网格图_在三维Matplotlib图上调整网格线
  18. TinyPng批量压缩图片
  19. 【计算机网络】笔记及考点
  20. 在经济寒冬的乱七八糟的瞎说

热门文章

  1. 由程控交换机组成的呼叫中心系统
  2. 框架-tp一般建站步骤
  3. 对话Facebook人工智能实验室主任、深度学习专家Yann LeCun
  4. lol更新显示版本服务器,LOL更新故障?9月4日更新后连接不到服务器怎么回事?...
  5. 腾讯云Linux命令,腾讯云Linux云服务器常用命令(一)
  6. cocos2dx tolua ++ 使用 常见得错误
  7. Android在线生成证书并打包成apk文件
  8. [NOI2008]志愿者招募 [Zjoi2013]防守战线 一种网络流套路
  9. 数据分析之Ajax(easyui项目框架的搭建,完成登录功能)
  10. 汉明距离、汉明损失详解及代码(python)