Sentinel-1 היא משימת חלל שממומנת על ידי האיחוד האירופי ומבוצעת על ידי סוכנות החלל האירופית (ESA) במסגרת תוכנית קופרניקוס. הלוויין סנטינל-1 אוסף תמונות של מכ"ם מפתח סינתטי (SAR) בתחום C-band במגוון רזולוציות ופולריזציות. מאחר שנתוני מכשיר הראדאר דורשים כמה אלגוריתמים מיוחדים כדי לקבל תמונות אורתורקטיות ותואמות, במסמך הזה מתוארת עיבוד מקדים של נתוני Sentinel-1 ב-Earth Engine.
הנתונים של Sentinel-1 נאספים במספר תצורות שונות של המכשיר, ברזולוציות שונות ובשילובים שונים של תדרים במהלך הקפות עולות ויורדות. בגלל ההטרוגניות הזו, בדרך כלל צריך לסנן את הנתונים לקבוצת משנה הומוגנית לפני שמתחילים את העיבוד. התהליך הזה מפורט בהמשך בקטע מטא-נתונים וסינון.
מטא-נתונים וסינון
כדי ליצור קבוצת משנה הומוגנית של נתוני Sentinel-1, בדרך כלל צריך לסנן את האוסף באמצעות מאפייני מטא-נתונים. שדות המטא-נתונים הנפוצים שמשמשים לסינון כוללים את המאפיינים הבאים:
transmitterReceiverPolarisation
: ['VV'], ['HH'], ['VV', 'VH'] או ['HH', 'HV']instrumentMode
: 'IW' (Interferometric Wide Swath), 'EW' (Extra Wide Swath) או 'SM' (Strip Map). לפרטים נוספים, עיינו במקור המידע הזה.orbitProperties_pass
: 'ASCENDING' או 'DESCENDING'resolution_meters
: 10, 25 או 40resolution
: 'M' (בינוני) או 'H' (גבוה). לפרטים נוספים, עיינו במקור המידע הזה.
הקוד הבא מסנן את האוסף של Sentinel-1 לפי המאפיינים transmitterReceiverPolarisation
, instrumentMode
ו-orbitProperties_pass
, ולאחר מכן מחשב שילובים של כמה תצפיות שמוצגות במפה כדי להמחיש איך המאפיינים האלה משפיעים על הנתונים.
Code Editor (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
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-1ImageCollection
ב-Earth Engine מורכבות מתצוגות ברמה 1 של נתוני GRD (Ground Range Detected) שעברו עיבוד לחישוב מקדם ההחזרה הרפלקטיבית (σ°) בדציבלים (dB). מקדם ההחזרה החוזרת מייצג את שטח ההחזרה החוזרת של היעד (חתך רוחב של מכשיר ראדאר) ליחידת שטח יבשתי. מכיוון שהיא יכולה להשתנות בכמה סדרי גודל, היא מומרת ל-dB כ-10*log10σ°. היא מודדת אם פני השטח המוקרנים מפזרים את קרינה המיקרוגל הנכנסת הרחק יותר מסנסור ה-SAR (dB < 0) או לכיוון סנסור ה-SAR (dB > 0). אופן ההתפזרות הזה תלוי במאפיינים הפיזיים של השטח, בעיקר בגיאומטריה של רכיבי השטח ובמאפיינים האלקטרומגנטיים שלהם.
כדי לחשב את מקדם ההחזרה הרפלקטיבית (backscatter) בכל פיקסל, מערכת Earth Engine משתמשת בשלבים הבאים של עיבוד מקדים (כפי שהם מיושמים על ידי Sentinel-1 Toolbox):
- החלת קובץ מסלול
- מעדכן את המטא-נתונים של מסלול באמצעות קובץ מסלול ששוחזר (או קובץ מסלול מדויק אם קובץ השחזור לא זמין).
- הסרת רעשי גבול ב-GRD
- הסרת רעשים בעוצמה נמוכה ונתונים לא חוקיים בקצוות התמונה. (נכון ל-12 בינואר 2018)
- הסרת רעשי רקע תרמיים
- הסרת רעשי תוספת בשטחי צילומים משניים כדי לצמצם את הפערים בין שטחי הצילומים המשניים בסצנות במצבי צילום עם כמה שטחי צילומים. (לא ניתן להחיל את הפעולה הזו על תמונות שנוצרו לפני יולי 2015)
- החלת ערכי כיול רדיומטרי
- חישוב עוצמת ההחזרה החוזרת באמצעות פרמטרים של כיול חיישן במטא-נתונים של GRD.
- תיקון פני השטח (אורתו-ריקטיבציה)
- המרת נתונים מגיאומטריה של טווח הקרקע, שלא מביאה בחשבון את פני השטח, ל-σ° באמצעות SRTM 30 meter DEM או ASTER DEM לקו רוחב גבוה (יותר מ-60° או פחות מ-60°).
הערות על מערך נתונים
- לא מתבצעת יישור שטח רדיומטרי בגלל פגמים במורדות ההרים.
- מקדם ההחזרה לאחור ללא יחידה מומר ל-dB כפי שמתואר למעלה.
- אי אפשר כרגע להטמיע נתוני SLC של Sentinel-1, כי מערכת Earth Engine לא תומכת בתמונות עם ערכים מורכבים בגלל אי היכולת לחשב את הממוצע שלהן במהלך הפירמידה בלי לאבד את פרטי הפאזה.
- נכסי GRD SM לא עוברים הטמעה כי הפונקציה
computeNoiseScalingFactor()
בפעולת הסרת הרעש של הגבולות בכלי S1 לא תומכת במצב SM.