背景:sentinel-2 数据处理基线算法修改

官方文件:https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-2-msi/product-types/level-2a

        由于欧空局对处理基线算法的升级,导致sentinel-2数据在使用过程中也受到一定的影响。即在2022年1月25日之前的影像使用时,可以进行简单的缩放,但是现在需要增加一个偏移系数。

原:

TOA = DN_{L1C} * 0.0001

SR = DN_{L2A} * 0.0001

        其中TOA表示大气顶层反射率,SR表示地表反射率,L1C和L2A表示sentinel-2数据等级。

现:

TOA = (DN_{L1C} - 1000 )* 0.0001

SR = (DN_{L2A} - 1000) * 0.0001

        但是并不意味着所有的数据都是使用相同的公式来进行计算,2022年之后的数据一定是按照现在的公式来进行转化,但是欧空局也逐渐将之前的数据进行重新处理,加上一个偏置。因此我们在选择数据的时候一定要注意处理基线和日期,来选择对应的转换公式。

        注意:在官方软件Snap中打开后,会自动进行校正,但是在使用其他软件如ENVI,Arcgis或者脚本中进行操作时一定要注意。

数据下载

欧空局官方:https://browser.dataspace.copernicus.eu/

1.注册

        进入官网后,先进行注册,根据提示填写信息(比较简单)。注册好之后进行登录,否则不允许下载。

2.选择需要下载的范围

        在网页的右侧有位置选择按钮,有点,线,面三种类型。

3.根据要求进行过滤(日期,云量,数据类型,数据等级)

4.直接下载或者加入workshop直接下载

!!!注意:这里大家会发现,明明两幅影像是同一时间过境的,为什么会有两个L1C产品?可以看到第一个产品的处理基线是:206,是在2018年7月22日进行处理的;第二个产品的处理基线是:500,是在2023年8月16日处理的。如果我们直接下载两景数据进行对比,发现新产品会统一的比旧产品高1000的dn值。打开新产品的xml文件,会发现有1000的偏移。因此在使用对应的产品时一定要进行正确的转换。

偏移对NDVI时间序列的影响

        在发现该问题时,很多人会问:如果只是使用2022年之后的数据,只要保证数据的一致性,是不是就不需要进行偏移了,答案当然是:不行!因为指数的基础都是根据反射率进行计算的,而你如果不偏移,你使用的初始数据本身就不是反射率,后续研究也就没有意义。大家可以移步看下边的研究:

利用sentinel-2数据做长时间序列:https://zhuanlan.zhihu.com/p/555527988

 在不考虑偏移的情况下制作NDVI序列(两个数据掺杂):

        会有很多特别多的低值部分,其实很好解释,NDVI的公式为:

NDVI = \frac{NIR-Red}{NIR + Red}

在近红外波段和红色波段差值不变的情况下,分母凭空多了2000,它的值必然会极具缩小。

数据预处理(批处理)

        本处的数据预处理指的是将L1C级数据转换为L2A级数据,或者是将TOA数据转化为SR数据,实际上是一个大气校正和地形校正的过程。主要是有两个方法:欧空局官方提供的Sen2Cor工具(主要讲解,所有系统通用),以及使用usgs提供的以6s模型为基础优化后的LaSRC算法(有需要再Call我,Linux下)。

        首先,先下载Sen2Cor工具:Sen2Cor – STEPicon-default.png?t=N7T8https://step.esa.int/main/snap-supported-plugins/sen2cor/        进去直接点击下载就可以,不需要任何权限。下载好之后将文件解压,建议放到Snap文件夹下(非必须,能找见就可以)。

        加环境变量,右键桌面,此电脑->属性->高级系统设置->高级->环境变量->双击Path->加入插件所在位置。

        检查安装效果:进入到安装插件的目录,输入cmd回车,在弹出的命令行中输入:L2A_Process -h,弹出如下窗口则安装成功。

        接下来开始批处理,将需要处理的文件都放到根目录的一个文件夹下(路径太长无法处理),即在D盘中创建新文件夹,将待处理的一级影像(一定是解压缩后的.SAFE文件)放进去,最后只需输入形如:D:/Process的目录。

        在插件目录中新建记事本,输入下边的内容,修改三个参数后,将后缀的.txt修改为.bat.双击运行即可。

@echo off

rem 设置Sen2cor所在目录变量
set "Sen2cor_bin=D:\Software\Snap\Sen2Cor-02.11.00-win64"

rem 设置数据所在目录文件
set "input_dir=H:\process"

rem 设置输出文件夹
set "output_dir=H:\process"

#遍历输入路径下的所有哨兵文件。进行处理
for /d  %%i in  (%input_dir%\S2*.SAFE ) do ( 
	%Sen2cor_bin%\L2A_Process.bat %%i --output_dir=%output_dir% 
	echo "yes"
)

        官方的2级产品由于地形校正的问题会导致影像失真的问题,使用Sen2Cor来进行校正可以减轻这一失真现象,提高与Landsat等影像的一致性。

        最后需要注意,使用Sen2Cor处理出来的2级产品,处理基线为99999,但是他是否具有偏移量呢?取决于你使用的一级产品的处理基线,也就是说如果你使用的一级产品有偏移,则生成的2级产品也有偏移;如果你使用的一级产品没有偏移,则生成的2级产品就没有偏移。

总结

        对于Sentinel-2数据的使用一定要注意检查,要保证反射率产品的一致性,否则对后续处理会造成严重的影响。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐