Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
[
{
"id": "delineate_anything",
"type": "openeo",
"description": "Delineate Anything field boundary detection benchmark over a small agricultural area in Ukraine.",
"backend": "openeofed.dataspace.copernicus.eu",
"process_graph": {
"delineate1": {
"process_id": "delineate_anything",
"namespace": "https://raw.githubusercontent.com/Lavreniuk/Delineate-Anything/1d3241be444f46e8c9fe4e8b8de2b2366d17be3b/openeo_udp/process_graph/delineate_anything_udp.json",
"arguments": {
"spatial_extent": {
"type": "Polygon",
"coordinates": [
[
[31.0, 49.0],
[31.1, 49.0],
[31.1, 49.1],
[31.0, 49.1],
[31.0, 49.0]
]
]
},
"temporal_extent": [
"2024-06-01",
"2024-09-30"
]
},
"result": true
}
}
}
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Description

Accurate delineation of agricultural field boundaries from satellite imagery is vital for land
management and crop monitoring. This service implements the **Delineate Anything** model — a
resolution-agnostic YOLOv11 instance-segmentation network trained on the large-scale FBIS-22M
dataset (672,909 satellite image patches from 0.25 m to 10 m, containing 22,926,427 instance masks).

The processing pipeline is encapsulated as an openEO User-Defined Process (UDP) with two
`apply_neighborhood` stages:

1. **BAP composite + ONNX inference** (512×512 px chunks with 128 px overlap):
- Generates a Best-Available Pixel (BAP) RGB composite from Sentinel-2, reusing the existing
APEx [BAP Composite](https://algorithm-catalogue.apex.esa.int/apps/bap_composite) service.
- Scales pixel values to [0, 1] via `linear_scale_range(0, 3000, 0, 1)`.
- Runs YOLOv11 ONNX inference producing per-pixel detection confidence and mask probability.

2. **Post-processing** (2000×2000 px chunks):
- Thresholds mask probabilities into a binary field mask.
- Labels connected components to produce individual field instances.
- Filters out small fields below a configurable minimum area.

## Inputs

- `spatial_extent`: GeoJSON geometry (Polygon) defining the area of interest.
- `temporal_extent`: ISO-8601 date range `[start, end]` for BAP input scenes.
- `processing_options` (optional): dictionary with keys `confidence_threshold`, `mask_threshold`,
`min_area_px`, `min_hole_area_px`.
- `max_cloud_cover` (optional): maximum cloud cover percentage for BAP input (default: 75).

## Outputs

A 3-band raster:

- `mask_probability` (float32) — per-pixel field boundary probability from the model.
- `binary_mask` (uint8) — thresholded binary field mask.
- `instances` (int32) — integer instance labels (0 = background, each field gets a unique ID).

# Examples

The model generalises across diverse resolutions (0.25 m–10 m) and geographic regions, including
zero-shot predictions on unseen areas with different climates, terrains, and agricultural practices.

# Known limitations

- The ONNX model is hosted on CloudFerro S3 as a `udf-dependency-archive`.

- Post-processing uses simple connected-component labelling. Fields spanning tile boundaries may
not be perfectly merged in all cases.
- The model is trained primarily on agricultural fields. Non-agricultural land parcels may produce
unreliable results.
- The AGPL-3.0 licence allows research use but restricts commercial use.

# References

- Paper: [Delineate Anything: Resolution-Agnostic Field Boundary Delineation](https://arxiv.org/abs/2504.02534)
- Source repository: https://github.com/Lavreniuk/Delineate-Anything
- Project page: https://lavreniuk.github.io/Delineate-Anything/
- Dataset: https://huggingface.co/datasets/MykolaL/FBIS-22M
- UDP definition: https://raw.githubusercontent.com/Lavreniuk/Delineate-Anything/1d3241be444f46e8c9fe4e8b8de2b2366d17be3b/openeo_udp/process_graph/delineate_anything_udp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
{
"id": "delineate_anything",
"type": "Feature",
"conformsTo": [
"http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core",
"https://apex.esa.int/core/openeo-udp"
],
"geometry": null,
"properties": {
"created": "2026-05-26T00:00:00Z",
"updated": "2026-05-26T00:00:00Z",
"type": "service",
"title": "Delineate Anything",
"description": "Resolution-agnostic agricultural field boundary delineation from satellite imagery. The service generates a Best-Available Pixel (BAP) RGB composite from Sentinel-2, runs YOLOv11 instance-segmentation ONNX inference on 512\u00d7512 px tiles, and post-processes the raw masks into individual field instances. Returns three bands: mask_probability (float), binary_mask (0/1), and instances (integer field labels).",
"cost_estimate": 0.05,
"cost_unit": "platform credits per km\u00b2",
"keywords": [
"Agriculture",
"Field Boundary Delineation",
"Instance Segmentation",
"Sentinel-2",
"YOLO"
],
"language": {
"code": "en-US",
"name": "English (United States)"
},
"languages": [
{
"code": "en-US",
"name": "English (United States)"
}
],
"contacts": [
{
"name": "Mykola Lavreniuk",
"organization": "European Space Agency",
"links": [
{
"href": "https://github.com/Lavreniuk/Delineate-Anything",
"title": "Delineate-Anything source repository",
"rel": "about",
"type": "text/html"
}
],
"emails": [],
"contactInstructions": "Contact via GitHub",
"roles": [
"principal investigator"
]
}
],
"themes": [
{
"concepts": [
{
"id": "Agriculture"
},
{
"id": "Land Use/Land Cover Classification"
}
],
"scheme": "https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/sciencekeywords"
}
],
"formats": [
{
"name": "GeoTIFF"
}
],
"license": "AGPL-3.0"
},
"linkTemplates": [],
"links": [
{
"rel": "application",
"type": "application/vnd.openeo+json;type=process",
"title": "openEO Process Definition",
"href": "https://raw.githubusercontent.com/Lavreniuk/Delineate-Anything/1d3241be444f46e8c9fe4e8b8de2b2366d17be3b/openeo_udp/process_graph/delineate_anything_udp.json"
},
{
"rel": "code",
"type": "text/html",
"title": "Git source repository",
"href": "https://github.com/Lavreniuk/Delineate-Anything"
},
{
"rel": "service",
"type": "application/json",
"title": "CDSE openEO federation",
"href": "https://openeofed.dataspace.copernicus.eu"
},
{
"rel": "platform",
"type": "application/json",
"title": "CDSE openEO federation",
"href": "../../../../platform_catalog/cdse_openeo_federation.json"
},
{
"rel": "provider",
"type": "application/json",
"title": "European Space Agency",
"href": "../../record.json"
},
{
"rel": "webapp",
"type": "text/html",
"title": "OpenEO Web Editor",
"href": "https://editor.openeo.org/?wizard=UDP&wizard~process=delineate_anything&wizard~processUrl=https://raw.githubusercontent.com/Lavreniuk/Delineate-Anything/1d3241be444f46e8c9fe4e8b8de2b2366d17be3b/openeo_udp/process_graph/delineate_anything_udp.json&server=https://openeofed.dataspace.copernicus.eu"
},
{
"rel": "about",
"type": "text/html",
"title": "Delineate Anything project page",
"href": "https://lavreniuk.github.io/Delineate-Anything/"
}
]
}
61 changes: 61 additions & 0 deletions algorithm_catalog/esa/record.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
{
"id": "esa",
"type": "Feature",
"conformsTo": [
"http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core"
],
"properties": {
"created": "2026-05-26T00:00:00Z",
"updated": "2026-05-26T00:00:00Z",
"type": "algorithm_provider",
"title": "European Space Agency",
"description": "The European Space Agency (ESA) is Europe's gateway to space. ESA contributes Earth observation algorithms and services leveraging satellite imagery for agricultural and environmental monitoring.",
"keywords": [],
"language": {
"code": "en-US",
"name": "English (United States)"
},
"languages": [
{
"code": "en-US",
"name": "English (United States)"
}
],
"contacts": [
{
"name": "Mykola Lavreniuk",
"organization": "European Space Agency",
"emails": [],
"roles": [
"principal investigator"
]
}
],
"themes": [],
"license": "other",
"acl": {
"admin": ["@esa.int"]
}
},
"linkTemplates": [],
"links": [
{
"rel": "website",
"type": "text/html",
"title": "ESA",
"href": "https://www.esa.int/"
},
{
"rel": "logo-light",
"type": "image/png",
"title": "Logo",
"href": "https://www.esa.int/var/esa/storage/images/esa_multimedia/images/2008/09/esa_logo1/9777051-3-eng-GB/ESA_logo1_pillars.jpg"
},
{
"rel": "logo-dark",
"type": "image/png",
"title": "Logo",
"href": "https://www.esa.int/var/esa/storage/images/esa_multimedia/images/2008/09/esa_logo1/9777051-3-eng-GB/ESA_logo1_pillars.jpg"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
{
"id": "solar_pv_detection",
"type": "Feature",
"conformsTo": [
"http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core",
"https://apex.esa.int/core/openeo-udp"
],
"geometry": null,
"properties": {
"created": "2026-05-21T00:00:00Z",
"updated": "2026-05-21T00:00:00Z",
"type": "service",
"title": "Solar PV detection",
"description": "Detection of solar photovoltaic (PV) installations from Sentinel-2 L1C imagery. The service performs a cloud-free SLIC-based temporal mosaic of Sentinel-2 L1C bands (using Sentinel-2 L2A SCL for cloud masking), normalizes the 13-band composite with training-aligned percentile statistics, and then runs ONNX U-Net inference (256x256 chunks) inside an openEO UDF. Returns a binary 'solar_pv' band and a 'solar_pv_probability' band.",
"cost_estimate": 0.1,
"cost_unit": "platform credits per km\u00b2",
"keywords": [
"Energy Production/Use",
"Solar Energy Production/Use",
"Sentinel-2"
],
"language": {
"code": "en-US",
"name": "English (United States)"
},
"languages": [
{
"code": "en-US",
"name": "English (United States)"
}
],
"contacts": [
{
"name": "Rui Song",
"organization": "University College London",
"links": [
{
"href": "https://github.com/ray-climate/solar_openEO",
"title": "solar_openEO source repository",
"rel": "about",
"type": "text/html"
}
],
"emails": [
{
"value": "rui.song@ucl.ac.uk"
}
],
"contactInstructions": "Contact via email",
"roles": [
"principal investigator"
]
}
],
"themes": [
{
"concepts": [
{
"id": "Sentinel-2 MSI"
},
{
"id": "SOLAR ENERGY PRODUCTION/USE"
}
],
"scheme": "https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/sciencekeywords"
}
],
"formats": [
{
"name": "GeoTIFF"
}
],
"license": "proprietary"
},
"linkTemplates": [],
"links": [
{
"rel": "application",
"type": "application/vnd.openeo+json;type=process",
"title": "openEO Process Definition",
"href": "https://raw.githubusercontent.com/ray-climate/solar_openEO/c4f1b0c7ba6ab9acf2b11cc999c05e6346b6bf21/openeo_udp/process_graph/solar_pv_detection_udp.json"
},
{
"rel": "code",
"type": "text/html",
"title": "Git source repository",
"href": "https://github.com/ray-climate/solar_openEO"
},
{
"rel": "service",
"type": "application/json",
"title": "CDSE openEO federation",
"href": "https://openeofed.dataspace.copernicus.eu"
},
{
"rel": "platform",
"type": "application/json",
"title": "CDSE openEO federation",
"href": "../../../../platform_catalog/cdse_openeo_federation.json"
},
{
"rel": "provider",
"type": "application/json",
"title": "University College London",
"href": "../../record.json"
},
{
"rel": "webapp",
"type": "text/html",
"title": "OpenEO Web Editor",
"href": "https://editor.openeo.org/?wizard=UDP&wizard~process=solar_pv_detection&wizard~processUrl=https://raw.githubusercontent.com/ray-climate/solar_openEO/c4f1b0c7ba6ab9acf2b11cc999c05e6346b6bf21/openeo_udp/process_graph/solar_pv_detection_udp.json&server=https://openeofed.dataspace.copernicus.eu"
},
{
"rel": "thumbnail",
"type": "image/png",
"title": "Thumbnail image",
"href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/algorithm_catalog/ucl/solar_pv_detection/records/thumbnail.png"
}
]
}
Loading
Loading