Algoritmi di Sentinel-1

Sentinel-1 è una missione spaziale finanziata dall'Unione europea e realizzata dall'Agenzia spaziale europea (ESA) nell'ambito del programma Copernicus. Sentinel-1 raccoglie immagini radar ad apertura sintetica (SAR) in banda C con una serie di polarizzazioni e risoluzioni. Poiché i dati radar richiedono diversi algoritmi specializzati per ottenere immagini ortorettificate e calibrate, questo documento descrive la pre-elaborazione dei dati di Sentinel-1 in Earth Engine.

I dati di Sentinel-1 vengono raccolti con diverse configurazioni dello strumento, risoluzioni e combinazioni di bande durante le orbite ascendenti e discendenti. A causa di questa eterogeneità, in genere è necessario filtrare i dati in modo da ottenere un sottoinsieme omogeneo prima di iniziare l'elaborazione. Questa procedura è descritta di seguito nella sezione Metadati e filtri.

Metadati e filtri

Per creare un sottoinsieme omogeneo di dati di Sentinel-1, in genere è necessario filtrare la raccolta utilizzando le proprietà dei metadati. I campi dei metadati comuni utilizzati per il filtro includono le seguenti proprietà:

  1. transmitterReceiverPolarisation: ['VV'], ['HH'], ['VV', 'VH'] o ['HH', 'HV']
  2. instrumentMode: "IW" (Interferometric Wide Swath), "EW" (Extra Wide Swath) o "SM" (Strip Map). Per informazioni dettagliate, consulta questo documento di riferimento.
  3. orbitProperties_pass: "ASCENDING" o "DESCENDING"
  4. resolution_meters: 10, 25 o 40
  5. resolution: "M" (medio) o "H" (alto). Per informazioni dettagliate, consulta questo documento di riferimento.

Il seguente codice filtra la raccolta Sentinel-1 in base alle proprietà transmitterReceiverPolarisation, instrumentMode e orbitProperties_pass, quindi calcola i compositi per diverse combinazioni di osservazioni visualizzate nella mappa per dimostrare in che modo queste caratteristiche influiscono sui dati.

Editor di codice (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

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 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

Preelaborazione di Sentinel-1

Le immagini in 'COPERNICUS/S1_GRD' Sentinel-1 di Earth Engine ImageCollection sono costituite da scene GRD (Ground Range Detected) di livello 1 elaborate in funzione del coefficiente di backscatter (σ°) in decibel (dB). Il coefficiente di backscattering rappresenta l'area di backscattering del bersaglio (sezione trasversale del radar) per unità di area del suolo. Poiché può variare di diversi ordini di grandezza, viene convertito in dB come 10*log10σ°. Misura se il terreno irradiato disperde la radiazione a microonde incidente preferenzialmente lontano dal sensore SAR (dB < 0) o verso il sensore SAR (dB > 0). Questo comportamento di diffusione dipende dalle caratteristiche fisiche del terreno, in particolare dalla geometria degli elementi del terreno e dalle loro caratteristiche elettromagnetiche.

Earth Engine utilizza i seguenti passaggi di preelaborazione (come implementati dalla Sentinel-1 Toolbox) per dedurre il coefficiente di backscatter in ogni pixel:

  1. Applica file orbita
    • Aggiorna i metadati dell'orbita con un file dell'orbita restituito (o un file dell'orbita preciso se quello restituito non è disponibile).
  2. Rimozione del rumore del bordo GRD
    • Rimuove il rumore a bassa intensità e i dati non validi sui bordi della scena. (Aggiornamento del 12 gennaio 2018)
  3. Rimozione del rumore termico
    • Rimuove il rumore additivo nei sotto-passaggi per contribuire a ridurre le discontinuità tra i sotto-passaggi per le scene nelle modalità di acquisizione multi-passaggio. (questa operazione non può essere applicata alle immagini prodotte prima di luglio 2015)
  4. Applicazione dei valori di calibrazione radiometrica
    • Calcola l'intensità di backscatter utilizzando i parametri di calibrazione del sensore nei metadati GRD.
  5. Correzione del terreno (ortorettifica)
    • Converte i dati dalla geometria dell'intervallo di terra, che non tiene conto del terreno, in σ° utilizzando il DEM SRTM a 30 metri o il DEM ASTER per le latitudini elevate (superiori a 60° o inferiori a -60°).

Note sul set di dati

  • La funzionalità di appiattimento del terreno radiometrico non viene applicata a causa di artefatti sui pendii delle montagne.
  • Il coefficiente di backscatter senza unità viene convertito in dB come descritto sopra.
  • Al momento non è possibile importare i dati SLC di Sentinel-1, in quanto Earth Engine non supporta le immagini con valori complessi a causa dell'impossibilità di calcolarne la media durante la piramidizzazione senza perdere informazioni sulla fase.
  • Gli asset SM GRD non vengono importati perché la funzione computeNoiseScalingFactor() nell'operazione di rimozione del rumore del bordo nella cassetta degli attrezzi S1 non supporta la modalità SM.