Files
BRDF/ocbrdf/Raman.py
2026-04-10 16:46:45 +08:00

37 lines
1.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)