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' (높음)입니다. 자세한 내용은 이 참조를 참고하세요.

다음 코드는 transmitterReceiverPolarisation, instrumentMode, orbitProperties_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 API 및 대화형 개발을 위한 geemap 사용에 관한 자세한 내용은 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

Sentinel-1 사전 처리

Earth Engine 'COPERNICUS/S1_GRD' Sentinel-1 ImageCollection의 이미지는 데시벨(dB) 단위의 후방 산란 계수 (σ°)로 처리된 레벨 1 지상 거리 감지 (GRD) 장면으로 구성됩니다. 후방 산란 계수는 단위 지상 면적당 타겟 후방 산란 영역 (레이더 단면적)을 나타냅니다. 수십 배까지 달라질 수 있으므로 10*log10σ°로 dB로 변환됩니다. 방사된 지형이 입사하는 마이크로파 방사선을 SAR 센서에서 멀리 흩어지게 하는지(dB < 0) 또는 SAR 센서 쪽으로 흩어지게 하는지(dB > 0)를 측정합니다. 이 산란 동작은 지형의 물리적 특성, 주로 지형 요소의 도형 및 전자기적 특성에 따라 달라집니다.

Earth Engine은 Sentinel-1 도구 상자에서 구현한 다음과 같은 사전 처리 단계를 사용하여 각 픽셀의 후방 산란 계수를 도출합니다.

  1. 궤도 파일 적용
    • 복원된 궤도 파일(또는 복원된 파일을 사용할 수 없는 경우 정확한 궤도 파일)로 궤도 메타데이터를 업데이트합니다.
  2. GRD 경계선 노이즈 제거
    • 장면 가장자리의 낮은 강도 노이즈와 잘못된 데이터를 삭제합니다. (2018년 1월 12일 기준)
  3. 열 노이즈 제거
    • 하위 스와프에서 추가 노이즈를 제거하여 다중 스와프 획득 모드에서 장면의 하위 스와프 간의 불연속성을 줄입니다. (2015년 7월 이전에 생성된 이미지에는 이 작업을 적용할 수 없습니다.)
  4. 방사 보정 값 적용
    • GRD 메타데이터의 센서 보정 매개변수를 사용하여 후방 산란 강도를 계산합니다.
  5. 지형 보정 (오르토레티컬 보정)
    • 지형을 고려하지 않는 지상 거리 도형의 데이터를 SRTM 30미터 DEM 또는 고위도 (60° 초과 또는 -60° 미만)의 경우 ASTER DEM을 사용하여 σ°로 변환합니다.

데이터 세트 메모

  • 산 경사면의 아티팩트로 인해 방사온도 지형 평탄화가 적용되지 않습니다.
  • 단위 없는 백스캐터 계수는 위에서 설명한 대로 dB로 변환됩니다.
  • 현재 Sentinel-1 SLC 데이터는 처리할 수 없습니다. Earth Engine은 위상 정보를 손실하지 않고 피라미드화 중에 평균을 내지 못하기 때문에 복잡한 값이 있는 이미지를 지원하지 않습니다.
  • S1 도구 상자의 테두리 노이즈 제거 작업computeNoiseScalingFactor() 함수가 SM 모드를 지원하지 않으므로 GRD SM 애셋이 처리되지 않습니다.