נתונים סטטיסטיים של אזור בתמונה

reduceRegion

כדי לקבל נתונים סטטיסטיים של ערכי פיקסלים באזור מסוים של ee.Image, משתמשים ב-image.reduceRegion(). הפעולה הזו מצמצמת את כל הפיקסלים באזורים לנתון סטטיסטי או לייצוג קומפקטי אחר של נתוני הפיקסלים באזור (למשל, היסטוגרמה). האזור מיוצג כ-Geometry, שיכול להיות פוליגון שמכיל הרבה פיקסלים, או נקודה אחת, ובמקרה כזה יהיה רק פיקסל אחד באזור. בכל מקרה, כפי שמוצג באיור 1, הפלט הוא נתון סטטיסטי שנגזר מהפיקסלים באזור.

תרשים reduceRegion
איור 1. איור של ee.Reducer אפקט שמוחל על תמונה ועל אזור מסוים.

כדי לראות דוגמה לאופן שבו מקבלים נתונים סטטיסטיים של פיקסלים באזור מסוים בתמונה באמצעות reduceRegion(), אפשר לחשב את ערכי הספקטרום הממוצעים של תמונה מורכבת של Landsat במשך 5 שנים בגבולות של Sierra Nevada Coniferous Forest (כפי שמוצג באיור 2):

// Load input imagery: Landsat 7 5-year composite.
var image = ee.Image('LANDSAT/LE7_TOA_5YEAR/2008_2012');

// Load an input region: Sierra Nevada.
var region = ee.Feature(ee.FeatureCollection('EPA/Ecoregions/2013/L3')
  .filter(ee.Filter.eq('us_l3name', 'Sierra Nevada'))
  .first());

// Reduce the region. The region parameter is the Feature geometry.
var meanDictionary = image.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: region.geometry(),
  scale: 30,
  maxPixels: 1e9
});

// The result is a Dictionary.  Print it.
print(meanDictionary);

כדי לכפות את החישוב, מספיק להדפיס את התוצאה, שתוצג ב-Code Editor כ-Dictionary במסוף. הפלט אמור להיראות כך:

B1: 25.406029716816853
B2: 23.971497014238988
B3: 22.91059593763103
B4: 54.83164133293403
B5: 38.07655472573677
B6_VCID_2: 198.93216428012906
B7: 24.063261634961563
תרשים reduceRegion
איור 2. תמונה מורכבת בצבעים לא אמיתיים של נתוני תמונות Landsat בקליפורניה ובנבאדה. האזור שבו רוצים להקטין את התקציב מוצג בצבע לבן.

שימו לב שבמקרה הזה, ההפחתה מוגדרת על ידי ציון reducer (ee.Reducer.mean()), geometry (region.geometry()), scale (30 מטרים) ו-maxPixels כמספר הפיקסלים המקסימלי להזנה למפחית. תמיד צריך לציין קנה מידה בקריאות ל-reduceRegion(). הסיבה לכך היא שבתהליכי עיבוד מורכבים, שעשויים לכלול נתונים ממקורות שונים עם סולמות שונים, הסולם של הפלט לא ייקבע באופן חד משמעי מהנתונים. במקרה כזה, ברירת המחדל של קנה המידה היא מעלה אחת, ובדרך כלל התוצאות לא מספקות. מידע נוסף על האופן שבו Earth Engine מטפל בקנה מידה מופיע בדף הזה.

יש שתי דרכים להגדיר את קנה המידה: על ידי ציון הפרמטר scale או על ידי ציון מערכת קואורדינטות (CRS) והמרת מערכת קואורדינטות (CRS). (מידע נוסף על מערכות הפניה מרחביות וטרנספורמציות של מערכות הפניה מרחביות זמין במילון המונחים). לדוגמה, הצמצום meanDictionary (למעלה) שווה ל:

// As an alternative to specifying scale, specify a CRS and a CRS transform.
// Make this array by constructing a 4326 projection at 30 meters,
// then copying the bounds of the composite, from composite.projection().
var affine = [0.00026949458523585647, 0, -180, 0, -0.00026949458523585647, 86.0000269494563];

// Perform the reduction, print the result.
print(image.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: region.geometry(),
  crs: 'EPSG:4326',
  crsTransform: affine,
  maxPixels: 1e9
}));

באופן כללי, ציון קנה המידה מספיק ומניב קוד קריא יותר. מערכת Earth Engine קובעת אילו פיקסלים להזין לפונקציית הצמצום על ידי המרת האזור לפורמט רסטר. אם מציינים קנה מידה בלי מערכת CRS, האזור עובר רסטריזציה בהטלה המקורית של התמונה, ומוגדל לרזולוציה שצוינה. אם מציינים גם מערכת קואורדינטות וגם קנה מידה, האזור עובר רסטריזציה על סמך הנתונים האלה.

פיקסלים באזור

הפיקסלים נקבעים באזור (ומקבלים משקל) בהתאם לכללים הבאים, שחלים על קנה המידה וההטלה שצוינו:

  • פונקציות לצמצום לא משוקלל (לדוגמה, ee.Reducer.count() או ee.Reducer.mean().unweighted()): פיקסלים נכללים אם הצנטרואיד שלהם נמצא באזור ומסכת התמונה שונה מאפס.
  • פונקציות להפחתת משקל (לדוגמה, ee.Reducer.mean()): פיקסלים נכללים אם לפחות (בערך) ‎1/256 (כ-0.4%) מהפיקסל נמצא באזור ו המסכה של התמונה שונה מאפס. המשקל שלהם הוא המינימום של המסכה של התמונה ושל החלק (המשוער) של הפיקסל שמכוסה על ידי האזור. משקלי החיתוך של הפיקסלים מיוצגים באופן פנימי כמספרים שלמים של 8 ביט (0 עד 255), ומבצעים קוונטיזציה של הכיסוי החלקי ל-256 רמות נפרדות.

הפרמטר maxPixels נדרש כדי שהחישוב יצליח. אם הפרמטר הזה לא מופיע בדוגמה, מוחזרת שגיאה שנראית בערך כך:

יש כמה אפשרויות לפתרון השגיאות האלה: להגדיל את maxPixels, כמו בדוגמה, להגדיל את scale או להגדיר את bestEffort ל-true, מה שיחשב באופן אוטומטי קנה מידה חדש (גדול יותר) כך שלא תהיה חריגה מ-maxPixels. אם לא מציינים את maxPixels, נעשה שימוש בערך ברירת המחדל.