08

Thirty-seven vegetation indices, five years of Sentinel-2, and one question: which hectare is drifting?

AgriculturePipeline

A single NDVI image is a photograph. A grower needs the film: the same field, the same index, every clear day for years, so that "low" means low for this field in this month, not low compared to a neighbor with a different crop.

At a glance
Client
Turing Agro product line - deployed on sugarcane and grain properties for mill groups and an agriscience R&D team
Industry
Agriculture
Problem
Satellite data is free and abundant; turning it into a per-field alert that survives clouds, seasons and noise is not
Solution
A satellite analytics stack: temporally composited NDVI productivity zoning, non-uniform growth detection, nitrogen tracking from index history, moisture anomaly detection with historical baselines, disease-risk zoning from weather + indices, and a command-line pipeline that runs every product on any polygon from Google Earth Engine to AWS
Stack
Sentinel-2 · Google Earth Engine · 37+ vegetation indices (NDVI, GNDVI, NDRE, NDMI, NDWI, MSAVI, OSAVI, EVI, SAVI, CIRE, LAI…) · temporal compositing · Isolation Forest anomaly detection · weather history integration · AWS S3 storage with per-run metadata · CLI with interactive menus
Status
Products in production and in development (July 2025 roadmap)
The challenge

A single NDVI image is a photograph. A grower needs the film: the same field, the same index, every clear day for years, so that "low" means low for this field in this month, not low compared to a neighbor with a different crop. Building that film for one field is a notebook exercise. Building it for every field on a mill's 30,000 hectares, on demand, with weather attached, is infrastructure.

NDVI map of a triangular field.
Fig. 01. One field, one NDVI pass. Informative once; noise if compared with a single other date.
Productivity zones derived from time-averaged NDVI on the same field.
Fig. 02. The same field zoned by time-composited NDVI. Zones are stable across the season because they are built from the average, not the snapshot.
What they needed
  • Automatic productivity zoning from temporal NDVI composites
  • Detection of regions growing differently from the rest of the field, over time
  • A nitrogen proxy tracked historically, not spot-checked
  • Moisture anomalies that compare a field to its own history
  • Disease-risk windows derived from temperature and humidity, mapped to the field
  • All of it runnable on an arbitrary polygon, with results stored and reproducible
Goals & success metrics
  • Index library broad enough to cover vigor, chlorophyll, water and soil-corrected variants (37+ indices implemented)
  • Sentinel-2 history from January 2021 available per polygon
  • Weather history joined to every index series
  • One command to download, compute, and store results for a new location, with metadata and S3 paths logged
How we did it
  1. 01

    Index library

    The pipeline computes NDVI, GNDVI, BNDVI, OSAVI, MSAVI, MCARI1, EVI, NDRE, NDWI, NDMI, CIRE, TVI, ARI, PSRI, NPCR, RVI, DVI, GRVI, RDVI, LAI, ExG, MWI, NDbrSMI, SCCCI, SCCCI2, CIRE2, CIRE3, MSR, MSRRE (1–3), NDVIRE (1–3), NDWI2, SAVI, SIWSI (1–2) and others. Each product picks the subset that matches its physical question rather than defaulting to NDVI.

  2. 02

    Non-uniform growth

    Regions whose index trajectory diverges from the field's are flagged. The detector runs on the series, so it catches a patch that started fine and fell behind, which a single image cannot.

    Map of a field with non-uniform growth regions highlighted in orange.
    Fig. 03. Regions of non-uniform growth. Orange is where the trajectory diverged from the rest of the field.
    Time series of a vegetation index with anomalous growth points marked in red.
    Fig. 04. The series behind the map. Red points are dates where the index moved in a way the field's history does not explain.
  3. 03

    Nitrogen from index history

    Nitrogen status is estimated from chlorophyll-sensitive indices and tracked over time, per zone, so the output is a trend a fertilization plan can respond to.

    Strip of RGB satellite thumbnails of the field over time.
    Fig. 05. The field in RGB across the season, for reference.
    Strip of NDVI thumbnails across the same dates.
    Fig. 06. NDVI across the same dates.
    Strip of a chlorophyll-sensitive index across the same dates.
    Fig. 07. A chlorophyll-sensitive index across the same dates.
    Strip of a second nitrogen-related index across the same dates.
    Fig. 08. A second nitrogen-related index. Read as rows, the strips show where and when the field's nitrogen signal drifted.
  4. 04

    Moisture anomalies against the field's own baseline

    The moisture product compares current NDMI/NDWI-type indices to the field's history for the same period and flags zones with humidity below expected. It also tracks which zones have been anomalous repeatedly across months.

    Satellite view of a field with colored markers where moisture is historically below expected.
    Fig. 09. Zones with a history of below-expected moisture, marked on the field.
    Grid of monthly small maps showing anomalous-moisture zones per month.
    Fig. 10. Month by month: which zones were anomalous when. A zone that shows up every month is a drainage or soil issue, not weather.
    Three-panel: Sentinel-2 RGB, NDMI map, and automatic low-moisture zoning of a field.
    Fig. 11. RGB, NDMI, and automatic zoning of non-uniform moisture on a sugarcane field.
    Low-moisture detection on a multi-field image, panel A.
    Fig. 12. Low-moisture detection now running on images containing several fields at once. Each red patch is a flagged region inside a field boundary.
    Low-moisture detection on a multi-field image, panel B.
    Fig. 13. Same detector, adjacent tile.
    Low-moisture detection on a multi-field image, panel C.
    Fig. 14. Same detector, third tile.
    Low-moisture detection on a multi-field image, panel D.
    Fig. 15. Fourth tile. The first version shipped to main; classes were then refactored for the multi-field case.
  5. 05

    Disease-risk zones

    Weather history is joined to the index series. Periods where temperature and humidity favor pathogen development are identified, and the field zones with the weakest vigor in those windows are flagged as risk areas.

    Grid of index maps for a field across dates in a risk window.
    Fig. 16. NDVI and NDRE for the field across a window (16 Feb – 18 Mar 2022) where temperature and humidity favored disease.
    Field map with disease-risk zones outlined in orange.
    Fig. 17. The output: outlined zones to scout first, given the weather that just happened.
  6. 06

    The pipeline that runs it

    All products run from one command-line tool with interactive menus, built as the simplest way to test scalability and as a demo surface for prospecting meetings. It selects a location, pulls Sentinel-2 from January 2021 onward through Google Earth Engine, stores rasters and metadata on AWS, and exposes historical index analysis, weather history, and each detector.

    Terminal menu of the satellite products CLI.
    Fig. 18. The CLI: every product is a menu item.
    Location selection step with a map preview and coordinate input.
    Fig. 19. Select a location: a polygon or coordinates, previewed on a map before anything downloads.
    Download step showing Sentinel-2 tiles and band previews from 2021 to 2026.
    Fig. 20. Sentinel-2 history downloaded for the polygon, with band previews.
    Metadata panel with download parameters and AWS S3 paths.
    Fig. 21. Every run logs its parameters and its S3 path. Reproducible by construction.
    Historical index analysis panel with index thumbnails.
    Fig. 22. Historical index analysis: choose an index, see its thumbnails over time.
    Line chart of an index over five years from the CLI.
    Fig. 23. The same index as a series. This is the input to every detector above.
    Weather data menu in the CLI.
    Fig. 24. Weather data for the polygon, pulled alongside the imagery.
    Weather history dashboard with precipitation, temperature and humidity.
    Fig. 25. Precipitation, evapotranspiration, hourly temperature and humidity: the covariates for disease risk and moisture baselines.
    Moisture anomaly detector panel in the CLI.
    Fig. 26. The low-moisture anomaly detector running from the CLI on a chosen date.
    Satellite image of a property with a center pivot and flagged moisture-anomaly regions.
    Fig. 27. Output on a property with a center pivot. The anomaly follows the pivot's coverage, which is exactly what it should do.
  7. 07

    On the roadmap

    Delineate-Anything field segmentation (replacing the earlier cultivation-plot detector), disease-risk areas, crop variation analysis, best-harvest-time detection, historical harvest dates, sugarcane health analysis, a yield estimator, and temporal-series preprocessing. Each ships as one more menu item in the same pipeline.

What made it work
  • Temporal compositing first: every product compares a field with its own history
  • A broad index library, chosen per physical question instead of defaulting to NDVI
  • Weather joined at the source, so risk products are not a second system
  • One CLI that doubles as scalability test and sales demo, with every run stored on S3 with metadata
FAQ

Still have a question?

Ask us directly. A person reads it and gets back to you quickly.

Contact us