GEE ACOLITE¶
ACOLITE atmospheric correction adapted for Google Earth Engine with Sentinel-2 imagery.
GEE ACOLITE integrates selected components of the ACOLITE processor — specifically its Look-Up Tables (LUTs) and Dark Spectrum Fitting (DSF) algorithm — into Google Earth Engine workflows. The key design decision is that AOT (aerosol optical thickness) is estimated as a single fixed value per image, making the correction computationally efficient while remaining scientifically rigorous for most aquatic remote sensing applications.
Key Features¶
- Dark Spectrum Fitting (DSF): Estimates a single global AOT per image using ACOLITE's LUTs and atmospheric models
- GEE-native processing: All image operations run server-side on GEE infrastructure; only AOT estimation runs client-side
- Sentinel-2 support: Full 13-band support (10m, 20m, 60m), including resampling and geometry extraction
- Water quality products: SPM, turbidity, chlorophyll-a (OC2, OC3, NDCI), and remote sensing reflectance (Rrs)
- Satellite-derived bathymetry: pSDB indices, optical filtering, and calibration against in-situ data
- Flexible masking: Water, cirrus, cloud, and cloud-shadow masks with configurable thresholds
System Architecture¶
graph TB
subgraph Client["Client (Local Python)"]
USER[User Script]
AC[ACOLITE Package]
LUT[LUT Tables]
DSF[DSF / AOT Estimation]
end
subgraph Server["Server (Google Earth Engine)"]
S2[Sentinel-2 L1C Catalog]
L1CONV[L1 Conversion & Resampling]
MASK[Masking]
RHOS[Surface Reflectance]
WQ[Water Quality Products]
SDB[Bathymetry]
end
USER --> AC
AC --> LUT
USER -->|search / ImageCollection| S2
S2 -->|TOA DN| L1CONV
L1CONV -->|dark spectrum getInfo| DSF
LUT --> DSF
DSF -->|fixed AOT + LUT params| RHOS
L1CONV --> RHOS
MASK --> RHOS
RHOS --> WQ
RHOS --> SDB
style Client fill:#dbeafe,stroke:#3b82f6
style Server fill:#dcfce7,stroke:#16a34a
Processing Pipeline¶
sequenceDiagram
participant User
participant Local as Local (ACOLITE + numpy/scipy)
participant GEE as GEE Server
User->>GEE: search(roi, start, end)
GEE-->>User: ee.ImageCollection (L1C)
User->>GEE: l1_to_rrs(images, scale)
GEE-->>GEE: DN → TOA reflectance + geometry angles
loop For each image
GEE-->>Local: compute_pdark() → dark spectrum (getInfo)
Local->>Local: estimate_aot_per_lut() — LUT interpolation
Local->>Local: select_best_model() — model selection
Local-->>GEE: fixed AOT + atmospheric params
GEE->>GEE: compute_rhos() — surface reflectance
GEE->>GEE: compute_water_bands() — WQ products
end
GEE-->>User: ee.ImageCollection (L2 + products)
Main Modules¶
| Module | Description |
|---|---|
gee_acolite.correction |
ACOLITE class — DSF atmospheric correction |
gee_acolite.water_quality |
Water quality parameter computation (SPM, turbidity, Chl-a, Rrs) |
gee_acolite.bathymetry |
Satellite-derived bathymetry (pSDB, calibration, mosaicking) |
gee_acolite.utils.search |
Sentinel-2 image search and cloud probability joining |
gee_acolite.utils.l1_convert |
L1C DN → TOA reflectance + geometry extraction |
gee_acolite.utils.masks |
Water, cloud, cirrus, and shadow masking |
gee_acolite.sensors.sentinel2 |
Sentinel-2 band definitions and resolution mapping |
Quick Start¶
import ee
import acolite as ac
from gee_acolite import ACOLITE
from gee_acolite.utils.search import search
# Initialize GEE
ee.Initialize(project='your-project-id')
# Define region of interest
roi = ee.Geometry.Rectangle([-0.40, 39.43, -0.30, 39.50])
# Search Sentinel-2 L1C images
images = search(roi, '2023-06-01', '2023-06-30', tile='30SYJ')
images = images.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10))
# Configure and run atmospheric correction
settings = {
'dsf_spectrum_option': 'darkest',
'dsf_model_selection': 'min_drmsd',
's2_target_res': 10,
'l2w_parameters': ['spm_nechad2016', 'chl_oc3', 'pSDB_green'],
}
ac_gee = ACOLITE(ac, settings)
corrected, final_settings = ac_gee.correct(images)
# Export to Google Drive
task = ee.batch.Export.image.toDrive(
image=corrected.first(),
description='valencia_corrected',
folder='GEE_ACOLITE',
region=roi,
scale=10,
maxPixels=1e9,
)
task.start()
Requirements¶
- Python >= 3.11
earthengine-api >= 0.1.350numpy >= 1.20,scipy >= 1.7,netcdf4 >= 1.7- ACOLITE (bundled as git submodule)
- Google Earth Engine account
See Installation for full setup instructions.
License¶
GPL-3.0-or-later
This software was developed at the Institute of Marine Sciences of Andalusia (ICMAN-CSIC), Spanish National Research Council (CSIC), Puerto Real, Spain.