Initial commit

This commit is contained in:
2026-04-10 16:46:45 +08:00
commit 4fd1b0a203
165 changed files with 25698 additions and 0 deletions

36
ocbrdf/Raman.py Normal file
View File

@ -0,0 +1,36 @@
import numpy as np
import xarray as xr
''' 来自 Lee 等人 (2013) 的拉曼校正:
《全球海洋中紫外-可见太阳辐射的穿透:来自海洋水色遥感的见解》
J Geophys Res Oceans 2013;118:424155
光谱插值在最近波段进行
'''
""" 拉曼校正查找表的类 """ # TODO 存储并在 ADF 中读取
class Raman():
def __init__(self):
bands = [412,443,488,531,551,667]
coords = {'bands': bands}
self.alpha = xr.DataArray([0.003,0.004,0.011,0.015,0.017,0.018], dims='bands', coords=coords)
self.beta1 = xr.DataArray([0.014,0.015,0.010,0.010,0.010,0.010], dims='bands', coords=coords)
self.beta2 = xr.DataArray([-0.022,-0.023,-0.051,-0.070,-0.080,-0.081], dims='bands', coords=coords)
def correct(self, Rrs):
# Interpolate coefficients at nearest bands
interp_opt = {'method':'nearest', 'kwargs':{'fill_value':'extrapolate'}}
alpha = self.alpha.interp(bands=Rrs.bands, **interp_opt)
beta1 = self.beta1.interp(bands=Rrs.bands, **interp_opt)
beta2 = self.beta2.interp(bands=Rrs.bands, **interp_opt)
# Select reference bands closest to 440 and 550
Rrs440 = Rrs.sel(bands=440, method='nearest')
Rrs550 = Rrs.sel(bands=550, method='nearest')
# Compute Raman factor
RF = alpha*Rrs440/Rrs550 + beta1*np.power(Rrs550,beta2)
# Correct
return Rrs/(1+RF)