陽光污染海洋顏色觀測的大氣校正
弗朗索瓦·斯坦梅茨
皮埃爾·伊夫·德尚
迪迪埃·拉蒙
海吉斯
這是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_5050106_106_F , 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') # 可選參數:ansline、
RR 和 FR 皆支援。 Level1產品的名稱就是目錄的名稱。
例子:
frompolymer。參數: 、 eline、scol、ecol、輔助
MODIS、SeaWiFS 和 VIIRS 需要 Level1C 檔案作為輸入。有關詳細信息,請參閱下一節有關 1C 級文件的內容。
例子:
frompolymer.level1_nasa import *Level1_MODIS('A2010120124000.L1C')Level1_SeaWiFS('S2000116121145.L1C')Level1_VIIRS('V201333911545.L1C')Level1_VIIRS('V201333911545, ry
level1產品的名稱指的是顆粒的路徑(在「GRANULE/」目錄中)。
例子:
來自polymer.level1_msi導入Level1_MSILevel1_MSI('S2A_OPER_PRD_MSIL1C_PDMC_20160504T225644_R094_V20160504T105917_20160504T105 GS__2016 0504T163055_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