Riduzioni di ImageCollection

Prendiamo ad esempio la necessità di calcolare la mediana su una serie temporale di immagini rappresentate da un ImageCollection. Per ridurre un ImageCollection, utilizza imageCollection.reduce(). In questo modo, la raccolta di immagini viene ridotta a una singola immagine, come illustrato nella Figura 1. Nello specifico, l'output viene calcolato per pixel, in modo che ogni pixel dell'output sia composto dal valore mediano di tutte le immagini della raccolta in quella posizione. Per ottenere altre statistiche, come media, somma, varianza, un percentile arbitrario e così via, è necessario selezionare e applicare il riduttore appropriato. (consulta la scheda Documenti nell'editor di codice per un elenco di tutti i riduttori attualmente disponibili). Per statistiche di base come min, max, media e così via, ImageCollection ha metodi di scorciatoia come min(), max(), mean() e così via. Funzionano esattamente come l'istruzione reduce(), tranne per il fatto che ai nomi delle bande risultanti non viene aggiunto il nome del riduttore.

Diagramma di imageCollection.reduce
Figura 1. Illustrazione di un ee.Reducer applicato a una raccolta di immagini.

Per un esempio di riduzione di un ImageCollection, prendi in considerazione una raccolta di immagini Landsat 5, filtrate per percorso e riga. Il seguente codice utilizza reduce() per ridurre la raccolta a un Image (qui viene utilizzato un riduttore mediano solo a scopo illustrativo):

Editor di codice (JavaScript)

// Load an image collection, filtered so it's not too much data.
var collection = ee.ImageCollection('LANDSAT/LT05/C02/T1')
  .filterDate('2008-01-01', '2008-12-31')
  .filter(ee.Filter.eq('WRS_PATH', 44))
  .filter(ee.Filter.eq('WRS_ROW', 34));

// Compute the median in each band, each pixel.
// Band names are B1_median, B2_median, etc.
var median = collection.reduce(ee.Reducer.median());

// The output is an Image.  Add it to the map.
var vis_param = {bands: ['B4_median', 'B3_median', 'B2_median'], gamma: 1.6};
Map.setCenter(-122.3355, 37.7924, 9);
Map.addLayer(median, vis_param);

Configurazione di Python

Per informazioni sull'API Python e sull'utilizzo di geemap per lo sviluppo interattivo, consulta la pagina Ambiente Python.

import ee
import geemap.core as geemap

Colab (Python)

# Load an image collection, filtered so it's not too much data.
collection = (
    ee.ImageCollection('LANDSAT/LT05/C02/T1')
    .filterDate('2008-01-01', '2008-12-31')
    .filter(ee.Filter.eq('WRS_PATH', 44))
    .filter(ee.Filter.eq('WRS_ROW', 34))
)

# Compute the median in each band, each pixel.
# Band names are B1_median, B2_median, etc.
median = collection.reduce(ee.Reducer.median())

# The output is an Image.  Add it to the map.
vis_param = {'bands': ['B4_median', 'B3_median', 'B2_median'], 'gamma': 1.6}
m = geemap.Map()
m.set_center(-122.3355, 37.7924, 9)
m.add_layer(median, vis_param)
m

Viene restituito un Image multibanda, ogni pixel del quale è la mediana di tutti i pixel non mascherati nell'ImageCollection in quella posizione del pixel. Nello specifico, il riduttore è stato ripetuto per ogni banda delle immagini di input, il che significa che la mediana viene calcolata in modo indipendente in ogni banda. Tieni presente che ai nomi delle bande è stato aggiunto il nome del riduttore: 'B1_median', 'B2_median' e così via. L'output dovrebbe avere un aspetto simile a quello della Figura 2.

Per saperne di più sulla riduzione delle raccolte di immagini, consulta la sezione relativa alla riduzione della documentazione di ImageCollection. In particolare, tieni presente che le immagini prodotte riducendo un ImageCollection non hanno proiezione. Ciò significa che devi impostare esplicitamente la scala su tutti i calcoli che richiedono l'output di immagini calcolate mediante una riduzione di ImageCollection.

Output di ImageCollection.reduce
Figura 2. Un'immagine composita a falsi colori della mediana delle scene di Landsat 5 nel 2008.