Algoritmos de Sentinel-1

Sentinel-1 es una misión espacial financiada por la Unión Europea y llevada a cabo por la Agencia Espacial Europea (ESA) en el marco del programa Copernicus. Sentinel-1 recopila imágenes de radar de apertura sintética (SAR) en banda C con una variedad de polarizaciones y resoluciones. Dado que los datos de radar requieren varios algoritmos especializados para obtener imágenes ortorectificadas y calibradas, en este documento se describe el procesamiento previo de los datos de Sentinel-1 en Earth Engine.

Los datos de Sentinel-1 se recopilan con varias configuraciones de instrumentos, resoluciones y combinaciones de bandas diferentes durante las órbitas ascendentes y descendentes. Debido a esta heterogeneidad, por lo general, es necesario filtrar los datos hasta obtener un subconjunto homogéneo antes de comenzar el procesamiento. Este proceso se describe a continuación en la sección Metadatos y filtrado.

Metadatos y filtrado

Para crear un subconjunto homogéneo de datos de Sentinel-1, por lo general, será necesario filtrar la colección con propiedades de metadatos. Los campos de metadatos comunes que se usan para filtrar incluyen las siguientes propiedades:

  1. transmitterReceiverPolarisation: ['VV'], ['HH'], ['VV', 'VH'] o ['HH', 'HV']
  2. instrumentMode: "IW" (banda ancha interferométrica), "EW" (banda ancha extra) o "SM" (mapa de franja). Consulta esta referencia para obtener más detalles.
  3. orbitProperties_pass: "ASCENDING" o "DESCENDING"
  4. resolution_meters: 10, 25 o 40
  5. resolution: "M" (medio) o "H" (alto). Consulta esta referencia para obtener más detalles.

El siguiente código filtra la colección de Sentinel-1 por las propiedades transmitterReceiverPolarisation, instrumentMode y orbitProperties_pass y, luego, calcula compuestos para varias combinaciones de observaciones que se muestran en el mapa para demostrar cómo estas características afectan los datos.

Editor de código (JavaScript)

// Load the Sentinel-1 ImageCollection, filter to Jun-Sep 2020 observations.
var sentinel1 = ee.ImageCollection('COPERNICUS/S1_GRD')
                    .filterDate('2020-06-01', '2020-10-01');

// Filter the Sentinel-1 collection by metadata properties.
var vvVhIw = sentinel1
  // Filter to get images with VV and VH dual polarization.
  .filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VV'))
  .filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VH'))
  // Filter to get images collected in interferometric wide swath mode.
  .filter(ee.Filter.eq('instrumentMode', 'IW'));

// Separate ascending and descending orbit images into distinct collections.
var vvVhIwAsc = vvVhIw.filter(
  ee.Filter.eq('orbitProperties_pass', 'ASCENDING'));
var vvVhIwDesc = vvVhIw.filter(
  ee.Filter.eq('orbitProperties_pass', 'DESCENDING'));

// Calculate temporal means for various observations to use for visualization.
// Mean VH ascending.
var vhIwAscMean = vvVhIwAsc.select('VH').mean();
// Mean VH descending.
var vhIwDescMean = vvVhIwDesc.select('VH').mean();
// Mean VV for combined ascending and descending image collections.
var vvIwAscDescMean = vvVhIwAsc.merge(vvVhIwDesc).select('VV').mean();
// Mean VH for combined ascending and descending image collections.
var vhIwAscDescMean = vvVhIwAsc.merge(vvVhIwDesc).select('VH').mean();

// Display the temporal means for various observations, compare them.
Map.addLayer(vvIwAscDescMean, {min: -12, max: -4}, 'vvIwAscDescMean');
Map.addLayer(vhIwAscDescMean, {min: -18, max: -10}, 'vhIwAscDescMean');
Map.addLayer(vhIwAscMean, {min: -18, max: -10}, 'vhIwAscMean');
Map.addLayer(vhIwDescMean, {min: -18, max: -10}, 'vhIwDescMean');
Map.setCenter(-73.8719, 4.512, 9);  // Bogota, Colombia

Configuración de Python

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

Colab (Python)

# Load the Sentinel-1 ImageCollection, filter to Jun-Sep 2020 observations.
sentinel_1 = ee.ImageCollection('COPERNICUS/S1_GRD').filterDate(
    '2020-06-01', '2020-10-01'
)

# Filter the Sentinel-1 collection by metadata properties.
vv_vh_iw = (
    sentinel_1.filter(
        # Filter to get images with VV and VH dual polarization.
        ee.Filter.listContains('transmitterReceiverPolarisation', 'VV')
    )
    .filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VH'))
    .filter(
        # Filter to get images collected in interferometric wide swath mode.
        ee.Filter.eq('instrumentMode', 'IW')
    )
)

# Separate ascending and descending orbit images into distinct collections.
vv_vh_iw_asc = vv_vh_iw.filter(
    ee.Filter.eq('orbitProperties_pass', 'ASCENDING')
)
vv_vh_iw_desc = vv_vh_iw.filter(
    ee.Filter.eq('orbitProperties_pass', 'DESCENDING')
)

# Calculate temporal means for various observations to use for visualization.
# Mean VH ascending.
vh_iw_asc_mean = vv_vh_iw_asc.select('VH').mean()
# Mean VH descending.
vh_iw_desc_mean = vv_vh_iw_desc.select('VH').mean()
# Mean VV for combined ascending and descending image collections.
vv_iw_asc_desc_mean = vv_vh_iw_asc.merge(vv_vh_iw_desc).select('VV').mean()
# Mean VH for combined ascending and descending image collections.
vh_iw_asc_desc_mean = vv_vh_iw_asc.merge(vv_vh_iw_desc).select('VH').mean()

# Display the temporal means for various observations, compare them.
m = geemap.Map()
m.add_layer(vv_iw_asc_desc_mean, {'min': -12, 'max': -4}, 'vv_iw_asc_desc_mean')
m.add_layer(
    vh_iw_asc_desc_mean, {'min': -18, 'max': -10}, 'vh_iw_asc_desc_mean'
)
m.add_layer(vh_iw_asc_mean, {'min': -18, 'max': -10}, 'vh_iw_asc_mean')
m.add_layer(vh_iw_desc_mean, {'min': -18, 'max': -10}, 'vh_iw_desc_mean')
m.set_center(-73.8719, 4.512, 9)  # Bogota, Colombia
m

Procesamiento previo de Sentinel-1

Las imágenes de la 'COPERNICUS/S1_GRD' Sentinel-1 de Earth EngineImageCollection consisten en escenas de rango terrestre detectado (GRD) de nivel 1 procesadas para el coeficiente de retrodispersión (σ°) en decibeles (dB). El coeficiente de retrodispersión representa el área de retrodispersión objetivo (sección transversal del radar) por unidad de área terrestre. Debido a que puede variar en varios órdenes de magnitud, se convierte a dB como 10*log10σ°. Mide si el terreno irradiado dispersa la radiación de microondas incidente de forma preferencial lejos del sensor de SAR (dB < 0) o hacia el sensor de SAR (dB > 0). Este comportamiento de dispersión depende de las características físicas del terreno, principalmente de la geometría de los elementos del terreno y sus características electromagnéticas.

Earth Engine usa los siguientes pasos de procesamiento previo (como los implementa la Toolbox de Sentinel-1) para derivar el coeficiente de retrodispersión en cada píxel:

  1. Aplicar archivo de órbita
    • Actualiza los metadatos de la órbita con un archivo de órbita restituido (o un archivo de órbita preciso si el restituido no está disponible).
  2. Eliminación de ruido de los bordes de la GRD
    • Quita el ruido de baja intensidad y los datos no válidos en los bordes de la escena. (A partir del 12 de enero de 2018)
  3. Eliminación de ruido térmico
    • Quita el ruido aditivo en las subbandas para ayudar a reducir las discontinuidades entre las subbandas de las escenas en los modos de adquisición de varias subbandas. (Esta operación no se puede aplicar a las imágenes producidas antes de julio de 2015).
  4. Aplicación de valores de calibración radiométrica
    • Calcula la intensidad de la retrodispersión con los parámetros de calibración del sensor en los metadatos de GRD.
  5. Corrección del terreno (ortorectificación)
    • Convierte los datos de la geometría de rango terrestre, que no tiene en cuenta el terreno, a σ° con el DEM de 30 metros de SRTM o el DEM de ASTER para latitudes altas (mayores que 60° o menores que -60°).

Notas del conjunto de datos

  • No se aplica la función de aplanamiento radiométrico del terreno debido a artefactos en las laderas de las montañas.
  • El coeficiente de retrodispersión sin unidades se convierte a dB, como se describió anteriormente.
  • Actualmente, no se pueden transferir los datos de SLC de Sentinel-1, ya que Earth Engine no admite imágenes con valores complejos debido a la incapacidad de promediarlos durante la piramidación sin perder información de fase.
  • Los recursos de SM de GRD no se transfieren porque la función computeNoiseScalingFactor() en la operación de eliminación de ruido de borde en la caja de herramientas de S1 no admite el modo SM.