צמצומים של ImageCollection

ניקח לדוגמה את הצורך לחשב את החציון של סדרת תמונות לאורך זמן, שמיוצגת על ידי ImageCollection. כדי להקטין את ImageCollection, משתמשים ב-imageCollection.reduce(). כך האוסף של התמונות מצומצם לתמונה אחת, כפי שמוצג באיור 1. באופן ספציפי, הפלט מחושב לפי פיקסלים, כך שכל פיקסל בפלט מורכב מהערך החציוני של כל התמונות באוסף במיקום הזה. כדי לקבל נתונים סטטיסטיים אחרים, כמו ממוצע, סכום, סטיית תקן, אחוזון שרירותי וכו', צריך לבחור את המצמצם המתאים ולהחיל אותו. (בכרטיסייה Docs בCode Editor מופיעה רשימה של כל המצמצמים הזמינים כרגע). לנתונים סטטיסטיים בסיסיים כמו מינימום, מקסימום, ממוצע וכו', ל-ImageCollection יש שיטות קיצור כמו min(),‏ max(),‏ mean() וכו'. הן פועלות בדיוק באותו אופן כמו קריאה ל-reduce(), מלבד העובדה שלשמות הלהקות שהתקבלו לא יתווסף שם המצמצם.

imageCollection.reduce diagram
איור 1. איור של ee.Reducer שהוחל על ImageCollection.

דוגמה לצמצום של ImageCollection: אוסף של תמונות Landsat 5, שמסוננות לפי נתיב ושורה. בקוד הבא נעשה שימוש ב-reduce() כדי לצמצם את האוסף ל-Image אחד (כאן נעשה שימוש במצמצם חציון רק למטרות המחשה):

Code Editor‏ (JavaScript)

// Load an image collection, filtered so it's not too much data.
var collection = ee.ImageCollection('LANDSAT/LT05/C02/T1')
  .filterDate('2008-01-01', '2008-12-31')
  .filter(ee.Filter.eq('WRS_PATH', 44))
  .filter(ee.Filter.eq('WRS_ROW', 34));

// Compute the median in each band, each pixel.
// Band names are B1_median, B2_median, etc.
var median = collection.reduce(ee.Reducer.median());

// The output is an Image.  Add it to the map.
var vis_param = {bands: ['B4_median', 'B3_median', 'B2_median'], gamma: 1.6};
Map.setCenter(-122.3355, 37.7924, 9);
Map.addLayer(median, vis_param);

הגדרת Python

בדף סביבת Python מפורט מידע על Python API ועל השימוש ב-geemap לפיתוח אינטראקטיבי.

import ee
import geemap.core as geemap

Colab (Python)

# Load an image collection, filtered so it's not too much data.
collection = (
    ee.ImageCollection('LANDSAT/LT05/C02/T1')
    .filterDate('2008-01-01', '2008-12-31')
    .filter(ee.Filter.eq('WRS_PATH', 44))
    .filter(ee.Filter.eq('WRS_ROW', 34))
)

# Compute the median in each band, each pixel.
# Band names are B1_median, B2_median, etc.
median = collection.reduce(ee.Reducer.median())

# The output is an Image.  Add it to the map.
vis_param = {'bands': ['B4_median', 'B3_median', 'B2_median'], 'gamma': 1.6}
m = geemap.Map()
m.set_center(-122.3355, 37.7924, 9)
m.add_layer(median, vis_param)
m

הפונקציה מחזירה את Image עם כמה תדרים, וכל פיקסל בו הוא החציון של כל הפיקסלים ללא מסכה ב-ImageCollection במיקום הפיקסל הזה. באופן ספציפי, הפונקציה reducer חוזרת על עצמה בכל פס של תמונות הקלט, כלומר החציון מחושב בנפרד בכל פס. שימו לב לשמות של הלהקות, שמצורף אליהם שם המצמצם: 'B1_median', ‏ 'B2_median' וכו'. הפלט אמור להיראות בערך כמו באיור 2.

מידע נוסף על צמצום אוספים של תמונות זמין בקטע 'צמצום' במסמכי העזרה של ImageCollection. במיוחד חשוב לזכור שלתמונות שנוצרות על ידי צמצום של ImageCollection אין הקרנה. המשמעות היא שצריך להגדיר בבירור את התאמת הסולם לכל חישוב שמערב פלט של תמונות מחושבות באמצעות הפחתה של ImageCollection.

הפלט של ImageCollection.reduce
איור 2. תמונה מורכבת בצבע מלאכותי של החציון של צילומי Landsat 5 בשנת 2008.