阳光污染海洋颜色观测的大气校正
弗朗索瓦·斯坦梅茨
皮埃尔·伊夫·德尚
迪迪埃·拉蒙
海吉斯
这是Polymer大气校正算法的python/cython实现。 http://www.opticsinfobase.org/oe/abstract.cfm?uri=oe-19-10-9783
Polymer是用python3编写的。强烈建议使用 anaconda 安装所有必需的依赖项。 miniconda 版本就足够了。文件environment.yml
可用于在当前的anaconda环境或新环境中安装依赖项。
创建具有 Polymer 依赖项的新 anaconda 环境(独立的 python 安装):
conda create -n polymer -c conda-forge mamba conda activate polymer mamba env update -f environment.yml
可以使用以下命令下载辅助数据:
$ make auxdata_all
pyx 文件是 cython 文件,需要转换为 C,然后进行编译。提供了一个 makefile,因此只需键入:
$ make
注意:命令make all
将下载辅助文件并继续编译。
有一个简约的命令行界面polymer_cli.py
./polymer_cli.py <level1> <level2>
其中 是任何支持的传感器的 level1 文件或目录, 是要生成的结果。
请参阅./polymer_cli.py -h
获取更多帮助
通过直接从您自己的 python 脚本运行聚合物,可以获得更多选项。
frompolymer.main import run_atm_corrfrompolymer.level1 import Level1frompolymer.level2 import Level2run_atm_corr(Level1('MER_RR__1PRACR20050501_092849_000026372036_00480_16566_0000.N1', <其他可选的 level1 参数>), Level2('output.nc', <其他可选的 level2 参数>), <可选的聚合物参数>)
有关更多详细信息,请参阅example.py
...
多重处理
一种选项是multiprocessing
,它控制可用于 Polymer 处理的线程数量(默认情况下,多处理处于禁用状态)。要激活与 CPU 上的内核数量一样多的线程上的处理,请传递值-1
:
run_atm_corr(..., multiprocessing=-1)
该选项控制核心聚合物处理的并行化。然而,Polymer 依赖于 numpy,它也可以使用并行处理,并导致多核的适度使用。要同时禁用 numpy 多处理,您可以传递环境变量OMP_NUM_THREADS=1
(或使用 threadpoolctl 库)
访问 NASA 辅助数据的凭据应在您的 ~/.netrc 文件中提供:
cd ~ touch .netrc echo "machine urs.earthdata.nasa.gov login uid_goes_here password password_goes_here" > .netrc chmod 0600 .netrc
更多信息请访问:https://urs.earthdata.nasa.gov/documentation/for_users/data_access/curl_and_wget
辅助数据(臭氧总柱、风速、表面压力)可以通过类Ancillary_NASA(hdf4格式的NASA文件)提供给level1类:
frompolymer.ancillary import Ancillary_NASA Level1(<文件名>, ancillary=Ancillary_NASA())
注意: Ancillary_NASA
类具有默认选项,可自动下载并选择文件夹ANCILLARY/METEO/
中最接近的可用数据集
该文件夹使用命令make ancillary
或make all
初始化。
有关可选参数的更多信息,请查看Ancillary_NASA
的帮助。
或者,辅助数据(臭氧总柱、风速、表面压力)可以由 ECMWF 的全球再分析 ERA-Interim 提供。
请参阅 https://www.ecmwf.int/en/forecasts/datasets/reanalysis-datasets/era-interim
要使 Polymer 与 ERA-Interim 连接,需要以下 python 模块: * ecmwf python api 客户端(用于动态下载 ERA-Interim 文件) 需要 ECMWF 密钥。请参阅 https://software.ecmwf.int/wiki/display/WEBAPI/Access+ECMWF+Public+Datasets * pygrib,以读取 grib 格式的 ERA-Interim 文件。
通过将类 Ancillary_ERA 传递到 Level1 的参数 ancillary 来使用 ERA-Interim 辅助数据。
frompolymer.ancillary_era import Ancillary_ERA Level1(<文件名>, ancillary=Ancillary_ERA())
默认情况下,会自动使用时间上最接近的数据,并在必要时动态下载。有关更多信息,请查看 Ancillary_ERA 的文档字符串。
辅助数据也可以由 ECMWF 的 ERA5 数据集提供:https://www.ecmwf.int/en/forecasts/datasets/reanalysis-datasets/era5
需要以下 python 模块:
cdsapi。需要 CDS API 密钥。请参阅 https://cds.climate.copernicus.eu/api-how-to 了解更多详情。
阵列
frompolymer.ancillary_era5 import Ancillary_ERA5 Level1(<文件名>, ancillary=Ancillary_ERA5())
本节提供有关支持的文件格式和传感器的信息。
注意:类Level1
( from polymer.level1 import Level1
)自动检测文件格式并返回适当的特定 level1 对象(Level1_MERIS、Level1_OLCI 等)。
支持 FF(降低分辨率)和 FR(全分辨率)。
例子:
frompolymer.level1_meris import Level1_MERISLevel1_MERIS('MER_RR__1PRACR20050501_092849_000026372036_00480_16566_0000.N1') # 可选参数:sline、eline、ancillary
RR 和 FR 均支持。 Level1产品的名称就是目录的名称。
例子:
frompolymer.level1_olci import Level1_OLCILevel1_OLCI('S3A_OL_1_EFR____20170123T102747_20170123T103047_20170124T155459_0179_013_279_2160_LN1_O_NT_002.SEN3') #可选参数:sline、eline、scol、ecol、ancillary
MODIS、SeaWiFS 和 VIIRS 需要 Level1C 文件作为输入。有关详细信息,请参阅下一节有关 1C 级文件的内容。
例子:
frompolymer.level1_nasa import *Level1_MODIS('A2010120124000.L1C')Level1_SeaWiFS('S2000116121145.L1C')Level1_VIIRS('V2013339115400.L1C') # 可选参数: sline, eline, scol, ecol, ancillary
level1产品的名称指的是颗粒的路径(在“GRANULE/”目录中)。
例子:
从polymer.level1_msi导入Level1_MSILevel1_MSI('S2A_OPER_PRD_MSIL1C_PDMC_20160504T225644_R094_V20160504T105917_2016 0504T105917.安全/颗粒/S2A_OPER_MSI_L1C_TL_SGS__20160504T163055_A004524_T30TXR_N02.02') # 可选参数:sline、eline、ancillary
Polymer 通过 level1 类 Level1_ASCII 支持来自多个传感器的 ascii (CSV) 数据输入。
Level1_NETCDF 可用于读取由 SNAP 编写的 netCDF4 格式的 MERIS、OLCI 或 Sentinel2 产品,特别是在用于子集化时。
NASA OBPG L1A 和 L1B 不包括所有必要的辐射校正。因此,有必要应用具有自定义选项的l2gen
将 TOA 反射率写入我们所谓的“Level1C”产品。
命令行通常是:
l2gen ifile=<level1a> ofile=<level1c> gain="1 1 1 1 1 1 1 1" oformat="netcdf4" l2prod="rhot_nnn polcor_nnn sena senz sola solz latitude longitude"
请参阅tools/make_L1C.py
,这是一个用于生成 1c 级产品的帮助程序脚本。
输出文件的格式可以是 hdf4 或 netcdf。它们包含水反射率(无量纲,完全归一化太阳和最低点传感器)和其他不言自明的参数。
聚合物标志如下:
--------------------------------------------------------------------------------- | Flag name | Flag value | Description | |--------------------|-------------|--------------------------------------------| | LAND | 1 | Land mask | | CLOUD_BASE | 2 | Polymer's basic cloud mask | | L1_INVALID | 4 | Invalid level1 pixel | | NEGATIVE_BB | 8 | (deprecated flag) | | OUT_OF_BOUNDS | 16 | Retrieved marine parameters are outside | | | | valid bounds | | EXCEPTION | 32 | A processing error was encountered | | THICK_AEROSOL | 64 | Thick aerosol flag | | HIGH_AIR_MASS | 128 | Air mass exceeds 5 | | EXTERNAL_MASK | 512 | Pixel was masked using external mask | | CASE2 | 1024 | Pixel was processed in "case2" mode | | INCONSISTENCY | 2048 | Inconsistent result was detected | | | | (atmospheric reflectance out of bounds | | ANOMALY_RWMOD_BLUE | 4096 | Excessive difference was found at 412nm | | | | between Rw and Rwmod | --------------------------------------------------------------------------------|
建议的输出像素标记如下(“&”表示按位 AND 运算符):
------------------------------------------------------------------------------ | Sensor | Recommended flagging | Notes | | | (valid pixels) | | |----------|------------------------------|----------------------------------| | OLCI | bitmask & 1023 == 0 | | | | | | | MSI | bitmask & 1023 == 0 | | | | | | | MERIS | bitmask & 1023 == 0 | | | | | | | VIIRS | bitmask & 1023 == 0 | Sun glint and bright (cloudy) | | | and (Rnir<0.1) | pixels are discarded | | | and (Rgli<0.1) | | | | | | | SeaWiFS | bitmask & 1023+2048 == 0 | The INCONSISTENCY flag | | | | cleans up most noisy pixels | | | | | | MODIS | bitmask & 1023+4096 == 0 | The ANOMALY_RWMOD_BLUE removes | | | | outliers appearing on MODIS | | | | results at high SZA | -----------------------------------------------------------------------------|
注意:建议使用 IdePix (https://github.com/bcdev/snap-idepix) 进行额外的云屏蔽。
该软件根据 Polymer 许可证 v2.0 提供,可在 LICENCE.TXT 文件中找到。
当确认在科学论文、报告等中使用聚合物时,请引用以下参考文献:
François Steinmetz、Pierre-Yves Deschamps 和 Didier Ramon,“存在阳光闪烁的大气校正:在 MERIS 中的应用”,Opt。快报 19, 9783-9800 (2011), http://dx.doi.org/10.1364/OE.19.009783
François Steinmetz 和 Didier Ramon“使用 POLYMER 的 Sentinel-2 MSI 和 Sentinel-3 OLCI 一致的海洋颜色产品”,Proc。 SPIE 10778,公海、沿海海洋和内陆水域遥感,107780E(2018 年 10 月 30 日); https://doi.org/10.1117/12.2500232