前言
毕业设计做了一个Landsat数据的辐射定标、大气校正、裁剪、NDVI等指数计算的流程化批处理,现在任务上要实现GF-7数据的校正,其中有些内容需要修改,正好趁这个机会把这整个内容梳理一遍。6S大气校正python包名字是Py6s
,该包由南安普顿的博士R.T. Wilson开发并维护,具体的介绍和使用可以自行查看,官网内有规范的示例和实际应用案例。目前包内集成了Landsat数据的各种传感器的处理参数,直接可以调用,但是国产卫星的校正参数如增益 (gain) 和偏置值(bias),只在中国资源卫星应用中心有发布,该网站还发布了校正用的光谱响应函数(SRF),需要自己整理起来才能进行6s校正处理。至于更多大气叫校正的原理什么的,有需要的话自己查一下论文或者其他博客吧,这里就推荐几个,比如遥感之心、冰柚子
等。
正文
站在巨人的肩膀上,才能更好地前进。国内前人已经有人做过python的6s大气校正工程化模块,作者是武汉大学遥感国家重点实验室的博士,在CSDN做博客记录,在github仓库内查看。该仓库的文件可以通过运行相对应的python文件直接进行校正处理,但是目前脚本也只能够做到单幅处理。但是在该脚本基础上,江北通过将待处理的多幅影像存储到txt文件中,利用txt文件进行BAT
脚本批量处理。虽然也变相实现了6s批量大气校正,但个人感觉不太pythonic,所以还是想用自己的想法过一遍批处理的纯python代码。
次要函数
先把几个次要函数,为主函数服务的函数先给上。
|
|
这两个函数基本没有改动,只改了untar
为传参制。
主函数
以下介绍几个主要函数的改动。
辐射定标
|
|
大体是和原脚本一样的,但是为了用于高分数据不同传感器,这里改了判别函数。未来会加入前视传感器(FWD)的判别和json参数,其实也就是加elif
形成多判别就行了。
大气校正
接下来是大气校正:
|
|
在这里值得一提的是,GF1\GF2中xml的太阳天顶角(SolarZenith)和太阳方位角(SolarAzimuth)参数在高分较新的数据中,xml的标签被改为了SunAltitude
和SunAzimuth
也就是天顶角被改为了高度角,这样原脚本中
|
|
的写法,就要把90-
去掉了具体原理可以查看这里。
另外一点是,在GF6以上的数据中,头文件xml的影像顶点坐标经度、纬度标签被归到了各自的位置标签上,对比原写法和新写法:
|
|
其实相当于拐了个弯,但是也要写出来提醒其他开发者,要注意查看影像的xml,才能及时提取对的内容。
分块
有了以上两个最重要的函数后,可以进行分块处理了。这里也是直接用的原脚本中的写法,但是多了几个判别函数,实现自动判别遥感平台和传感器,从而正确调用参数:
|
|
这里写法仍然不够严谨,虽然全色波段大气校正效果并没有那么显著,但是由于官方也给了光谱响应函数、增益偏置,因此理应也要进行判别,从而进行辐射和大气校正,但是这里偷了个懒,没有写完所有传感器判别。
主函数
最后为了更加简洁,使参数能够更灵活地输入,这里自己写了一个主函数:
|
|
写法思路也是参照脚本中的if __main__
部分,将其封装成函数以后,直接给出函数的 5 参数,就能方便地在python中进行定制化的批处理或者其他流程化应用。
|
|
辅助数据
大气校正是复杂的物理机制,其中需要的参数是繁多的,6s包给定了大部分参数,仍有一些参数需要自己输入,比如DEM、光谱响应函数,这里介绍辅助数据的使用。
DEM
高程数据就很简单,如果需要高精度的可以直接上高分辨率dem,原脚本中使用的是美国USGS的GMTED
高程数据,分辨率为2km,如果有条件,直接用SRTM或者日本ALOS2也可以,但是要保证覆盖完研究区。
辐射定标和光谱响应json文件
辐射定标参数和光谱响应函数所需要的参数都以json格式存放在RadiometricCorrectionParameter.json
文件中,其结构如下所示:
|
|
这里要注意,Py6s
包的光谱响应函数:
|
|
其中校正波段范围为0.770~0.890nm,其数据分辨率是2.5nm,而官方给的参数往往是1nm分辨率,因此需要插值到0.5,然后间隔2.5取值,这也是后续需要进行的内容。在卫星中心官网下载到需要的SRF
和辐射定标参数后,按json数据格式整理到其中,就能方便调用了,根据不同的传感器和遥感平台,将数据添加并定制化即可。
后记
目前开源的大气校正算法,仅有6s算是比较靠谱的了,而python的封装让大气校正的实现变得简单了起来,因此也对南安普顿威廉森教授致谢,也感谢赵博士的开源。后续考虑加入GF和ZY系列传感器的判别,整理一下json然后commit到github。另一方面,国产卫星的快速大气校正和深度学习大气校正也需要进行研究,目前想法就这些,如果有感兴趣的内容想与我讨论,欢迎发送邮件和我交流。