อัลกอริทึมของ Sentinel-1

Sentinel-1 เป็นภารกิจอวกาศที่ได้รับเงินทุนสนับสนุนจากสหภาพยุโรปและดำเนินการโดยองค์การอวกาศยุโรป (ESA) ภายในโปรแกรมโคเปอร์นิคัส Sentinel-1 รวบรวมภาพเรดาร์ชนิดช่องรับคลื่นสังเคราะห์ (SAR) ในย่านความถี่ C-Band ที่หลากหลายทั้งโพลาไรซ์และความละเอียด เนื่องจากข้อมูลเรดาร์ต้องใช้อัลกอริทึมเฉพาะหลายรายการเพื่อให้ได้ภาพที่ได้รับการปรับเทียบและจัดระเบียบใหม่ เอกสารนี้จึงอธิบายการประมวลผลข้อมูล Sentinel-1 ก่อนประมวลผลใน Earth Engine

ข้อมูล Sentinel-1 รวบรวมโดยใช้การกำหนดค่าเครื่องมือ ความละเอียด และชุดค่าผสมของย่านความถี่ที่แตกต่างกันหลายแบบ ทั้งในช่วงโคจรขึ้นและลง ด้วยเหตุนี้ โดยทั่วไปจึงจำเป็นต้องกรองข้อมูลให้เหลือเฉพาะชุดย่อยที่เป็นเนื้อเดียวกันก่อนเริ่มการประมวลผล กระบวนการนี้ระบุไว้ด้านล่างในส่วนข้อมูลเมตาและการกรอง

ข้อมูลเมตาและการกรอง

หากต้องการสร้างชุดย่อยที่เหมือนกันของข้อมูล Sentinel-1 โดยปกติแล้วคุณจะต้องกรองคอลเล็กชันโดยใช้พร็อพเพอร์ตี้ข้อมูลเมตา ช่องข้อมูลเมตาทั่วไปที่ใช้สำหรับกรอง ได้แก่ พร็อพเพอร์ตี้ต่อไปนี้

  1. transmitterReceiverPolarisation: ['VV'], ['HH'], ['VV', 'VH'], หรือ ['HH', 'HV']
  2. instrumentMode: 'IW' (Interferometric Wide Swath), 'EW' (Extra Wide Swath) หรือ 'SM' (Strip Map) ดูรายละเอียดได้ในข้อมูลอ้างอิงนี้
  3. orbitProperties_pass: 'ASCENDING' หรือ 'DESCENDING'
  4. resolution_meters: 10, 25 หรือ 40
  5. resolution: "M" (ปานกลาง) หรือ "H" (สูง) ดูรายละเอียดได้ในข้อมูลอ้างอิงนี้

โค้ดต่อไปนี้จะกรองคอลเล็กชัน Sentinel-1 ตามพร็อพเพอร์ตี้ transmitterReceiverPolarisation, instrumentMode และ orbitProperties_pass จากนั้นคำนวณคอมโพสิตสําหรับการผสมผสานการสังเกตการณ์หลายรายการที่แสดงในแผนที่เพื่อแสดงให้เห็นว่าลักษณะเหล่านี้ส่งผลต่อข้อมูลอย่างไร

เครื่องมือแก้ไขโค้ด (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

ภาพใน 'COPERNICUS/S1_GRD' Sentinel-1 ของ Earth Engine ImageCollection ประกอบด้วยฉากระดับ 1 ที่ตรวจพบระยะทางจากพื้นดิน (GRD) ซึ่งประมวลผลเป็นค่าสัมประสิทธิ์การกระเจิงกลับ (σ°) เป็นเดซิเบล (dB) ค่าสัมประสิทธิ์การกระเจิงกลับแสดงถึงพื้นที่การกระเจิงกลับของเป้าหมาย (พื้นที่หน้าตัดเรดาร์) ต่อพื้นที่พื้นดิน 1 หน่วย เนื่องจากค่านี้อาจแตกต่างกันไปหลายระดับ จึงมีการแปลงเป็น dB ดังนี้ 10*log10σ° ค่านี้วัดว่าพื้นที่ที่แผ่รังสีจะกระเจิงรังสีไมโครเวฟที่ตกกระทบออกไปจากเซ็นเซอร์ SAR หรือไม่ (dB < 0) หรือกระเจิงรังสีไมโครเวฟเข้าหาเซ็นเซอร์ SAR (dB > 0) ลักษณะการกระเจิงนี้ขึ้นอยู่กับลักษณะทางกายภาพของภูมิประเทศ โดยเฉพาะอย่างยิ่งเรขาคณิตขององค์ประกอบภูมิประเทศและลักษณะคลื่นแม่เหล็กไฟฟ้า

Earth Engine ใช้ขั้นตอนการเตรียมข้อมูลล่วงหน้าต่อไปนี้ (ตามที่ติดตั้งใช้งานโดยกล่องเครื่องมือ Sentinel-1) เพื่อหาค่าสัมประสิทธิ์การกระเจิงกลับในแต่ละพิกเซล

  1. ใช้ไฟล์ Orbit
    • อัปเดตข้อมูลเมตาของวงโคจรด้วยไฟล์วงโคจรที่สร้างขึ้นใหม่ (หรือไฟล์วงโคจรที่แม่นยำหากไม่มีไฟล์ที่สร้างขึ้นใหม่)
  2. การลบสัญญาณรบกวนขอบใน GRD
    • กรองสัญญาณรบกวนความเข้มต่ำและข้อมูลที่ไม่ถูกต้องบริเวณขอบของฉากออก (ข้อมูล ณ วันที่ 12 มกราคม 2018)
  3. การกรองเสียงรบกวนจากความร้อน
    • นำสัญญาณรบกวนเพิ่มเติมในแถบย่อยออกเพื่อช่วยลดความไม่ต่อเนื่องระหว่างแถบย่อยสำหรับฉากในโหมดการจับภาพหลายแถบ (การดำเนินการนี้ใช้กับรูปภาพที่ผลิตก่อนเดือนกรกฎาคม 2015 ไม่ได้)
  4. การใช้ค่าการปรับเทียบแบบรังสี
    • คํานวณความเข้มของการกระเจิงกลับโดยใช้พารามิเตอร์การปรับเทียบเซ็นเซอร์ในข้อมูลเมตา GRD
  5. การแก้ไขภูมิประเทศ (การปรับภาพให้ตรง)
    • แปลงข้อมูลจากเรขาคณิตของระยะทางภาคพื้นดิน ซึ่งไม่คำนึงถึงภูมิประเทศ เป็น σ° โดยใช้ DEM 30 เมตรของ SRTM หรือ DEM ของ ASTER สำหรับละติจูดสูง (มากกว่า 60° หรือน้อยกว่า -60°)

หมายเหตุชุดข้อมูล

  • ระบบไม่ได้ใช้การปรับระดับภูมิประเทศแบบรังสีเนื่องจากมีสิ่งประดิษฐ์บนลาดเขา
  • ระบบจะแปลงค่าสัมประสิทธิ์การกระเจิงกลับที่ไม่มีหน่วยเป็น dB ตามที่อธิบายไว้ข้างต้น
  • ขณะนี้ระบบไม่สามารถนำเข้าข้อมูล SLC ของ Sentinel-1 เนื่องจาก Earth Engine ไม่รองรับรูปภาพที่มีค่าที่ซับซ้อนเนื่องจากไม่สามารถหาค่าเฉลี่ยระหว่างการสร้างพีระมิดโดยไม่สูญเสียข้อมูลเฟส
  • ระบบจะไม่ส่งผ่านข้อมูลชิ้นงาน GRD SM เนื่องจากฟังก์ชัน computeNoiseScalingFactor() ในการดำเนินการนำสัญญาณรบกวนขอบออกในกล่องเครื่องมือ S1 ไม่รองรับโหมด SM