אוספים של תמונות

אוסף תמונות מתייחס לקבוצה של תמונות ב-Earth Engine. לדוגמה, אוסף כל התמונות של Landsat 8 הוא ee.ImageCollection. בדומה לתמונת ה-SRTM שעבדתם איתה, גם לאוספי תמונות יש מזהה. כמו בתמונות בודדות, אפשר לגלות את המזהה של אוסף תמונות על ידי חיפוש בקטלוג הנתונים של Earth Engine מעורך הקוד ובדיקה של דף הפרטים של מערך הנתונים. לדוגמה, חפשו את "landsat 8 toa" ולחצו על התוצאה הראשונה, שאמורה להתאים למערך הנתונים USGS Landsat 8 Collection 1 Tier 1 TOA Reflectance. אפשר לייבא את מערך הנתונים הזה באמצעות הלחצן Import ולשנות את השם שלו ל-l8, או להעתיק את המזהה ל-constructor של אוסף התמונות:

Code Editor (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

סינון אוספי תמונות

חשוב לציין שהאוסף הזה מייצג כל סצנה שנאספה ב-Landsat 8, בכל רחבי כדור הארץ. לעתים קרובות כדאי לחלץ תמונה אחת, או קבוצת משנה של תמונות, כדי לבדוק עליהן אלגוריתמים. כדי להגביל את האוסף לפי זמן או מיקום, צריך לסנן אותו. לדוגמה, כדי לסנן את האוסף לתמונות שמכסות מיקום מסוים, קודם מגדירים את האזור הרצוי באמצעות נקודה (או קו או פוליגון) בעזרת כלי השרטוט הגיאומטריים. מזיזים את המפה לאזור הרצוי, מעבירים את העכבר מעל Geometry Imports (אם כבר הגדרתם גיאומטריה אחת או יותר) ולוחצים על ‎+new layer (אם לא ייבאתם שום דבר, עוברים לשלב הבא). בוחרים בכלי לשרטוט נקודות () ומסמנים נקודה באזור הרצוי. נותנים שם לייבוא point. עכשיו מסננים את האוסף l8 כדי לקבל רק את התמונות שחוצות את הנקודה, ואז מוסיפים מסנן שני כדי להגביל את האוסף רק לתמונות שנרכשו ב-2015:

Code Editor (JavaScript)

var spatialFiltered = l8.filterBounds(point);
print('spatialFiltered', spatialFiltered);

var temporalFiltered = spatialFiltered.filterDate('2015-01-01', '2015-12-31');
print('temporalFiltered', temporalFiltered);

כאן, filterBounds() ו-filterDate() הן שיטות קיצור דרך לשיטה הכללית יותר filter() באוספי תמונות, שמקבלת ee.Filter() כארגומנט. כדי לקבל מידע נוסף על השיטות האלה, עיינו בכרטיסייה Docs בכלי לעריכת קוד. הארגומנט של filterBounds() הוא הנקודה שהמרתם לפורמט דיגיטלי, והארגומנטים של filterDate() הם שני תאריכים שמיוצגים כמחרוזות.

שימו לב שאפשר print() את האוספים המסוננים. אי אפשר להדפיס יותר מ-5,000 פריטים בבת אחת, אז אי אפשר, למשל, להדפיס את כל האוסף של l8. אחרי שמפעילים את השיטה print(), אפשר לבדוק את האוספים שהודפסו במסוף. שימו לב: כשמרחיבים את ImageCollection באמצעות החץ () ואז מרחיבים את הרשימה של features, מוצגת רשימה של תמונות. אפשר להרחיב ולבדוק כל אחת מהן. זו אחת הדרכים למצוא את המזהה של תמונה ספציפית. דרך אחרת, יותר פרוגרמטית, לקבל תמונות ספציפיות לניתוח היא למיין את האוסף כדי לקבל את התמונה העדכנית ביותר, הישנה ביותר או האופטימלית ביחס למאפיין מטא-נתונים כלשהו. לדוגמה, אם תבדקו את אובייקטי התמונות באוספי התמונות המודפסות, יכול להיות שתבחינו במאפיין מטא-נתונים שנקרא CLOUD_COVER. אפשר להשתמש במאפיין הזה כדי לקבל את התמונה עם הכי פחות עננים בשנת 2015 באזור שמעניין אתכם:

Code Editor (JavaScript)

// This will sort from least to most cloudy.
var sorted = temporalFiltered.sort('CLOUD_COVER');

// Get the first (least cloudy) image.
var scene = sorted.first();

עכשיו אפשר להציג את התמונה.

סטייה מהנושא: הצגת תמונות RGB

כשמוסיפים תמונה עם כמה ערוצים למפה, Earth Engine בוחר את שלושת הערוצים הראשונים של התמונה ומציג אותם כברירת מחדל בצבעים אדום, ירוק וכחול, ומותח אותם בהתאם לסוג הנתונים, כפי שמתואר למעלה. בדרך כלל, זה לא יספיק. לדוגמה, אם מוסיפים את תמונת Landsat (scene בדוגמה הקודמת) למפה, התוצאה לא מספקת:

Code Editor (JavaScript)

Map.centerObject(scene, 9);
Map.addLayer(scene, {}, 'default RGB');

שימו לב שקודם המפה ממורכזת בתמונה ברמת זום 9. ואז התמונה מוצגת עם אובייקט ריק ({}) בפרמטר visParams (פרטים נוספים זמינים במסמכי התיעוד של Map.addLayer()). כתוצאה מכך, התמונה מוצגת עם התצוגה החזותית שמוגדרת כברירת מחדל: שלושת הערוצים הראשונים ממופים ל-R, ‏ G, ‏ B, בהתאמה, ונמתחים ל-[0, 1] כי הערוצים הם מסוג הנתונים float. כלומר, הערוץ של אירוסולים באזורי חוף ('B1') מוצג באדום, הערוץ הכחול ('B2') מוצג בירוק והערוץ הירוק ('B3') מוצג בכחול. כדי לעבד את התמונה כקומפוזיציה של צבעים אמיתיים, צריך להורות ל-Earth Engine להשתמש ברצועות Landsat 8‏ 'B4',‏ 'B3' ו-'B2' עבור R,‏ G ו-B, בהתאמה. מציינים את הערוצים שבהם רוצים להשתמש באמצעות המאפיין bands של האובייקט visParams. במאמר הזה תוכלו לקרוא מידע נוסף על ערוצי Landsat.

צריך גם לספק ערכים של min ו-max שמתאימים להצגת החזרת אור מיעדים אופייניים על פני כדור הארץ. אפשר להשתמש ברשימות כדי לציין ערכים שונים לכל פס, אבל כאן מספיק לציין את 0.3 בתור max ולהשתמש בערך ברירת המחדל אפס לפרמטר min. ‫שילוב הפרמטרים של התצוגה החזותית לאובייקט אחד והצגה:

Code Editor (JavaScript)

var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};
Map.addLayer(scene, visParams, 'true-color composite');

התוצאה אמורה להיראות כמו באיור 5. שימו לב שהקוד הזה מקצה את האובייקט של פרמטרים של תצוגה חזותית למשתנה לשימוש עתידי אפשרי. כפי שתגלו בקרוב, האובייקט הזה יהיה שימושי כשתמחישו אוספי תמונות.

Tutorial_api_05_true_color.png
איור 5. תמונת החזרת אור בחלק העליון של האטמוספירה (TOA) של Landsat 8 כקומפוזיציה של צבעים אמיתיים, שנמתחה ל-[0, 0.3].

נסו לשחק עם ההדמיה של רצועות שונות. שילוב פופולרי נוסף הוא B5,‏ B4 ו-B3, שנקרא "שילוב צבעים מלאכותיים". כאן מתוארים עוד כמה שילובים מעניינים של צבעים מלאכותיים.

מכיוון ש-Earth Engine נועד לבצע ניתוחים בקנה מידה גדול, אתם לא מוגבלים לעבודה עם סצנה אחת בלבד. עכשיו הגיע הזמן להציג אוסף שלם כקומפוזיציית RGB.

מוצגים אוספי תמונות

הוספת אוסף תמונות למפה דומה להוספת תמונה למפה. לדוגמה, שימוש בתמונות משנת 2016 באוסף l8 ובאובייקט visParams שהוגדר קודם:

Code Editor (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var landsat2016 = l8.filterDate('2016-01-01', '2016-12-31');
Map.addLayer(landsat2016, visParams, 'l8 collection');

שימו לב שעכשיו אפשר להקטין את התצוגה ולראות פסיפס רציף שבו נאספו תמונות Landsat (כלומר מעל היבשה). שימו לב גם שכאשר משתמשים בכרטיסייה Inspector ולוחצים על התמונה, רואים רשימה של ערכי פיקסלים (או תרשים) בקטע Pixels ורשימה של אובייקטים של תמונות בקטע Objects של הכלי לבדיקה.

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