Skip to content

Agribound

Unified agricultural field boundary delineation from satellite imagery using geospatial foundation models, pre-trained segmentation, and embeddings.

Release PyPI version CI Documentation GEE License Python 3.10+ DOI GitHub stars

Agribound provides a single interface to multiple delineation engines and satellite sources, handling the full pipeline from satellite composite generation through post-processing and export. It supports Google Earth Engine-based imagery (Landsat, Sentinel-2, HLS, NAIP, SPOT), local GeoTIFFs, and pre-computed embedding datasets (Google Satellite Embedding, TESSERA).

The pipeline runs: composite buildingoptional fine-tuningdelineation enginepost-processing (smooth, simplify, filter) → LULC crop filteringexport. For ensembles, SAM2 boundary refinement is applied per source for pixel-accurate boundaries.

Automatic LULC Crop Filtering

Unlike other field boundary packages that detect all visual boundaries (including roads, water, forests, and buildings), agribound automatically removes non-agricultural polygons using land-use/land-cover data. This is enabled by default and requires no user configuration.

The best available LULC dataset is selected automatically based on your study area:

  • US: USGS Annual NLCD (1985–2024, 30 m) — classes 81/82 (Pasture, Cultivated Crops)
  • Global (≥2015): Google Dynamic World (10 m, nearest year) — crop probability band
  • Global, pre-2015: Copernicus C3S Land Cover (1992–2022, 300 m) — cropland classes

Disable with lulc_filter=False for local files without GEE access or unsupervised embedding workflows.

Example Results

Supervised: DINOv3 + SAM2 on NAIP (Eastern Lea County, New Mexico, USA) — Fine-tuned on NMOSE reference boundaries, LULC-filtered (NLCD), SAM2-refined on 1 m NAIP. Blue = predicted, yellow = reference. Note: Fields in Texas bordering New Mexico are also present.

DINOv3 + SAM2 on NAIP

Unsupervised: TESSERA + LULC Filter + SAM2 (Pampas, Argentina) — No training, no reference data. TESSERA embedding clustering + LULC crop filter (Dynamic World) + SAM2 on Sentinel-2.

TESSERA + LULC + SAM2

See the Gallery for results across all regions and engines.

Note: The satellite basemap shown in these screenshots may not correspond to the same acquisition date as the imagery used for delineation.


Quick Install

pip install agribound

For GPU-accelerated engines and GEE support, install optional extras:

pip install agribound[gee,delineate-anything]

See the Installation guide for all available extras.


Quickstart

import agribound

gdf = agribound.delineate(
    study_area="area.geojson",
    source="sentinel2",
    year=2024,
    engine="delineate-anything",
    gee_project="my-gee-project",
)

The returned GeoDataFrame contains field boundary polygons with area, perimeter, and provenance metadata. See the Quickstart tutorial for a complete walkthrough.


Key Sections

Section Description
Installation Install agribound and optional dependencies
Quickstart 5-minute tutorial covering Python and CLI usage
Satellite Sources Available imagery sources and compositing options
Engines Comparison of all seven delineation engines
Configuration Full reference for AgriboundConfig
CLI Usage Command-line interface reference
API Reference Python API documentation
Gallery Visual results across 9 regions, 5 satellites, and all engines
Contributing Developer guide for adding engines and sources
Citation & References How to cite agribound, funding sources, and disclaimer

License

Agribound is released under the Apache 2.0 License.