Thuật toán Sentinel-1

Sentinel-1 là một nhiệm vụ không gian do Liên minh Châu Âu tài trợ và do Cơ quan Vũ trụ Châu Âu (ESA) thực hiện trong Chương trình Copernicus. Sentinel-1 thu thập hình ảnh radar khẩu độ tổng hợp (SAR) băng tần C ở nhiều độ phân giải và độ phân cực. Vì dữ liệu radar yêu cầu một số thuật toán chuyên biệt để có được hình ảnh được hiệu chỉnh và chỉnh sửa theo phương pháp orthorectification, nên tài liệu này mô tả quy trình xử lý trước dữ liệu Sentinel-1 trong Earth Engine.

Dữ liệu Sentinel-1 được thu thập bằng một số cấu hình thiết bị, độ phân giải, tổ hợp băng tần khác nhau trong cả quỹ đạo lên và xuống. Do sự không đồng nhất này, thường thì bạn cần phải lọc dữ liệu xuống một tập hợp con đồng nhất trước khi bắt đầu xử lý. Quy trình này được trình bày bên dưới trong phần Siêu dữ liệu và lọc.

Siêu dữ liệu và tính năng lọc

Để tạo một tập hợp con đồng nhất của dữ liệu Sentinel-1, bạn thường phải lọc tập hợp bằng các thuộc tính siêu dữ liệu. Các trường siêu dữ liệu phổ biến dùng để lọc bao gồm các thuộc tính sau:

  1. transmitterReceiverPolarisation: ['VV'], ['HH'], ['VV', 'VH'] hoặc ['HH', 'HV']
  2. instrumentMode: "IW" (Dải rộng giao thoa), "EW" (Dải rộng cực đại) hoặc "SM" (Bản đồ dải). Hãy xem tài liệu tham khảo này để biết thông tin chi tiết.
  3. orbitProperties_pass: "ASCENDING" (TĂNG DẦN) hoặc "DESCENDING" (GIẢM DẦN)
  4. resolution_meters: 10, 25 hoặc 40
  5. resolution: "M" (trung bình) hoặc "H" (cao). Hãy xem tài liệu tham khảo này để biết thông tin chi tiết.

Mã sau đây lọc tập hợp Sentinel-1 theo các thuộc tính transmitterReceiverPolarisation, instrumentModeorbitProperties_pass, sau đó tính toán các thành phần kết hợp cho một số tổ hợp quan sát hiển thị trong bản đồ để minh hoạ cách các đặc điểm này ảnh hưởng đến dữ liệu.

Trình soạn thảo mã (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

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

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

Xử lý trước Sentinel-1

Hình ảnh trong 'COPERNICUS/S1_GRD' Sentinel-1 Earth Engine ImageCollection bao gồm các cảnh Phát hiện phạm vi mặt đất cấp 1 (GRD) được xử lý thành hệ số tán xạ ngược (σ°) theo đơn vị decibel (dB). Hệ số tán xạ ngược thể hiện diện tích tán xạ ngược của mục tiêu (phần cắt radar) trên mỗi đơn vị diện tích mặt đất. Vì có thể thay đổi theo nhiều thứ tự độ lớn, nên giá trị này được chuyển đổi thành dB dưới dạng 10*log10σ°. Giá trị này đo lường xem địa hình được chiếu có tán xạ bức xạ vi sóng tới hay không, ưu tiên cách xa cảm biến SAR (dB < 0) hay hướng về cảm biến SAR (dB > 0). Hành vi tán xạ này phụ thuộc vào các đặc điểm vật lý của địa hình, chủ yếu là hình học của các phần tử địa hình và các đặc điểm điện từ của chúng.

Earth Engine sử dụng các bước xử lý trước sau đây (do Sentinel-1 Toolbox triển khai) để lấy hệ số tán xạ ngược trong mỗi pixel:

  1. Áp dụng tệp quỹ đạo
    • Cập nhật siêu dữ liệu quỹ đạo bằng một tệp quỹ đạo được khôi phục (hoặc một tệp quỹ đạo chính xác nếu không có tệp quỹ đạo được khôi phục).
  2. Khử nhiễu đường viền GRD
    • Xoá nhiễu cường độ thấp và dữ liệu không hợp lệ ở các cạnh cảnh. (Tính đến ngày 12 tháng 1 năm 2018)
  3. Loại bỏ tiếng ồn nhiệt
    • Loại bỏ tạp âm cộng thêm trong các dải quét phụ để giúp giảm sự gián đoạn giữa các dải quét phụ cho các cảnh ở chế độ thu thập nhiều dải quét. (Không thể áp dụng thao tác này cho hình ảnh được tạo trước tháng 7 năm 2015)
  4. Áp dụng giá trị hiệu chuẩn bức xạ
    • Tính toán cường độ tán xạ ngược bằng cách sử dụng các tham số hiệu chuẩn cảm biến trong siêu dữ liệu GRD.
  5. Chỉnh sửa địa hình (chỉnh sửa theo phương pháp orthorectification)
    • Chuyển đổi dữ liệu từ hình học phạm vi mặt đất (không tính đến địa hình) thành σ° bằng cách sử dụng DEM SRTM 30 mét hoặc DEM ASTER cho vĩ độ cao (lớn hơn 60° hoặc nhỏ hơn -60°).

Ghi chú về tập dữ liệu

  • Tính năng Làm phẳng địa hình theo phương pháp đo bức xạ không được áp dụng do các hiện tượng giả trên sườn núi.
  • Hệ số tán xạ ngược không có đơn vị được chuyển đổi thành dB như mô tả ở trên.
  • Hiện tại, bạn không thể nhập dữ liệu SLC của Sentinel-1 vì Earth Engine không hỗ trợ hình ảnh có giá trị phức tạp do không thể tính trung bình các giá trị đó trong quá trình tạo kim tự tháp mà không làm mất thông tin về pha.
  • Các thành phần SM GRD không được nhập vì hàm computeNoiseScalingFactor() trong thao tác loại bỏ nhiễu đường viền trong hộp công cụ S1 không hỗ trợ chế độ SM.