万幸,能写这篇博客说明我最后还是成功了。
看到网上关于IDL处理GF6号数据的帖子少之又少,咱来填上这个坑。
1 背景介绍
1.1 环境要求
楼主是IDL8.3+ENVI5.1,说实话有点旧了,但够用,最好用5.3. 因为debug的时候发5.1有很多语法都没有或者不够新。
楼主在此之前从未接触过IDL编程,有一些python基础,直接上手IDL编程是在github上找了一份写得不错的IDL代码阅读学习(链接在文末),此外IDL官方手册帮助非常大,不懂的接口可以直接查询,链接在此:ENVI-API,其实说白了IDL批处理就是调用ENVI提供的各种接口。另外python也有提供pyidl的接口包,但我没用过,感兴趣可以去了解一下。
1.2 数据下载
GF6号数据有PMS和WFV,数据下载在这个网址:中国资源卫星应用中心,推荐使用ftp下载,迅雷或者网页下载都可以,但就我的经验来看ftp下载最稳定,没有出现过一次中断的情况,速度300k-600k,一天下个十来景不成问题,ftp怎么用自行百度。
这里说一下WFV是免费的,影像分辨率为16m,关于高分六的详细介绍如下图:
坑点0:这个网站新注册的用户,在开始的一段时间是没有权限订购任何数据的,几天至一个月,超过两个星期没有权限可以试着打电话给客服。
坑点1:这个网站时常抽风不稳定,搜索不出结果,这个只有等或者不停刷新。
坑点2:下载的影像有时会出现损坏,尤其是有大片云层的数据,损坏的情况就像彩电条纹。
1.3 影像裁剪
由于GF6-WFV一景影像就有十几个g,楼主设备非常垃圾是负担不起这个资源消耗的,因此在一开始的时候就决定将所需研究区裁剪出来再进行后续处理,使用shp文件怎么裁剪不再赘述,GF6号WFV数据打开需要安装ENVI的中国卫星支持,在这里推荐ENVI官方技术博客:ENVI-GF6大气校正,关于ENVI所有的操作都有非常详细的手把手教程,简直人类之光,记得善用搜索。
1.4 预处理步骤
三步走:几何校正---辐射校正---大气校正
有一个非常重要的tips!!!
不论在IDL程序中需要调用他的任何接口,我都建议先跟着官方技术博客在ENVI中先走一遍流程,对debug的帮助非常大,例如你需要调用“ENVITask('RadiometricCalibration')”,就先在tool-box找到Radiometric Calibration,先处理一遍影像,了解这个接口的输入输出参数!!!
2 几何校正
2.1 简介
如果你的研究只关注一个地方的某一景影像的辐射值,其实可以不做这一步。但如果是时序数据或者涉及到配准的问题,建议还是需要做的;
有两种,使用python进行gdal处理,第二种使用idl提供的ENVITask('RPCOrthorectification'),这里介绍第2种;
不论哪一种都需要DEM数据,关于这个官方技术博上有介绍,ENVI有自带的默认数据‘GMTED2010.jp2’,精度要求不高的话完全够用。
2.2 坑点3:虚假的地理位置信息
最坑最坑的地方来了,GF6号的头文件里自带一个虚假的地理位置信息,导致ENVI在处理的时候,会因为这个虚假的地理位置信息而报错,因此在几何校正之前需要将这个信息删除,楼主也是参考了这篇文章:知乎
文章里的方法还挺麻烦的,但其实对于裁剪后的影像,去除这个信息很简单,直接打开影像的hdr,删掉map info这一行即可,为了方便也可以编程实现。
3 辐射校正
这个没什么好讲的,GF系列的Gain和OFFSET在数据下载的网站上都能找到,代码贴上官方示例:辐射校正
FLASSH大气校正是必须要先做这一步的!!!后面讲FLASSH的时候介绍。
4 大气校正
4.1 简介
主流三种方法:快速大气校正(QUAC),6s大气校正和flassh大气校正。关于6s大气校正的python介绍看这篇:知乎,这里介绍QUAC和flassh
4.2 QUAC
快速大气校正就是特别快速,接口调用非常方便,这里贴上官方介绍:QUAC和一个example:demo
需要注意的是,快速大气校正相较于6s和flassh有15%的误差,精度要求不高且追求速度的话推荐使用,我在使用的时候没遇到bug,非常友好的接口。
4.3 flassh大气校正
坑王来了,嘻嘻。
首先贴上官博对flassh_object的介绍,里面有一个特别好的demo,建议全文背诵的那种:flassh的demo,先下载这个demo自己跑一跑读一读,然后干嘛呢,然后把你做完几何校正以及辐射校正的影像,使用ENVI的FLASSH工具处理一遍,注意,先不着急写代码,等你能正确无误的输出结果,再开始动手编程。因为楼主在这个坑里趴了最久,因此内容比较多,请移步另一篇博文:flassh踩坑记录
5 总结
总结这一路的学习经历,以下三个网站帮助非常大:
1. ENVI APIL3 Harris 地理空间文档中心的ENVI-API文档,对ENVI的接口最全的记录,好用到爆炸。
2. ENVI-IDL技术殿堂_新浪博客 ENVI-IDL中国官方微博,保姆教程,全中文,而且对IDL的一些接口也有帮助,但没有上面的文档全。
3. ENVI的help,说实话也就是我英文不好,但依然获得了很多有效信息。
4. 少看CSDN上面各种灌水盗录的帖子,知乎还不错,就是信息太少。
另外贴出两个git-hub上的项目,综合一下基本上就能自己扒出一个完整的高分6号保姆级批处理代码,楼主就是这么干的。
1.雪鸽 这个项目写得特别好,自动预处理GF1、GF2 和 GF6 图像,代码结构和注释清晰完整,缺点就是,项目里的辐射校正使用c完成,而且我无法调试,因为在实际使用的时候是出现了bug的,我猜测应该是不适用裁剪后的gf影像;另外大气校正使用的是快速大气校正,flassh需要自己补充。
2.flassh 这个项目是高分1和高分2的自动预处理,也写得很好,使用flassh大气校正。
IDL编程的网络资料很少,干货就是更加少之又少,很多错在百度没有结果,在谷歌也只有一两条记录,而且毫无帮助,真的坑啊,希望我总结的这些能有所帮助。