Reducciones de ImageCollection

Considera el ejemplo de la necesidad de tomar la mediana de una serie temporal de imágenes representadas por un ImageCollection. Para reducir un ImageCollection, usa imageCollection.reduce(). Esto reduce la colección de imágenes a una imagen individual, como se ilustra en la Figura 1. Específicamente, el resultado se calcula por píxel, de modo que cada píxel del resultado se compone del valor medio de todas las imágenes de la colección en esa ubicación. Para obtener otras estadísticas, como la media, la suma, la variación, un percentil arbitrario, etc., se debe seleccionar y aplicar el reductor adecuado. (consulta la pestaña Docs en el editor de código para obtener una lista de todos los reductores disponibles actualmente). Para estadísticas básicas, como mínimo, máximo, promedio, etc., ImageCollection tiene métodos de acceso directo, como min(), max(), mean(), etc. Funcionan de la misma manera que llamar a reduce(), excepto que los nombres de banda resultantes no tendrán el nombre del reductor agregado.

imageCollection.reduce diagram
Figura 1: Ilustración de un ee.Reducer aplicado a una ImageCollection.

Para ver un ejemplo de cómo reducir un ImageCollection, considera una colección de imágenes de Landsat 5, filtradas por ruta y fila. En el siguiente código, se usa reduce() para reducir la colección a un Image (aquí se usa un reductor de mediana solo a modo de ejemplo):

// 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);

Consulta la página Entorno de Python para obtener información sobre la API de Python y el uso de geemap para el desarrollo interactivo.

import ee
import geemap.core as geemap
# 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

Esto muestra un Image de varias bandas, cada píxel del cual es la mediana de todos los píxeles sin enmascarar en el ImageCollection en esa ubicación de píxeles. Específicamente, el reductor se repitió para cada banda de las imágenes de entrada, lo que significa que la mediana se calcula de forma independiente en cada banda. Ten en cuenta que los nombres de las bandas tienen el nombre del reductor agregado: 'B1_median', 'B2_median', etcétera. El resultado debería verse como la Figura 2.

Para obtener más información sobre cómo reducir las colecciones de imágenes, consulta la sección de reducción de los documentos de ImageCollection. En particular, ten en cuenta que las imágenes producidas por reducir un ImageCollection no tienen proyección. Esto significa que debes establecer explícitamente la escala en cualquier cálculo que involucre imágenes computadas que se generen con una reducción de ImageCollection.

Salida de ImageCollection.reduce
Figura 2: Un compuesto de colores falsos de la mediana de las escenas de Landsat 5 en 2008.