ENVI 5.3对欧空局网站下载的Sentinel-2 L2A级别数据进行预处理(重采样,裁剪,镶嵌,定标,去云)

zbhgis 浩瀚地学295315 分钟
创建于 更新于

[TOC]

前言(必读)

不同的下载方式以及不同级别的数据产品在ENVI的不同版本中有不同的处理方式,以本文为例,演示在欧空局网站下载的Sentinel-2 L2A级别的地表反射率产品在ENVI 5.3版本中的预处理流程。

!!!建议所有数据在进行以下操作之前进行备份,避免操作失误等问题需要去网站上重新下载数据!!!

在进行预处理之前,最好对这个级别的数据有一定的了解。

Landsat 8/9 C2L2级别数据下载、使用、处理的个人经验以及注意事项汇总(查找用)landsat8l2sp数据怎么处理可用-CSDN博客

text
https://blog.csdn.net/zbh13859825167/article/details/139023038

软件准备

本次使用的软件是:ENVI 5.3,需提前安装好(其他版本软件处理流程类似),ENVI高版本支持的批处理工具更多。

目标

现有在哥白尼网站上下载好的某个区域的Sentinel-2 L2A级别的地表反射率数据产品若干幅,在ENVI 5.3中进行预处理,选择蓝、绿、红、近红外、短波红外1和短波红外2共计6个波段,得到研究区范围的波段合成好的TIF格式数据。

数据下载

详细步骤见以下文章:

下载Sentinel-2遥感数据的新网站(可批量、单波段下载)sentinel2数据下载-CSDN博客

text
https://blog.csdn.net/zbh13859825167/article/details/133771883

影像ID:

python
S2A_MSIL2A_20220722T023541_N0400_R089_T50RQP_20220722T072407.SAFE

S2A_MSIL2A_20220920T023541_N0400_R089_T50RPQ_20220920T072958.SAFE

S2A_MSIL2A_20220920T023541_N0400_R089_T50RQQ_20220920T072958.SAFE

S2B_MSIL2A_20220925T023529_N0400_R089_T50RPP_20220925T053704.SAFE

数据处理

数据下载好之后就可以直接开始处理了。

由于ENVI 5.3并不支持直接识别Landsat 8/9的C2L2级别的数据产品,因此只能将需要的波段文件依次在ENVI中进行预处理。

打开数据

以其中的一幅影像为例,将下载完成的6个波段拷贝在一个文件夹中,在ENVI中通过【File】|【Open】打开下载的6个波段文件。

img img

右键【View MetaData】,如果在【Map Info】中可以看到每个波段的【Type】为“Arbitrary”说明未进行投影,之后还得自行通过ENVI工具箱中的【Reproject Raster】进行投影;如果【Type】为“Projected”就说明已经投影过了或者成功读取到空间参考信息了

img

重采样与格式转换

这里需要使用一个官方提供的插件,插件需要在APP Store中下载,或者手动安装。

ENVI扩展工具:ENVITask批处理工具 - ENVI-IDL技术殿堂 - 博客园 (cnblogs.com)

text
https://www.cnblogs.com/enviidl/p/16333384.html

安装好之后,重启ENVI软件。

在进行波段合成之前,建议要对上述的数据分辨率进行统一,方便之后的数据统计与波段之间的计算。这次只使用到了10m与20m分辨率的数据,因此对20m数据重采样至10m。(这也可以不进行重采样,只进行格式转换,因为后面的波段合成工具会自动进行重采样工作)

由于波段较多,在右侧工具箱的【Extension】|【ENVITasks Batch】中,【Input Rasters】输入需要重采样的20m分辨率的8个波段,【ENVI Task】选择【Pixel Scale Resample Raster】,点击【OK】;进入下一级面板,【Pixel Scale】输入“[0.5,0.5]”,并选择好输出路径中为.dat格式,再点击【OK】。

img img

!!!为了避免之后无法输入文件,将其他的10m分辨率的波段文件也可以通过该工具批量转换为.dat格式。

操作类似,只是需要【Pixel Scale】输入“[1.0,1.0]”,并选择好输出路径中为.dat格式,再点击【OK】。这样即可得到未改变分辨率的.dat格式的波段。

波段合成

之后对不同的影像分别进行波段合成,方便后续操作。在右侧工具箱的【Raster Management】|【Layer Stacking】中,选择刚刚导入的波段,【Output File Range】选择【Exclusive】,然后选择输出路径,点击【OK】。(有时候波段合成之后默认显示的影像为灰度,需要自行在菜单的【Data Manager】中设置RGB通道)

img img

其他影像同理。

图像裁剪

为了减少后续镶嵌花费的时间,以及减少地物降低色差,就先进行图像裁剪。

这里需要使用一个官方提供的插件,插件需要在APP Store中下载,或者手动安装。

ENVI扩展工具:栅格图像批处理工具包(适用于低版本) - ENVI-IDL技术殿堂 - 博客园 (cnblogs.com)

text
https://www.cnblogs.com/enviidl/p/16334286.html

安装好之后,重启ENVI软件。首先通过【File】|【Open】在ENVI中打开矢量边界数据。

img

在右侧工具箱中的【Extension】|【Raster Processing Batch Tool】中找到【Subset Data from Shapefile Batch】,选择波段合成后的影像,【Input Vector】选择准备好的矢量文件,并选择后缀名和输出路径。点击【OK】。

img

通过这个方式裁剪之后的输出结果还是各自保持为原来的投影坐标系,结果如下所示。

img

图像镶嵌

在右侧工具箱中的【Mosaicking】|【Seamless Mosaic】,点击如图所示的“+”,通过【Open File】打开波段合成之后的四幅影像。并勾选右上角的【Show Preview】,能够实时预览。

img img

在【Main】配置中,将【Ignore Value】改为0,【Color Matching Action】选择一幅为【Preference】,即基准影像,其他的为【Adjust】,即待校正影像。

img

设置

在【Color Correction】配置中,勾选【Histogram Matching】

img

在【Seamlines】选项中,选择【Auto Generate Seamlines】。

img

在【Seamlines/Feathering】中,保持默认选择。

img

在【Export】中,选择输出格式为【ENVI】,并选择输出路径,将【Output Background Value】设置为0,其余保持默认选择。

img

点击下方的【Finish】,等待时间之后即可完成镶嵌。

img

像元值转换

这里需要使用一个官方提供的插件,插件需要在APP Store中下载,或者手动安装。

ENVI扩展工具:栅格图像批处理工具包(适用于低版本) - ENVI-IDL技术殿堂 - 博客园 (cnblogs.com)

text
https://www.cnblogs.com/enviidl/p/16334286.html

安装好之后,重启ENVI软件。在右侧工具箱中的【Extension】|【Raster Processing Batch Tool】中找到【Band Math Batch】,选择裁剪后的影像,【Variable Type】选择【File】,【Expression】填入以下表达式,并选择输出路径。点击【OK】。

该表达式的含义是将保持影像的背景值为0(建议设置为整数),非背景值设置按照公式进行转换为反射率,其中大于1的部分设置为1,小于0的部分设置为0。

python
((b1 ne 0)*(b1*0.0001-0.1))>0<1+(b1 eq 0)*(0)

img

去云

自己下载的影像云占比都很少,一般情况下不需要去云,可以跳过此步。

如果有特殊情况需要去云的话,则需要自行创建掩膜,将云层部分设置为Nodata,不参与后续运算。

这个部分的实现可以通过SCL波段、观察确定阈值、云检测指数、云检测算法等多种方式。

首先考虑使用SCL波段,这个波段中官方已经做好了分类。随便打开其中的一幅影像的SCL波段,右键图层,选择【New Raster Color Slice】,选择SCL波段之后,创建密度分割波段。先点击【Clear Color Slices】,将所有的分割层级删除,再点击【Add Color Slice】添加新的颜色分割,自行设置阈值为3和9(云阴影和高置信度云)。

img img img

如下图,对应的SCL波段的效果如下,发现在本区域的效果不错(选择了高置信度云和云阴影),因此接下来采用SCL波段进行云检测。

img

准备好四幅影像对应的SCL波段,对对应的SCL波段进行裁剪与镶嵌。由于此时输入的波段仍然为jp2格式,大部分ENVI功能无法进行处理。

这里需要使用一个官方提供的插件,插件需要在APP Store中下载,或者手动安装。

ENVI扩展工具:ENVITask批处理工具 - ENVI-IDL技术殿堂 - 博客园 (cnblogs.com)

text
https://www.cnblogs.com/enviidl/p/16333384.html

安装好之后,重启ENVI软件。

在右侧工具箱的【Extension】|【ENVITasks Batch】中,【Input Rasters】输入4个SCL波段,【ENVI Task】选择【Vector Mask Raster】,输入后缀为“subset”,【Display Results】勾选“Yes”,点击【OK】;进入下一级面板,【Input Mask Vector】选择准备好的矢量文件,【Inverse Mask】选择”No“,【Data Ignore Value】输入“0”,再选择好输出路径,最后点击【OK】。

img img

裁剪结果如下所示:

img

之后再右侧工具箱

由于这个仅仅是SCL波段的拼接,就直接导入4个裁剪后的SCL波段后,直接在【Export】面板中选择好输出路径,其他保持默认,直接输出就可以了。

img img

右键结果图层,选择【New Raster Color Slice】,选择SCL波段之后,创建密度分割波段。先点击【Clear Color Slices】,将所有的分割层级删除,再点击【Add Color Slice】添加新的颜色分割,自行设置阈值为3和9(云阴影和高置信度云),即跟刚开始类似的操作。

选中“Slice”,右键选择【Export Color Slices】|【Shapefile】,并选择输出路径,点击【OK】。

img img

在右侧工具箱中的【Raster Management】|【Masking】|【Build Mask】,选择转换像元值后的影像,在【Options】中选择【Import EVFs】,选择准备好的云层矢量,点击【OK】,在弹出的面板中,再次选择转换像元值后的影像,点击【OK】。

img img img img

此时返回最初的界面,选择好输出文件的路径之后,再点击【OK】即可。创建的掩膜如下所示,其中云层部分对应的值为0。

img img

在右侧工具箱中的【Raster Management】|【Masking】|【Apply Mask】,在主面板中选择之前转换像元值之后的影像,然后在下方的【Select Mask Band】中,选择刚刚生成的掩膜栅格,点击【OK】。在之后面板中选择文件输出路径,再次点击【OK】。

img img

可以看到,掩膜之后的影像中云层部分的各个波段值均为0。

img

选中图层后,右键选择【View Metadata】,然后选择【Edit Metadata】,点击左上方的【Add ...】,找到【Add Metadata Items】,添加【Data Ignore Value】这一选项,并将其设置为“0”。点击【OK】。

img img img

结果如下所示。云层的值已经被设置为Nodata。由于影像的背景值也为0,故结果中也一并去除了影像黑边。

img img

导出为TIF

通过【File】|【Save As】,将这个数据导出为TIFF格式。

img

注意点(必读)

1、在ENVI 5.3中处理Sentinel-2的数据时,后续波段合成之前一定要转化为.dat格式的文件,不然后续会报错。

2、Sentinel-2 L2A级别的数据官方通过整型数据存储,不同的处理版本的公式不一样。

3、Sentinel-2 L2A级别的数据在ENVI中有时通过【Seamless Mosaic】图像镶嵌的匀色效果很差,但是像元值是没有问题的。

4、如果操作过程中,涉及到了影像的坐标系转换,建议使用ENVI的【Reproject Raster】工具进行重投影;通过【Edit Metadata】直接修改影像的坐标系可能会导致影像的偏移。

5、原始数据最好备份一份,避免操作失误。

6、每一个步骤处理完后建议查看一下影像的处理结果是否符合预期,如果与预期相差较大,那么就可能是参数设置错误。

7、如果处理过程中发现某个盘爆满或者空间变小很多,可以在以下区域进行更改。在菜单栏【File】中选择【Preference】,找到【Temporary Directory】,对该路径进行修改,切换到其他路径,之后重启软件或电脑;或者对这个路径的缓存文件进行删除即可。

img

参考

envi.geoscene.cn - /help/Subsystems/envi/Content/

text
https://envi.geoscene.cn/help/Subsystems/envi/Content/