【Python&RS】基于GDAL哨兵二号波段合成
学遥感的避免不了使用哨兵数据,毕竟10m的分辨率可以满足大部分的定量分析,同时也是最重要的一点,它免费!!!
之前好像ENVI5.3打不开哨兵数据,易智瑞已给出了解决办法。我想说的是大家能下载L2A级数据就去下,省的麻烦。如果需要的数据只有L1C级,那就使用欧空局发布的Sen2Cor去进行辐射定标和大气校正。
这样就出现了问题,因为Sen2Cor是对单波段进行导出,如果我们一个个导入ENVI去波段组合,那岂不是浪费了很多时间,所以我这里使用Python实现Sentinel-2数据的批量波段组合(PS:Sen2Cor也可以批量大气校正,后面可以出一篇教程)
注意:遥感影像的本质就是多维数组,所以原理并不复杂!看懂这篇文章后同样也可以对其他卫星数据进行波段组合,都是一样的!
一、获取数据的基本信息
这一步主要是为了给我们波段组合后的栅格数据赋值,如投影、分辨率等信息。这段代码在我之前的博文中出现过无数次了,就不多说了。同时对GDAL库的安装之前也有教过,可以自行翻阅:
。这里的基本信息可以从任意一个波段获取,因为他们都是一样的。
二、将基本信息写入新的栅格驱动
这里创建驱动时,输入的参数分别是输出文件名,影像宽度、影像高度、输出的波段数。这里波段数可以依据不同卫星自己修改,同时如果你想加入某些卫星的辅助波段(如云掩膜、水汽等)也可以修改这个参数。
三、遍历文件夹写入波段数据
我这里是写死了波段名称,如果你们想对其他卫星数据进行组合的话需要自己修改,我这里只适用于哨兵二号数据。此外,如果你有多个哨兵数据需要组合,可以在外面再添加一个for循环文件夹即可实现。
四、完整代码
本博文代码是我之前在编写使用GDAL计算NDVI时顺便写出来的,自己已经运行过很多次了。效率相比ENVI手动合成肯定提升了不少,但代码感觉还是有些冗余,能用就行还要啥自行车啊。
如果大家在学习Python或者RS时有什么问题,可以随时留言交流!如果大家对批量处理有兴趣同样可以留言给博主,博主会分享相关代码以供学习!