Sentinel-1-Algorithmen

Sentinel-1 ist eine Weltraummission, die von der Europäischen Union finanziert und von der Europäischen Weltraumorganisation (ESA) im Rahmen des Copernicus-Programms durchgeführt wird. Sentinel-1 erfasst C-Band-SAR-Bilder (Synthetic Aperture Radar) mit verschiedenen Polarisationen und Auflösungen. Da für Radardaten mehrere spezielle Algorithmen erforderlich sind, um kalibrierte, orthorektifizierende Bilder zu erhalten, wird in diesem Dokument die Vorverarbeitung von Sentinel-1-Daten in Earth Engine beschrieben.

Sentinel-1-Daten werden mit mehreren verschiedenen Instrumentkonfigurationen, Auflösungen und Bandkombinationen sowohl bei auf- als auch bei absteigenden Umläufen erfasst. Aufgrund dieser Heterogenität ist es in der Regel erforderlich, die Daten vor Beginn der Verarbeitung auf eine homogene Teilmenge zu filtern. Dieser Vorgang wird unten im Abschnitt Metadaten und Filterung beschrieben.

Metadaten und Filterung

Um eine homogene Teilmenge der Sentinel-1-Daten zu erstellen, ist es in der Regel erforderlich, die Sammlung mithilfe von Metadateneigenschaften zu filtern. Zu den gängigen Metadatenfeldern, die für das Filtern verwendet werden, gehören:

  1. transmitterReceiverPolarisation: ['VV'], ['HH'], ['VV', 'VH'] oder ['HH', 'HV']
  2. instrumentMode: „IW“ (Interferometric Wide Swath), „EW“ (Extra Wide Swath) oder „SM“ (Strip Map). Weitere Informationen finden Sie in dieser Referenz.
  3. orbitProperties_pass: „ASCENDING“ oder „DESCENDING“
  4. resolution_meters: 10, 25 oder 40
  5. resolution: „M“ (mittel) oder „H“ (hoch). Weitere Informationen finden Sie in dieser Referenz.

Im folgenden Code wird die Sentinel-1-Sammlung nach den Eigenschaften transmitterReceiverPolarisation, instrumentMode und orbitProperties_pass gefiltert. Anschließend werden Composites für mehrere Kombinationen von Beobachtungen berechnet, die auf der Karte angezeigt werden, um zu veranschaulichen, wie sich diese Eigenschaften auf die Daten auswirken.

Code-Editor (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

Python einrichten

Auf der Seite Python-Umgebung finden Sie Informationen zur Python API und zur Verwendung von geemap für die interaktive Entwicklung.

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

Vorverarbeitung von Sentinel-1-Daten

Die Bilder in der Earth Engine-Sammlung 'COPERNICUS/S1_GRD'Sentinel-1ImageCollection bestehen aus Level-1-GRD-Szenen (Ground Range Detected), die zum Rückstreukoeffizienten (σ°) in Dezibel (dB) verarbeitet wurden. Der Rückstreukoeffizient gibt die Rückstreufläche des Ziels (Radarquerschnitt) pro Bodenfläche an. Da sie um mehrere Größenordnungen variieren kann, wird sie in dB als 10*log10σ° umgewandelt. Sie gibt an, ob das abgestrahlte Gelände die einfallende Mikrowellenstrahlung bevorzugt vom SAR-Sensor weg (dB < 0) oder zum SAR-Sensor hin (dB > 0) streut. Dieses Streuungsverhalten hängt von den physikalischen Eigenschaften des Geländes ab, vor allem von der Geometrie der Geländeelemente und ihren elektromagnetischen Eigenschaften.

In Earth Engine werden die folgenden Schritte zur Vorverarbeitung (wie in der Sentinel-1 Toolbox implementiert) verwendet, um den Rückstreukoeffizienten in jedem Pixel abzuleiten:

  1. Orbitdatei anwenden
    • Die Orbit-Metadaten werden mit einer rekonstruierten Orbitdatei aktualisiert (oder mit einer genauen Orbitdatei, falls die rekonstruierte nicht verfügbar ist).
  2. Entfernen von Rauschen an GRD-Rändern
    • Entfernt Rauschen mit geringer Intensität und ungültige Daten an den Rändern der Szene. (Stand: 12. Januar 2018)
  3. Entfernen von thermischem Rauschen
    • Entfernt additiven Rauschen in Teilstreifen, um Brüche zwischen Teilstreifen für Szenen in Aufnahmemodi mit mehreren Streifen zu reduzieren. (Dieser Vorgang kann nicht auf Bilder angewendet werden, die vor Juli 2015 aufgenommen wurden.)
  4. Anwendung von radiometrischen Kalibrierungswerten
    • Die Rückstreuungsintensität wird anhand der Sensorkalibrierungsparameter in den GRD-Metadaten berechnet.
  5. Geländekorrektur (Orthorektifizierung)
    • Wandelt Daten aus der Geometrie der Bodenreichweite, bei der das Gelände nicht berücksichtigt wird, in σ° um. Dazu wird der SRTM-30-Meter-DEM oder der ASTER-DEM für hohe Breitengrade (über 60° oder unter −60°) verwendet.

Notizen zum Datensatz

  • Die radiometrische Geländeflachung wird aufgrund von Artefakten an Berghängen nicht angewendet.
  • Der dimensionslose Rückstreukoeffizient wird wie oben beschrieben in dB umgewandelt.
  • Sentinel-1-SLC-Daten können derzeit nicht aufgenommen werden, da Earth Engine keine Bilder mit komplexen Werten unterstützt. Das liegt daran, dass sie beim Pyramidisieren nicht ohne Verlust von Phaseninformationen gemittelt werden können.
  • GRD-SM-Assets werden nicht aufgenommen, da die computeNoiseScalingFactor()-Funktion im Vorgang zum Entfernen von Randrauschen in der S1-Toolbox den SM-Modus nicht unterstützt.