Colecciones de imágenes

Una colección de imágenes hace referencia a un conjunto de imágenes de Earth Engine. Por ejemplo, la colección de todas las imágenes de Landsat 8 es un ee.ImageCollection. Al igual que la imagen de SRTM con la que estuviste trabajando, las colecciones de imágenes también tienen un ID. Al igual que con las imágenes individuales, puedes descubrir el ID de una colección de imágenes buscando en el Data Catalog de Earth Engine desde el Code Editor y mirando la página de detalles del conjunto de datos. Por ejemplo, busca "landsat 8 toa" y haz clic en el primer resultado, que debería corresponder al conjunto de datos de reflectancia TOA de nivel 1 de la colección 1 de Landsat 8 del USGS. Importa ese conjunto de datos con el botón Import y cámbiale el nombre a l8, o copia el ID en el constructor de la colección de imágenes:

Editor de código (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

Cómo filtrar colecciones de imágenes

Cabe destacar que esta colección representa cada escena de Landsat 8 recopilada en todo el planeta. A menudo, es útil extraer una sola imagen o un subconjunto de imágenes para probar los algoritmos. La forma de limitar la colección por tiempo o espacio es filtrándola. Por ejemplo, para filtrar la colección por imágenes que cubren una ubicación determinada, primero define tu área de interés con un punto (o línea o polígono) usando las herramientas de dibujo de geometría. Desplázate hasta tu área de interés, coloca el cursor sobre Geometry Imports (si ya tienes una o más geometrías definidas) y haz clic en +new layer (si no tienes importaciones, ve al siguiente paso). Obtén la herramienta de dibujo de puntos () y crea un punto en tu área de interés. Asígnale el nombre point a la importación. Ahora, filtra la colección l8 para obtener solo las imágenes que se cruzan con el punto y, luego, agrega un segundo filtro para limitar la colección solo a las imágenes que se adquirieron en 2015:

Editor de código (JavaScript)

var spatialFiltered = l8.filterBounds(point);
print('spatialFiltered', spatialFiltered);

var temporalFiltered = spatialFiltered.filterDate('2015-01-01', '2015-12-31');
print('temporalFiltered', temporalFiltered);

Aquí, filterBounds() y filterDate() son métodos de acceso directo para el método filter() más general en las colecciones de imágenes, que toma un ee.Filter() como argumento. Explora la pestaña Docs del editor de código para obtener más información sobre estos métodos. El argumento para filterBounds() es el punto que digitalizaste y los argumentos para filterDate() son dos fechas, expresadas como cadenas.

Ten en cuenta que puedes print() las colecciones filtradas. No puedes imprimir más de 5,000 elementos a la vez, por lo que no podrías, por ejemplo, imprimir toda la colección l8. Después de ejecutar el método print(), puedes inspeccionar las colecciones impresas en la consola. Ten en cuenta que, cuando expandes el ImageCollection con el botón de expansión () y, luego, expandes la lista de features, verás una lista de imágenes, cada una de las cuales también se puede expandir e inspeccionar. Esta es una forma de descubrir el ID de una imagen individual. Otra forma más programática de obtener imágenes individuales para el análisis es ordenar la colección para obtener la imagen más reciente, más antigua o más óptima en relación con alguna propiedad de metadatos. Por ejemplo, si inspeccionas los objetos de imagen en las colecciones de imágenes impresas, es posible que hayas observado una propiedad de metadatos llamada CLOUD_COVER. Puedes usar esa propiedad para obtener la imagen con menos nubes de 2015 en tu área de interés:

Editor de código (JavaScript)

// This will sort from least to most cloudy.
var sorted = temporalFiltered.sort('CLOUD_COVER');

// Get the first (least cloudy) image.
var scene = sorted.first();

Ya tienes todo listo para mostrar la imagen.

Digresión: Cómo mostrar imágenes RGB

Cuando se agrega una imagen multibanda a un mapa, Earth Engine elige las primeras tres bandas de la imagen y las muestra en rojo, verde y azul de forma predeterminada, y las extiende según el tipo de datos, como se describió anteriormente. Por lo general, esto no funcionará. Por ejemplo, si agregas la imagen de Landsat (scene en el ejemplo anterior) al mapa, el resultado no será satisfactorio:

Editor de código (JavaScript)

Map.centerObject(scene, 9);
Map.addLayer(scene, {}, 'default RGB');

Ten en cuenta que, primero, el mapa se centra en la imagen con una escala de zoom de 9. Luego, la imagen se muestra con un objeto vacío ({}) para el parámetro visParams (consulta los documentos de Map.addLayer() para obtener más detalles). Como resultado, la imagen se muestra con la visualización predeterminada: las primeras tres bandas se asignan a R, G y B, respectivamente, y se estiran a [0, 1], ya que las bandas son del tipo de datos float. Esto significa que la banda de aerosol costero ('B1') se renderiza en rojo, la banda azul ('B2') se renderiza en verde y la banda verde ('B3') se renderiza en azul. Para renderizar la imagen como una composición de color verdadero, debes indicarle a Earth Engine que use las bandas de Landsat 8 "B4", "B3" y "B2" para R, G y B, respectivamente. Especifica qué bandas usar con la propiedad bands del objeto visParams. Obtén más información sobre las bandas de Landsat en esta referencia.

También debes proporcionar valores min y max adecuados para mostrar la reflectancia de los objetivos típicos de la superficie de la Tierra. Aunque se pueden usar listas para especificar diferentes valores para cada banda, aquí es suficiente especificar 0.3 como max y usar el valor predeterminado de cero para el parámetro min. Combina los parámetros de visualización en un objeto y muéstralos:

Editor de código (JavaScript)

var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};
Map.addLayer(scene, visParams, 'true-color composite');

El resultado debería ser similar al de la Figura 5. Ten en cuenta que este código asigna el objeto de los parámetros de visualización a una variable para un posible uso futuro. Como descubrirás pronto, ese objeto será útil cuando visualices colecciones de imágenes.

Tutorial_api_05_true_color.png
Figura 5: Imagen de reflectancia de TOA de Landsat 8 como una composición de color verdadero, estirada a [0, 0.3].

Intenta visualizar diferentes bandas. Otra combinación favorita es "B5", "B4" y "B3", que se denomina composición de color falso. Aquí se describen otras composiciones de falso color interesantes.

Como Earth Engine está diseñado para realizar análisis a gran escala, no te limitas a trabajar con una sola escena. Ahora es el momento de mostrar una colección completa como una composición RGB.

Cómo mostrar colecciones de imágenes

Agregar una colección de imágenes a un mapa es similar a agregar una imagen a un mapa. Por ejemplo, si usas imágenes de 2016 en la colección l8 y el objeto visParams definido anteriormente,

Editor de código (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var landsat2016 = l8.filterDate('2016-01-01', '2016-12-31');
Map.addLayer(landsat2016, visParams, 'l8 collection');

Ten en cuenta que ahora puedes alejar la imagen y ver un mosaico continuo donde se recopilan las imágenes de Landsat (es decir, sobre la tierra). Ten en cuenta que, cuando uses la pestaña Inspector y hagas clic en la imagen, verás una lista de valores de píxeles (o un gráfico) en la sección Pixels y una lista de objetos de imagen en la sección Objects del inspector.

Si alejaste la imagen lo suficiente, es probable que hayas notado algunas nubes en el mosaico. Cuando agregas un ImageCollection al mapa, se muestra como un compuesto de valores recientes, lo que significa que solo se muestran los píxeles más recientes (como llamar a mosaic() en la colección). Por eso, puedes ver discontinuidades entre las rutas que se adquirieron en diferentes momentos. Por eso, muchas áreas pueden aparecer nubladas. En la siguiente página, aprenderás a cambiar la forma en que se componen las imágenes para deshacerte de esas nubes molestas.