خوارزميات Sentinel-1

Sentinel-1 هي مهمة فضائية تديرها "وكالة الفضاء الأوروبية" ويموّلها الاتحاد الأوروبي في إطار برنامج "كوبرنيكوس". يجمع القمر الصناعي Sentinel-1 صور رادار الفتحة التركيبية (SAR) في النطاق C بدرجات دقة وأنواع استقطاب متنوعة. بما أنّ بيانات الرادار تتطلّب العديد من الخوارزميات المخصّصة للحصول على صور معدَّلة ومستوية، يصف هذا المستند المعالجة المُسبَقة لبيانات Sentinel-1 في Earth Engine.

يتم جمع بيانات 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: "م" (متوسط) أو "س" (مرتفع). يُرجى الاطّلاع على هذه المراجع لمعرفة التفاصيل.

تصفِّر الرموز البرمجية التالية مجموعة 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 للحصول على معلومات عن واجهة برمجة التطبيقات Python API واستخدام IDE 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 من مشاهد المستوى 1 للرصد على سطح الأرض (GRD) التي تمت معالجتها لاحتساب معامل الانعكاس الخلفي (σ°) بوحدة الديسيبل (dB). يمثّل معامل الانعكاس الخلفي مساحة الانعكاس الخلفي المستهدَف (المقطع العرضي للرادار) لكل وحدة مساحة أرضية. وبما أنّه يمكن أن يختلف بعدة أوامر من حيث الحجم، يتم تحويله إلى ديسيبل على النحو التالي: 10*log10σ°. ويقيس ما إذا كانت المنطقة التي تشعّ طاقة تنثر إشعاع الميكروويف الساقط بشكلٍ مفضّل بعيدًا عن أداة استشعار SAR (ديسيبل < 0) أو باتجاه أداة استشعار SAR (ديسيبل > 0). يعتمد سلوك التشتت هذا على الخصائص الفيزيائية للتضاريس، وبشكل أساسي على شكل عناصر التضاريس وخصائصها الكهرومغناطيسية.

تستخدِم أداة Earth Engine خطوات المعالجة المُسبَقة التالية (على النحو الذي نفّذته مجموعة أدوات Sentinel-1) لاحتساب معامل الانعكاس الخلفي في كل بكسل:

  1. تطبيق ملف orbit
    • تعديل البيانات الوصفية للمسار باستخدام ملف مسار تم استعادته (أو ملف مسار دقيق إذا لم يكن ملف المسار الذي تم استعادته متاحًا)
  2. إزالة الضوضاء في حدود GRD
    • تزيل هذه الميزة الضوضاء ذات الكثافة المنخفضة والبيانات غير الصالحة على حواف المشهد. (اعتبارًا من 12 كانون الثاني (يناير) 2018)
  3. إزالة الضوضاء الحرارية
    • تزيل هذه الطريقة الضوضاء المضافة في مسوحات المنطقة الفرعية للمساعدة في تقليل الفجوات بين مسوحات المنطقة الفرعية للمشاهد في أوضاع الاكتساب باستخدام مسوحات متعددة. (لا يمكن تطبيق هذه العملية على الصور التي تم إنشاؤها قبل تموز/يوليو 2015)
  4. تطبيق قيم المعايرة الشعاعية
    • تُحتسب كثافة الارتداد من الخلف باستخدام مَعلمات معايرة أجهزة الاستشعار في البيانات الوصفية لبيانات GRD.
  5. تصحيح التضاريس (التصحيح الأورثوصنتري)
    • تحوِّل البيانات من هندسة النطاق الأرضي، التي لا تأخذ في الاعتبار التضاريس، إلى σ° باستخدام DEM SRTM 30 متر أو ASTER DEM للخطوط العالية العرضية (أكبر من 60 درجة أو أقل من -60 درجة).

ملاحظات حول مجموعة البيانات

  • لا يتم تطبيق ميزة "تسطيح التضاريس الإشعاعية" بسبب العناصر الزائفة على منحدرات الجبال.
  • يتم تحويل معامل الانعكاس الخلفي بدون وحدات إلى ديسيبل كما هو موضّح أعلاه.
  • لا يمكن حاليًا نقل بيانات SLC من Sentinel-1، لأنّ Earth Engine لا تتيح استخدام الصور التي تحتوي على قيم معقّدة بسبب عدم التمكّن من احتساب متوسطها أثناء التجميع بدون فقدان معلومات مرحلتها.
  • لا يتم نقل مواد عرض SM GRD لأنّ دالة computeNoiseScalingFactor() في عملية إزالة الضوضاء في الحدود في مجموعة أدوات S1 لا تتوافق مع وضع SM.