Sentinel-1 演算法

Sentinel-1 是歐洲太空總署 (ESA) 在哥白尼計劃中執行的太空任務,由歐洲聯盟提供資金。Sentinel-1 會以各種偏振和解析度收集 C 波段合成孔徑雷達 (SAR) 圖像。由於雷達資料需要使用多種專用演算法才能取得經過校正的正射影像,因此本文件將說明在 Earth Engine 中預先處理 Sentinel-1 資料的相關資訊。

在上升和下降軌道期間,Sentinel-1 會使用多種不同的儀器設定、解析度和頻帶組合來收集資料。由於這種異質性,通常必須先將資料篩選為同質子集,才能開始處理。這項程序的詳細說明請參閱下方的「中繼資料和篩選功能」一節。

中繼資料和篩選

如要建立 Sentinel-1 資料的均質子集,通常需要使用中繼資料屬性篩選收集資料。用於篩選的常見中繼資料欄位包括以下屬性:

  1. transmitterReceiverPolarisation:['VV'], ['HH'], ['VV', 'VH'], 或 ['HH', 'HV']
  2. instrumentMode:'IW' (干涉寬幅)、'EW' (超寬幅) 或 'SM' (地圖條帶)。詳情請參閱這份參考資料
  3. orbitProperties_pass:'ASCENDING' 或 'DESCENDING'
  4. resolution_meters:10、25 或 40
  5. resolution:'M' (中) 或 'H' (高)。詳情請參閱這份參考資料

以下程式碼會依據 transmitterReceiverPolarisationinstrumentModeorbitProperties_pass 屬性篩選 Sentinel-1 集合,然後為地圖中顯示的多個觀測組合計算複合圖,以示範這些特性如何影響資料。

程式碼編輯器 (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 設定

請參閱「 Python 環境」頁面,瞭解 Python API 和如何使用 geemap 進行互動式開發。

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

Sentinel-1 預先處理

Earth Engine 'COPERNICUS/S1_GRD' Sentinel-1 ImageCollection 中的影像,包含以分貝 (dB) 為單位,經過處理的後向散射係數 (σ°) 的 Level-1 地面範圍偵測 (GRD) 場景。後向散射係數代表每單位地面面積的目標後向散射區域 (雷達橫截面)。由於這項數值可能會變化數個數量級,因此會轉換為 dB 為 10*log10σ°。這項測量值可評估輻射地形是否會將入射微波輻射偏向遠離 SAR 感應器 (dB < 0) 或朝向 SAR 感應器 (dB > 0)。這種散射行為取決於地形的物理特性,主要是地形元素的幾何圖形和電磁特性。

Earth Engine 會使用下列預先處理步驟 (由 Sentinel-1 工具箱實作),找出每個像素的後向散射係數:

  1. 套用軌道檔案
    • 使用已復原的軌道檔案更新軌道中繼資料 (如果沒有可用的復原檔案,則使用精確的軌道檔案)。
  2. GRD 邊界雜訊移除
    • 移除場景邊緣的低強度雜訊和無效資料。(截至 2018 年 1 月 12 日)
  3. 熱噪消除
    • 移除子帶中的加成雜訊,以便在多帶擷取模式下,減少場景子帶之間的斷層。(這項作業無法套用至 2015 年 7 月前產生的圖片)
  4. 應用輻射校正值
    • 使用 GRD 中繼資料中的感應器校正參數,計算回散強度。
  5. 地形修正 (正射校正)
    • 使用 SRTM 30 公尺 DEMASTER DEM,將不考量地形的地面範圍幾何圖形資料轉換為 σ°,適用於高緯度 (大於 60° 或小於 -60°)。

資料集附註

  • 由於山坡上有雜訊,因此未套用輻射地形平坦化功能。
  • 無單位的回散係數會轉換為上述的 dB。
  • 目前無法擷取 Sentinel-1 SLC 資料,因為 Earth Engine 無法在建立金字塔時平均複雜值,且不會遺失相位資訊。
  • 系統不會擷取 GRD SM 素材資源,因為 S1 工具箱中的邊框雜訊移除作業中的 computeNoiseScalingFactor() 函式不支援 SM 模式。