Bio-optical Models
BING implements various bio-optical models for ocean color remote sensing analysis. This document describes the available models and their mathematical formulations.
Overview
Bio-optical models in BING relate Inherent Optical Properties (IOPs) to Remote Sensing Reflectance (Rrs):
where: - \(a(\lambda)\) is the total absorption coefficient - \(b_b(\lambda)\) is the total backscattering coefficient - \(f\) is a factor depending on the solar zenith angle and viewing geometry
Model Components
Total Absorption
The total absorption coefficient is decomposed as:
where: - \(a_w(\lambda)\) is pure water absorption - \(a_{nw}(\lambda)\) is non-water absorption
Non-water Absorption Models
Exponential Model (Bricaud)
where \(a_{ph}^*(\lambda)\) is the chlorophyll-specific absorption coefficient.
CDOM Absorption
where \(S_{dg}\) is the spectral slope.
Total Backscattering
where: - \(b_{bw}(\lambda)\) is water molecular backscattering - \(b_{bnw}(\lambda)\) is particulate backscattering
Non-water Backscattering Models
Power Law Model
where \(Y\) is the spectral slope parameter.
Lee Model
Based on Lee et al. (2002):
Implemented Models
Absorption Models (anw)
- class bing.models.anw
- ExpBricaud
Exponential Bricaud model for phytoplankton absorption
- Parameters:
A_ph: Amplitude coefficientE_ph: Exponent for chlorophyll dependencyS_dg: CDOM spectral slope
- GIOP
Generalized IOP model absorption
- Parameters:
a_dg_443: CDOM absorption at 443 nma_ph_443: Phytoplankton absorption at 443 nmS_dg: CDOM spectral slope
- GSM
Garver-Siegel-Maritorena model absorption
- Parameters:
Chl: Chlorophyll concentrationa_dg_443: CDOM absorption at 443 nm
- QAA
Quasi-Analytical Algorithm absorption
- Parameters:
a_total_ref: Total absorption at reference wavelengthS: Spectral slope
Backscattering Models (bbnw)
- class bing.models.bbnw
- PowerLaw
Power law backscattering model
- Parameters:
b_bp_ref: Particulate backscattering at reference wavelengthY: Spectral slope
- Lee
Lee et al. (2002) backscattering model
- Parameters:
b_bp_443: Particulate backscattering at 443 nmY: Spectral slope (default: 1.0)
- GSM
GSM backscattering model
- Parameters:
b_bp_443: Particulate backscattering at 443 nm
- Constant
Wavelength-independent backscattering
- Parameters:
b_bp: Constant backscattering value
Model Initialization
Initialize models using the utilities module:
from bing.models import utils as model_utils
import numpy as np
# Define wavelengths
wavelengths = np.arange(400, 701, 5)
# Initialize absorption and backscattering models
model_names = ['ExpBricaud', 'PowerLaw']
models = model_utils.init(model_names, wavelengths)
# Access individual models
anw_model = models[0] # Absorption model
bbnw_model = models[1] # Backscattering model
Model Configuration
Setting Chlorophyll
For models that use chlorophyll:
# Set chlorophyll concentration
anw_model.set_aph(Chl=1.5) # mg/m³
Custom Parameters
Override default parameters:
from bing.models.anw import ExpBricaud
# Custom initialization
model = ExpBricaud(
wave=wavelengths,
A_ph=0.05,
E_ph=0.65,
S_dg=0.015
)
Model Evaluation
Forward Modeling
Calculate Rrs from model parameters:
from bing import rt as bing_rt
# Set parameters
params = [0.01, 0.65, 0.015, 0.001, 1.2] # Example parameters
# Evaluate models
anw = anw_model.eval(params[:3])
bbnw = bbnw_model.eval(params[3:])
# Add water contributions
aw = absorption.a_water(wavelengths)
bbw = scattering.b_water(wavelengths) * 0.5
# Total IOPs
a_total = aw + anw
bb_total = bbw + bbnw
# Calculate Rrs
Rrs = bing_rt.calc_Rrs(a_total, bb_total)
Model Comparison
Compare different model combinations:
from bing.parameters import standard
# Different model combinations
configs = [
standard.expb_pow(), # ExpBricaud + PowerLaw
standard.giop(), # GIOP + Lee
standard.gsm_gsm(), # GSM + GSM
]
for config in configs:
models = model_utils.init(config.model_names, wavelengths)
# Perform fitting and analysis...
Performance Considerations
Model Selection Guidelines
ExpBricaud + PowerLaw: Good for general cases, especially with chlorophyll data
GIOP: NASA’s operational model, well-validated
GSM: Empirical model, good for Case 1 waters
QAA: Semi-analytical, good for clear waters
Computational Efficiency
Simple models (Constant, PowerLaw): Fast evaluation
Complex models (GSM, QAA): More computational overhead
MCMC fitting: Use appropriate number of steps based on model complexity
Model Validation
Residual Analysis
from bing import evaluate
# Calculate residuals
residuals = (measured_Rrs - modeled_Rrs) / uncertainty
# Statistical metrics
rmse = np.sqrt(np.mean(residuals**2))
bias = np.mean(residuals)
print(f"RMSE: {rmse:.4f}")
print(f"Bias: {bias:.4f}")
Cross-Validation
from sklearn.model_selection import KFold
# K-fold cross-validation
kf = KFold(n_splits=5, shuffle=True)
for train_idx, test_idx in kf.split(data):
train_data = data[train_idx]
test_data = data[test_idx]
# Fit model on training data
# Evaluate on test data
Advanced Topics
Custom Model Implementation
Create custom models by subclassing base classes:
from bing.models.base import BaseModel
class CustomAbsorption(BaseModel):
def __init__(self, wave, **kwargs):
super().__init__(wave, **kwargs)
self.n_params = 3 # Number of parameters
def eval(self, params):
# Custom evaluation logic
a0, slope, offset = params
return a0 * np.exp(-slope * (self.wave - 443)) + offset
Model Coupling
Couple absorption and backscattering models:
# Coupled parameterization
def coupled_model(params, wave):
# Shared parameters
Chl = params[0]
# Absorption depends on Chl
anw = 0.05 * Chl**0.65 * absorption_spectrum(wave)
# Backscattering also depends on Chl
bbnw = 0.001 * Chl**0.5 * backscatter_spectrum(wave)
return anw, bbnw
References
Bricaud et al. (1995) - Phytoplankton absorption
Lee et al. (2002) - Backscattering models
Maritorena et al. (2002) - GSM algorithm
Werdell et al. (2013) - GIOP framework
Lee et al. (2002) - QAA algorithm