Algorytmy Sentinel-1

Sentinel-1 to misja kosmiczna finansowana przez Unię Europejską i realizowana przez Europejską Agencję Kosmiczną (ESA) w ramach programu Copernicus. Sentinel-1 zbiera obrazy z radaru z syntetyczną przysłoną (SAR) w paśmie C w różnych polaryzacjach i rozdzielczościach. Ponieważ dane radarowe wymagają kilku specjalistycznych algorytmów do uzyskania skanów ortorektyfikowanych, w tym dokumencie opisano wstępną obróbkę danych Sentinel-1 w Earth Engine.

Dane Sentinel-1 są zbierane przy użyciu różnych konfiguracji instrumentu, rozdzielczości i kombinacji pasm podczas orbit wznoszącej i opadającej. Z powodu tej różnorodności zwykle przed rozpoczęciem przetwarzania trzeba odfiltrować dane do jednorodnej podgrupy. Ten proces jest opisany w sekcji Metadane i filtrowanie.

Metadane i filtrowanie

Aby utworzyć jednorodny podzbiór danych Sentinel-1, zazwyczaj trzeba przefiltrować zbiór za pomocą właściwości metadanych. Typowe pola metadanych używane do filtrowania to:

  1. transmitterReceiverPolarisation: ['VV'], ['HH'], ['VV', 'VH'] lub ['HH', 'HV']
  2. instrumentMode: „IW” (interferometrie szerokiego pasma), „EW” (bardzo szerokiego pasma) lub „SM” (mapa pasma). Więcej informacji znajdziesz w tym dokumencie.
  3. orbitProperties_pass: „ASCENDING” (rosnąco) lub „DESCENDING” (malejąco).
  4. resolution_meters: 10, 25 lub 40
  5. resolution: „M” (średnia) lub „H” (wysoka). Więcej informacji znajdziesz w tym dokumencie.

Podany niżej kod filtruje zbiór Sentinel-1 według właściwości transmitterReceiverPolarisation, instrumentMode i orbitProperties_pass, a następnie oblicza kompozycje dla kilku kombinacji obserwacji wyświetlanych na mapie, aby pokazać, jak te cechy wpływają na dane.

Edytor kodu (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

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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

Przetwarzanie wstępne Sentinel-1

Zdjęcia w Earth Engine 'COPERNICUS/S1_GRD' Sentinel-1 ImageCollectionskładają się z ujęć z zakresu naziemnego (GRD) poziomu 1 przetworzonych na współczynnik rozproszonego odbicia (σ°) w decybelach (dB). Współczynnik rozproszonego odbicia odpowiada obszarowi rozproszonego odbicia celu (poprzecznemu przekroju radaru) na jednostkę powierzchni gruntu. Ponieważ może się ona różnić o kilka rzędów wielkości, jest ona przeliczana na dB jako 10*log10σ°. Określa ona, czy rozproszony teren rozprasza padające promieniowanie mikrofalowe w kierunku z dala od czujnika SAR (dB < 0) czy w kierunku czujnika SAR (dB > 0). Zachowanie to zależy od cech fizycznych terenu, głównie geometrii elementów terenu i ich właściwości elektromagnetycznych.

Earth Engine stosuje następujące kroki wstępnej obróbki (zdefiniowane przez Sentinel-1 Toolbox) do wyprowadzenia współczynnika rozproszonego odbicia w poszczególnych pikselach:

  1. Stosowanie pliku orbit
    • Aktualizuje metadane orbity za pomocą zrekonstruowanego pliku orbity (lub dokładnego pliku orbity, jeśli zrekonstruowany plik jest niedostępny).
  2. GRD – usuwanie szumów na krawędziach
    • Usuwa szum o niskiej intensywności i nieprawidłowe dane na krawędziach sceny. (stan na 12 stycznia 2018 r.)
  3. Usuwanie szumów termicznych
    • Usuwa szum dodawany w subpasmach, aby zmniejszyć nieciągłości między subpasmami w przypadku scen w trybach wielopasmowych. (tej operacji nie można zastosować do obrazów utworzonych przed lipcem 2015 r.)
  4. Stosowanie wartości kalibracji radiometrycznej
    • Oblicza natężenie rozproszonego promieniowania za pomocą parametrów kalibracji czujnika w metadanych GRD.
  5. Korekta terenu (ortorectyfikacja)
    • Konwertuje dane z geometrii zasięgu naziemnego, która nie uwzględnia terenu, na σ° za pomocą DEM SRTM 30-metrowego lub DEM ASTER w przypadku wysokich szerokości geograficznych (większych niż 60° lub mniejszych niż -60°).

Notatki dotyczące zbioru danych

  • Nie stosuje się spłaszczenia terenu radiometrycznego z powodu artefaktów na zboczach górskich.
  • Bezwymiarowy współczynnik odbicia wstecznego jest konwertowany na dB w sposób opisany powyżej.
  • Dane SLC z Sentinel-1 nie mogą być obecnie przetwarzane, ponieważ Earth Engine nie obsługuje obrazów ze złożonymi wartościami z powodu braku możliwości ich uśredniania podczas tworzenia piramidy bez utraty informacji o fazie.
  • Zasoby GRD SM nie są przetwarzane, ponieważ funkcja computeNoiseScalingFactor() w operacji usuwania szumu na krawędzi w narzędziu S1 nie obsługuje trybu SM.