Satellite-based bare soil detection algorithms implemented in Google Earth Engine (JavaScript and Python APIs). Extracts bare soil reflectance from Landsat 8 imagery for soil organic carbon mapping and spectral analysis.
- Dual Algorithm Support: GEOS3 (Demattê et al., 2018) and SatSoil implementations
- Multiple Interfaces: JavaScript (GEE Code Editor) and Python (Jupyter notebooks)
- Cloud Processing: Leverages Google Earth Engine for large-scale analysis
- Validation Tools: Statistical validation and Canonical Correlation Analysis
- Interactive Visualization: Side-by-side comparison maps
- Export Capabilities: GeoTIFF outputs to Google Drive
- Google Earth Engine account (sign up at earthengine.google.com)
- Python 3.7+ (for Python notebooks)
# Clone the repository
git clone https://github.com/yourusername/satsoil.git
cd satsoil
# Install dependencies
pip install -r requirements.txt
# Authenticate GEE (first time only)
python -c "import ee; ee.Authenticate()"No installation required. Access the GEE Code Editor and copy scripts from gee_scripts/.
- Open Google Earth Engine Code Editor
- Copy contents from
gee_scripts/satsoil_geos3_comparison.js - Click Run to execute
jupyter notebook notebooks/satsoil_example_usage.ipynb| Notebook | Description |
|---|---|
satsoil_example_usage.ipynb |
Main tutorial: algorithm comparison, visualization, and export |
satsoil_bare_soil_validation_and_verfication.ipynb |
CRMI threshold validation analysis |
cca_satsoil_geos3_graphs.ipynb |
Canonical Correlation Analysis with LUCAS-2015 data |
satsoil/
├── gee_scripts/ # Google Earth Engine JavaScript implementations
├── notebooks/ # Jupyter notebooks with Python GEE API
├── data/ # Validation datasets
├── figures/ # Generated visualization outputs
└── requirements.txt # Python package dependencies
Based on Demattê et al. (2018):
- NDVI: -0.25 to 0.25 (vegetation filtering)
- NBR2: -0.3 to 0.1 (burn scar filtering)
- VNSIR: ≤ 0.9 (spectral tendency index)
Novel algorithm using:
- Spectral Band Differences: Progressive increase from blue to SWIR1
- Slope Constraints: B2 → B3 → B4 → B5 → B6 must be positive
- CRMI: Crop Residue Moisture Index for senescent vegetation filtering
Data Source: Landsat 8 Collection 2 Level 2 (surface reflectance, 2013-2023)
If you use SatSoil in your research, please cite:
@article{khazaei2025satsoil,
title={Satellite Soil Observation (SatSoil): extraction of bare soil reflectance for soil organic carbon mapping on Google Earth Engine},
author={Khazaei, Morteza and Sorenson, Preston Thomas and Magagi, Ramata and Go{\"i}ta, Kalifa},
journal={Canadian Journal of Remote Sensing},
volume={51},
number={1},
pages={2445836},
year={2025},
publisher={Taylor \& Francis},
doi={10.1080/07038992.2025.2597003}
}Morteza Khazaei Ph.D. Student, Applied Geomatics Centre d'applications et de recherches en télédétection (CARTEL) University of Sherbrooke Email: Morteza.Khazaei@usherbrooke.ca
Demattê, J. A. M., Fongaro, C. T., Rizzo, R., & Safanelli, J. L. (2018). Geospatial Soil Sensing System (GEOS3): A powerful data mining procedure to retrieve soil spectral reflectance from satellite images. Remote Sensing of Environment, 212, 161-175.
This code is provided for research and educational purposes.