37 lines
1.4 KiB
Python
37 lines
1.4 KiB
Python
import numpy as np
|
||
import xarray as xr
|
||
|
||
''' 来自 Lee 等人 (2013) 的拉曼校正:
|
||
《全球海洋中紫外-可见太阳辐射的穿透:来自海洋水色遥感的见解》
|
||
J Geophys Res Oceans 2013;118:4241–55
|
||
|
||
光谱插值在最近波段进行
|
||
'''
|
||
|
||
""" 拉曼校正查找表的类 """ # 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)
|
||
|