Algoritma Sentinel-1

Sentinel-1 adalah misi luar angkasa yang didanai oleh Uni Eropa dan dijalankan oleh European Space Agency (ESA) dalam Program Copernicus. Sentinel-1 mengumpulkan citra radar (SAR) aperture sintetis C-band dengan berbagai polarisasi dan resolusi. Karena data radar memerlukan beberapa algoritma khusus untuk mendapatkan citra ortorektifikasi yang dikalibrasi, dokumen ini menjelaskan pra-pemrosesan data Sentinel-1 di Earth Engine.

Data Sentinel-1 dikumpulkan dengan beberapa konfigurasi instrumen, resolusi, kombinasi band yang berbeda selama orbit naik dan turun. Karena heterogenitas ini, biasanya perlu memfilter data ke subset homogen sebelum memulai pemrosesan. Proses ini diuraikan di bawah pada bagian Metadata dan Pemfilteran.

Metadata dan Pemfilteran

Untuk membuat subset data Sentinel-1 yang homogen, biasanya Anda perlu memfilter koleksi menggunakan properti metadata. Kolom metadata umum yang digunakan untuk pemfilteran mencakup properti berikut:

  1. transmitterReceiverPolarisation: ['VV'], ['HH'], ['VV', 'VH'], atau ['HH', 'HV']
  2. instrumentMode: 'IW' (Interferometric Wide Swath), 'EW' (Extra Wide Swath), atau 'SM' (Strip Map). Lihat referensi ini untuk mengetahui detailnya.
  3. orbitProperties_pass: 'ASCENDING' atau 'DESCENDING'
  4. resolution_meters: 10, 25, atau 40
  5. resolution: 'M' (sedang) atau 'H' (tinggi). Lihat referensi ini untuk mengetahui detailnya.

Kode berikut memfilter koleksi Sentinel-1 menurut properti transmitterReceiverPolarisation, instrumentMode, dan orbitProperties_pass, lalu menghitung gabungan untuk beberapa kombinasi pengamatan yang ditampilkan di peta untuk menunjukkan pengaruh karakteristik ini terhadap data.

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

Penyiapan Python

Lihat halaman Lingkungan Python untuk mengetahui informasi tentang Python API dan penggunaan geemap untuk pengembangan interaktif.

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

Pra-pemrosesan Sentinel-1

Citra di 'COPERNICUS/S1_GRD' Sentinel-1 Earth Engine ImageCollection terdiri dari scene Ground Range Detected (GRD) Level-1 yang diproses menjadi koefisien backscatter (σ°) dalam desibel (dB). Koefisien pantulan balik mewakili area pantulan balik target (bagian radar) per unit area tanah. Karena dapat bervariasi menurut beberapa urutan magnitudo, nilai ini dikonversi ke dB sebagai 10*log10σ°. Nilai ini mengukur apakah medan yang dipancarkan menyebarkan radiasi gelombang mikro yang datang secara preferensial dari sensor SAR dB < 0) atau ke arah sensor SAR dB > 0). Perilaku hamburan ini bergantung pada karakteristik fisik medan, terutama geometri elemen medan dan karakteristik elektromagnetiknya.

Earth Engine menggunakan langkah prapemrosesan berikut (seperti yang diterapkan oleh Sentinel-1 Toolbox) untuk mendapatkan koefisien backscatter di setiap piksel:

  1. Menerapkan file orbit
    • Memperbarui metadata orbit dengan file orbit yang direstorasi (atau file orbit yang akurat jika file yang direstorasi tidak tersedia).
  2. Penghapusan derau batas GRD
    • Menghapus derau intensitas rendah dan data yang tidak valid di tepi scene. (Per 12 Januari 2018)
  3. Penghapusan derau termal
    • Menghapus derau tambahan di sub-swath untuk membantu mengurangi diskontinuitas di antara sub-swath untuk scene dalam mode akuisisi multi-swath. (Operasi ini tidak dapat diterapkan pada gambar yang dibuat sebelum Juli 2015)
  4. Penerapan nilai kalibrasi radiometrik
    • Menghitung intensitas backscatter menggunakan parameter kalibrasi sensor dalam metadata GRD.
  5. Koreksi medan (ortorektifikasi)
    • Mengonversi data dari geometri rentang darat, yang tidak memperhitungkan medan, ke σ° menggunakan DEM SRTM 30 meter atau DEM ASTER untuk lintang tinggi (lebih besar dari 60° atau kurang dari -60°).

Catatan Set Data

  • Penghalusan Terrain Radiometrik tidak diterapkan karena artefak di lereng gunung.
  • Koefisien backscatter tanpa satuan dikonversi ke dB seperti yang dijelaskan di atas.
  • Data SLC Sentinel-1 saat ini tidak dapat diserap, karena Earth Engine tidak mendukung gambar dengan nilai kompleks karena ketidakmampuan untuk menghitung rata-ratanya selama pembuatan piramida tanpa kehilangan informasi fase.
  • Aset GRD SM tidak diserap karena fungsi computeNoiseScalingFactor() dalam operasi penghapusan derau batas di toolbox S1 tidak mendukung mode SM.