如何使用Sen2Cor处理卫星图像

Sen2Cor-处理从Sentinel-2卫星拍摄的图像的程序。本文介绍了如何安装,运行和配置它。

Sen2Cor处理前后的卫星图像

在裁判官方面,我需要对Sentinel-2卫星的图像进行大气校正。精通生态学,因此有可能不去研究物理学和数学,而是使用现成的工具。发现了这样的工具-Sen2Cor。

什么是Sentinel-2
Sentinel-2 — , (ESA) 2015 . 13 , . — , . 100 100 . — 10 . — Copernicus Open Access Hub USGS Earth Explorer.

问题在于,Sen2Cor没有明确的说明。地理信息学教科书的作者没有进入使用特定程序的丛林,相反,科学文章的作者认为,图像校正是该技术的一部分,因此太简单了,因此他们没有详细描述它。在“用于假人”的网站上(而不是用于假人的网站),也没有写过Sen2Cor。官方文档令人困惑:只需说一下“用户指南”第26页上的“安装”部分就立即指向发行说明的第60页即可。我花了一段时间才弄清楚。

我决定为安装,启动和配置Sen2Cor写一个易于理解的指南。该手册针对生物学家,生态学家,农业专家以及所有可能需要卫星图像处理但不是主要任务的人员。实际上,我分享自己的经验。我不保证绝对正确和完整。我认为,地理信息专家会给我一些建议。

严格来说,Sen2Cor不仅可以进行大气校正,还可以校正太阳和地形的角度以及主题分类(场景分类),但对我而言,最重要的是进行大气校正。因此,为简单起见,我有时写“大气校正”而不是“处理”,尽管这是不准确的。

Sen2Cor在三种模式下工作:作为独立的控制台应用程序,作为Sentinel-2 Toolbox中的插件以及作为PDGS(有效载荷数据地线段)中使用的控制台应用程序。 PDGS是从卫星接收的地面数据中心。他在意大利的一家研究所工作。从理论上讲,您可以使用与在数据中心中启动Sen2Cor相同的模式来运行Sen2Cor,但是要运行,您需要的是无法在Internet上下载的数据,因此我们将不考虑此选项。 Sentinel-2 Tolobox也被绕过,因为我没有使用此程序。它具有图形界面,因此我认为了解她的工作并不困难。因此,本文介绍了如何在控制台模式下使用Sen2Cor。

Sen2Cor在64位Windows,MacOS和Linux上运行。我有Linux,因此我将以Linux为例显示命令。但是,唯一的区别在于安装程序和文件路径。

Sen2Cor需要4 GB的RAM。如果更少,它将启动,但可能在处理过程中崩溃。RAM的消耗取决于所拍摄图像的分辨率,因此,如果内存较小,并且程序因此而出错,则可以以较低的分辨率开始处理。下面介绍了如何执行此操作。对处理器没有类似的严格要求,但是处理器越弱,处理所花费的时间就越多。

安装


您需要下载安装程序并运行它。 Sen2Cor是用Python编写的,但是解释器和所有必需的软件包都在安装程序中,因此您无需自己安装Python并配置环境。

假设我们有一个带有主目录的用户/home/user。在主目录spaceshots创建一个文件夹,我们将在其中使用图片。文件夹的完整路径为/home/user/spaceshots

接下来,下载并运行安装程序。打开Sen2Cor页面在欧洲航天局的仪器现场。该程序有两个版本:2.5.5和2.8。安装2.8更好:它消耗更少的RAM并包含更少的错误。如果需要处理根据旧规范拍摄的照片,则可能需要版本2.5.5。点击“ Sen2Cor v2.8”。在“独立安装程序”部分的页面结尾,是用于下载安装程序的链接。下载适合我们操作系统的软件。在这种情况下,它是“ Linux安装程序:Sen2Cor-02.08.00-Linux64.run”。将文件保存到/home/user/spaceshots

接下来,打开控制台,移至目录spaceshots并运行安装程序。

$ cd ~/spaceshots
$ ./Sen2Cor-02.08.00-Linux64.run

默认情况下,该程序安装在当前目录中。Sen2Cor-02.08.00-Linux64其中创建一个文件夹,其中提取了所有程序文件。总的来说,安装归结为解压缩归档文件。另外,在主目录中创建了一个用于配置文件和日志的文件夹:/home/user/sen2cor/2.8

如果没有错误,则控制台上应显示一个标题,«Congratulations, Installation successful...»并提供测试安装的建议。让我们进行测试运行:

$ /home/user/spaceshots/Sen2Cor-02.08.00-Linux64/bin/L2A_Process -h 

该命令/home/user/spaceshots/Sen2Cor-02.08.00-Linux64包含Sen2Cor的安装目录。该文件夹bin包含程序的主要可执行文件,包括main文件L2A_Process该选项-h表明您需要显示帮助页面。命令执行的结果是,控制台中应显示以下内容:

usage: L2A_Process.py [-h] [--mode MODE] [--resolution {10,20,60}]
                      [--datastrip DATASTRIP] [--tile TILE]
                      [--output_dir OUTPUT_DIR] [--work_dir WORK_DIR]
                      [--img_database_dir IMG_DATABASE_DIR]
                      [--res_database_dir RES_DATABASE_DIR]
                      [--processing_centre PROCESSING_CENTRE]
                      [--archiving_centre ARCHIVING_CENTRE]
                      [--processing_baseline PROCESSING_BASELINE] [--raw]
                      [--tif] [--sc_only] [--cr_only] [--debug]
                      [--GIP_L2A GIP_L2A] [--GIP_L2A_SC GIP_L2A_SC]
                      [--GIP_L2A_AC GIP_L2A_AC] [--GIP_L2A_PB GIP_L2A_PB]
                      input_dir

Sentinel-2 Level 2A Processor (Sen2Cor). Version: 2.8.0, created: 2019.02.20,
supporting Level-1C product version 14.2 - 14.5.


如果出现,则说明安装正常,可以使用该程序了。唯一仍然没有做的事情就是简化程序的启动。当您需要指定文件的完整路径时:/home/user/spaceshots/Sen2Cor-02.08.00-Linux64/bin/L2A_Process不舒服 简单地编写起来容易得多L2A_Process但是,如果您现在执行此操作,将出现错误:

$ L2A_Process
bash: L2A_Process:   

要修复该错误并在command上运行Sen2Cor L2A_Process,您需要向该文件添加一个命令,该文件.bashrc位于主目录(在本例中为address /home/user/.bashrc)。这是一个隐藏文件,因此在打开它之前,需要在文件管理器中启用隐藏文件的显示。

将以下行添加.bashrc文件末尾

# Sen2Cor processor (v. 2.8.0)
source /home/user/spaceshots/Sen2Cor-02.08.00-Linux64/L2A_Bashrc

第一行是注释,以记住为什么需要第二行。每次系统启动时,第二行执行文件中包含的脚本L2A_Bashrc该脚本更改了一些环境变量,以便L2A_Process可以从任何地方访问该命令,而无需指定该命令的完整路径。

为了使更改.bashrc生效,您需要返回到控制台并运行以下命令

$ source ~/.bashrc

您也可以更改程序的安装位置。为此,必须在启动安装程序时指定该选项--target例如,命令

# ./Sen2Cor-02.08.00-Linux64.run --target /usr/share/sen2cor

将在安装Sen2Cor /usr/share/sen2cor我们从超级用户运行命令,因为普通用户通常不能将文件写入/usr但是,在这种情况下,您将必须以超级用户权限运行Sen2Cor或将访问权限更改为/usr/share/sen2cor

如何在MacOS和Windows上安装
MacOS , Linux.

Windows — zip-, . L2A_Process L2A_Process.bat, bin, , :

C:\Users\user\spaceshots\Sen2Cor-02.08.00-Linux64/L2A_Process.bat -h

Windows : :\Users\user\sen2cor\2.8. .

, L2A_Process.bat, Windows L2A_Bashrc.bat PATH.

图像处理


因此,我们安装了Sen2Cor并使其在command上运行L2A_Process。现在进行大气校正。假设我们已经下载了卫星图像并将其解压缩到中/home/user/spaceshots。我于2018年7月27日拍摄了叶卡捷琳堡以西地区的照片。快照文件名为L1C_T40VFJ_A016162_20180727T071939.zip。打开包装后,出现S2A_MSIL1C_20180727T071621_N0206_R006_T40VFJ_20180727T092607.SAFE文件夹。然后,为了进行大气校正,您需要运行以下命令:

$ L2A_Process S2A_MSIL1C_20180727T071621_N0206_R006_T40VFJ_20180727T092607.SAFE/

按下Enter键后,您可以放松下来,因为该处理需要花费大量时间(在带有Intel Cascade Lake的Yandex.Cloud上,并保证5%的CPU份额-大约一个小时)。Sen2Cor在控制台中显示有关进度的信息,以便您大致了解程序当前正在做什么。

在控制台中登录开始
Sentinel-2 Level 2A Processor (Sen2Cor). Version: 2.8.0, created: 2019.02.20, supporting Level-1C product version 14.2 - 14.5 started ...
Product version: 14.5
Operation mode: TOOLBOX
Processing baseline: 99.99
Progress[%]:  0.00 : Generating datastrip metadata
L1C datastrip found, L2A datastrip successfully generated
Selected resolution: 60 m
Progress[%]: 1.13 : PID-4202, L2A_ProcessTile: processing with resolution 60 m, elapsed time[s]: 2.299, total: 0:00:10.789933
Progress[%]: 1.13 : PID-4202, L2A_ProcessTile: start of pre processing, elapsed time[s]: 0.000, total: 0:00:10.790432
Progress[%]: 1.27 : PID-4202, L2A_Tables: start import, elapsed time[s]: 0.278, total: 0:00:11.068694
Progress[%]: 1.69 : PID-4202, L2A_Tables: band B01 imported, elapsed time[s]: 0.851, total: 0:00:11.919562
Progress[%]: 9.39 : PID-4202, L2A_Tables: band B02 imported, elapsed time[s]: 15.618, total: 0:00:27.537532
Progress[%]: 17.16 : PID-4202, L2A_Tables: band B03 imported, elapsed time[s]: 15.743, total: 0:00:43.280800


程序完成工作后,/home/user/spaceshotsS2A_MSIL1C_20180727T071621_N0206_R006_T40VFJ_20180727T092607.SAFE/旁边,应出现另一个名称非常相似的文件夹-S2A_MSIL2A_20180727T071621_N9999_R006_T40VF08

,我们现在已经有了程序。为此,请考虑Sentinel-2图像的结构。

Sentinel-2卫星图像是一个大小为几百兆字节的zip存档。在我们的情况下,归档文件名为L1C_T40VFJ_A016162_20180727T071939.zip。信息以名称编码:处理级别(L1C),地区代码(T40VFJ),轨道号(A016162)),拍摄日期和时间。在此存档中,有一个长名称为.SAFE的文件夹。在* .SAFE文件夹中,有一个GRANULE文件夹,在其中有另一个长名的文件夹,其中有IMG_DATA文件夹,其中有14张jp2格式的图像。其中有13个编号-名称以B01-B12结尾(再加上一个编号B8A)。这些是图块-在特定波长下拍摄的地球表面图像。例如,B04是红色范围内的图片,而B08是近红外范围内的图片,这两个图片可以一起用于计算众所周知的索引NDVI。第14张图像的名称以TCI结尾,表示真彩色图像-这是一张全彩色图片,即与在常规相机上拍摄的图像大致相同。

Sen2Cor接收* .SAFE文件夹作为源数据-它是启动程序时指定为唯一必需的参数。如果您指定的不是* .SAFE文件夹,而是带有快照或特定图块的源归档,则该程序将不会启动。

$ L2A_Process T40VFJ_20180727T071621_B04.jp2 
Product metadata file cannot be read.

事实是,不仅图块本身用于大气校正,而且元数据也使用,并且它们位于* .SAFE文件夹内的文件中,而不是图块中。

该程序的工作结果也是一个* .SAFE文件夹,其结构类似:内部有一个GRANULE文件夹,内部是另一个文件夹,其中IMG_DATA文件夹位于其中,并且其中包含正确的图块。磁贴按空间分辨率分组:R10m文件夹中的空间分辨率为10米,R20m中的分辨率为20米,R60m中的分辨率为60米。使用某些设置,将不会处理某些权限,也不会创建相应的文件夹-有关更多信息,请参见下文。

* .SAFE文件夹的名称由此产生的名称与原始名称仅一个不同:在开头而不是_MSI L1C_表示_MSI L2A _。 L1C和L2A是处理级别代码。 L1C级别意味着将图像处理到大气顶部反射率级别,即图像中的像素值对应于记录在卫星飞行的大气层上限的反射率。 L2A级别正在处理到大气底部的反射级别,即处理到地球表面的反射值-好像大气层是绝对透明的。实际上,当然不是这样,大气校正允许您仅去除光通过大气时发生的部分畸变,但总的来说,``大气底部反射率''值比``大气顶部''值更符合地球表面的实际反射率。反射率。

除了已调整的瓷砖外,Sen2Cor还可以生成更多图像:全彩色(TCI),大气的气溶胶光密度图(AOT-气溶胶光学厚度)和水蒸气含量(WV-水蒸气),表面类型的主题分类图(SC-场景分类)。它们也位于相应空间分辨率的目录的IMG_DATA文件夹中。

如果希望将程序结果的文件夹不是* .SAFE,而是以其他方式调用,则可以使用option自己指定名称--output_dir。假设我们使用不同的设置运行了3次Sen2Cor,并将结果保存到文件夹test1,test2和test3。然后我们--output_dir在启动时指出


$ L2A_Process --output_dir /home/user/spaceshots/test1 S2A_MSIL1C_20180727T071621_N0206_R006_T40VFJ_20180727T092607.SAFE

-并且校正后的图像将出现在目录中/home/user/spaceshots/test1。在第二个和第三个开始处,我们分别指示--output_dir /home/user/spaceshots/test2--output_dir /home/user/spaceshots/test3

另一个有用的选择是这个--resolution。它允许您设置程序结果将获得的图块的空间分辨率。 Sen2Cor可以创建具有不同空间分辨率的图像-每个像素10、20或60米。默认情况下,制作10米和20米。假设我们有足够的分辨率为每像素60米的图块用于探索性分析。然后,您可以使用选项指定目标分辨率--resolution

$ L2A_Process --resolution 60 S2A_MSIL1C_20180727T071621_N0206_R006_T40VFJ_20180727T092607.SAFE

使用这些参数启动后,Sen2Cor将处理图像并创建分辨率为60米的调整后的图块。与标准启动不同,处理所需的时间要少得多-只需四分钟多一点。内存消耗也较少,因此,如果由于缺少内存而以标准分辨率开始的操作以错误结束,则可以指定60米的分辨率。只有R60m文件夹将位于IMG_DATA文件夹中,并且在其中将有分辨率为60米的图块以及一些其他图像:全彩色主题图和水蒸气含量图。

配置文件


我们使用Sen2Cor使用默认设置处理了卫星图像。可以使用--resolution选项更改保存工作结果的分辨率和文件夹--output_dir。还有更多命令行选项,但是,并非所有选项都可以使用它们进行配置。在处理过程中还有许多其他重要参数,例如:是否考虑地形,是否去除云层,如何评估大气状态。在Sen2Cor中,使用配置文件进行配置。

如果您像之前一样运行Sen2Cor,但未指定配置文件的路径,则将使用标准配置文件。标准配置文件位于主目录中(在本例中为/文件夹中)home/user/sen2cor/2.8/cfg。该文件称为L2A_GIPP.xml。 L2A代表处理级别,GIPP代表地面图像处理参数-图像地面处理的参数。这是一个常规的xml文件,其中包含多个部分,并且在各部分中包含用于不同设置的元素。每个设置的说明直接写在文件中。此外,文档中还包含有关设置的详细说明-但是,不容易理解它。

您可以直接编辑标准配置文件,但是最好将其复制并在启动程序时明确指出需要使用其他配置文件。将L2A_GIPP.xml复制到/home/user/spaceshots,将其重命名为custom.xml并使用以下配置文件运行程序:

$ L2A_Process --GIP_L2A /home/user/spaceshots/custom.xml --resolution 60 S2A_MSIL1C_20180727T071621_N0206_R006_T40VFJ_20180727T092607.SAFE

请注意,配置文件的选项名为--GIP_L2A-带一个字母“ P”。由于我们没有编辑配置文件,因此程序的过程和结果与从默认配置开始没有什么不同。

配置文件中有许多不同的参数。让我们考虑其中的一些。

日志


Log_Level-确定程序日志的详细程度的参数。日志在操作过程中显示在控制台中,并另外存储在日志文件夹中(在本例中为- /home/user/sen2cor/2.8/log)。默认值为INFO。如果您在程序中没有遇到错误,通常不需要更改此设置。

考虑到太阳的后角和角度


DEM_Directory-数字高程图所在的文件夹(DEM-数字高程模型)。使用数字高程图处理结果通常更准确。默认值为NONE,即不考虑地形。如果您有自己的数字高程图,请指明其路径。对于DEM的文件夹应该是在同一个地方的文件夹cfg,并log在我们的情况下,在目录中/home/user/sen2cor/2.8因此,如果您有数字高程图,则需要将其放入/home/user/sen2cor/2.8/dem并在DEM_Directory中指定dem。如果它不存在,但仍要使用它,则可以指定任何路径(例如,也写dem)并配置下一个参数。

DEM_Reference-如果不在上一段中指定的文件夹中,则从该URL下载数字高程模型。Sen2Cor开发人员建议使用
http:// data_public:GDdci@data.cgiar-csi.org/srtm/tiles/GeoTIFF/
-这是STRM DEM的链接,STRM DEM是具有90米空间分辨率的免费分布式数字高程图。鉴于比例尺并不比卫星图像本身小很多,因此该模型应能得出良好的结果。

如果Sen2Cor看到DEM_Directory指定了NONE以外的其他值,它将尝试从指定目录中打开带有凹凸贴图的文件。如果无法打开文件,他将尝试通过中指定的URL下载DEM_Reference如果下载失败,则错误消息将出现在日志中,并且继续处理时不会考虑地形。从URL下载的文件保存在DEM_Directory并且在程序终止后不会被删除。因此,如果要使用相同的海拔图再次处理同一图像(例如,通过更改其他校正设置),Sen2Cor将不会再次下载数字海拔图,而是使用其离线副本。

该选项Generate_DEM_Output使您可以通过该程序获得带有数字高程图的单独图块。默认值为FALSE。

该选项DEM_Terrain_Correction部分禁用了数字高程图的使用:在主题分类(SC)和AOT地图的构造中将继续考虑高程,但在调整来自地面的反射值时不会考虑。

如果未使用DEM,则指定参数Altitude-这是图片中捕获区域的海拔高度的平均数。高度以公里表示。

与高程核算有关的另外两个参数是BRDF_CorrectionBRDF_Lower_BoundBRDF代表双向反射率分布函数,是一个模拟不透明表面的光反射的方程式。不同的值BRDF_Correction对应于该方程式中系数之一的不同值。在官方文档中,建议在大多数情况下使用21。它BRDF_Lower_Bound负责方程中的另一个系数,并且可以默认将其保留,除非您确切知道为什么以及为什么需要更改它。

好看的照片


该选项Generate_TCI_Output打开和关闭创建全彩色图像。默认值为TRUE,但是如果不需要精美图片,则可以选择FALSE。

解释大气状态


参数Aerosol_TypeMid_LatitudeOzone_Content表示在拍摄时的大气状态。Aerosol_Type可以在领土上设置:如果是大陆,则为农村;如果是海洋,则为海洋。Mid_Latitude同样由季节决定:如果是夏季,则为夏季;如果是冬季,则为冬季。

该参数Ozone_Content表示臭氧含量。臭氧含量可在《世界臭氧资料》和《紫外线在线》资料库中找到。在地图上,您可以找到最靠近测量区域的测站,然后在正确的时间下载数据集,并在拍摄当天查看测量结果。但是,不可能在配置文件中建立实际的测量结果-您需要从列表中为相应季节选择一个值。因此,您必须首先找出实际测量值,然后选择最接近的可用值。例如,根据叶卡捷琳堡站的数据,2018年6月27日(花费时间),臭氧含量为316 DU配置文件中的解释指出:对于中纬度的夏季,可用选项为250、290、331(默认),370、410、450。最接近316的是331。默认情况下,因此在这种情况下无法执行任何操作不要换。如果照片的拍摄早在几天前,当臭氧浓度降低到302 DU,应设置Ozone_Content到290

原则上,所有三个参数- ,Aerosol_Type -在大多数情况下,可以通过默认设置-为汽车和0 在这种情况下,Sen2Cor将根据图像元数据确定最合适的值。Mid_LatitudeOzone_ContentAerosol_TypeMid_LatitudeOzone_Content

除云


该参数Cirrus_Correction说明是否从图像中去除了卷云。WV_Threshold_Cirrus- 一起使用-这是水蒸气含量阈值,即使将其Cirrus_Correction设置为TRUE ,该阈值也会自动禁用除云功能因此,如果有理由认为拍摄时大气中的水蒸气含量较低,但仍然有小云,需要将其去除,则最好降低该值WV_Threshold_CirrusWV_Threshold_Cirrus可以是0.1到1。

结论


因此,在本文中,我们研究了以下问题:如何安装Sen2Cor,如何使用默认设置启动它,如何使用命令行和配置文件选项更改程序的某些参数。有关Sen2Cor的更深入研究,您可以参考官方文档,该文档与安装程序在同一页面上。官方文档包括四个文档:更简单明了的发行说明和软件用户手册,以及相当复杂的技术产品定义和输入输出数据定义。后一个文件还包含“ GIPP的完整参考”作为附件pdf文件。我相信技术专家会在这些文件中发现更多有用的信息。

All Articles