פעולות יחסיות, מותנות ובוליאניות

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

אופרטורים יחסיים ובוליאניים

שיטות יחסיות כוללות:

eq(), gt(), gte(), lt() וגם lte()

שיטות בוליאניות כוללות:

Code Editor‏ (JavaScript)

and(),‏or() וגם not()

Colab (Python)

And(),‏Or() וגם Not()

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

Code Editor‏ (JavaScript)

// Load a Landsat 8 image.
var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318');

// Create NDVI and NDWI spectral indices.
var ndvi = image.normalizedDifference(['B5', 'B4']);
var ndwi = image.normalizedDifference(['B3', 'B5']);

// Create a binary layer using logical operations.
var bare = ndvi.lt(0.2).and(ndwi.lt(0));

// Mask and display the binary layer.
Map.setCenter(-122.3578, 37.7726, 12);
Map.setOptions('satellite');
Map.addLayer(bare.selfMask(), {}, 'bare');

הגדרת Python

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

import ee
import geemap.core as geemap

Colab (Python)

# Load a Landsat 8 image.
image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318')

# Create NDVI and NDWI spectral indices.
ndvi = image.normalizedDifference(['B5', 'B4'])
ndwi = image.normalizedDifference(['B3', 'B5'])

# Create a binary layer using logical operations.
bare = ndvi.lt(0.2).And(ndwi.lt(0))

# Define a map centered on San Francisco Bay.
map_bare = geemap.Map(center=[37.7726, -122.3578], zoom=12)

# Add the masked image layer to the map and display it.
map_bare.add_layer(bare.selfMask(), None, 'bare')
display(map_bare)

כפי שמוצג בדוגמה הזו, הפלט של אופרטורים יחסיים ובוליאניים הוא true (1) או false (0). כדי להסתיר את האפסים, אפשר להשתמש ב-selfMask() כדי להסתיר את קובץ האימג' הבינארי שנוצר באמצעות עצמו.

relational_sf
מדדי NDVI ו-NDWI נמוכים (לבנים) מ-Landsat 8, סן פרנסיסקו, קליפורניה, ארה"ב.

אפשר להשתמש בתמונות הבינאריות שמוחזרות על ידי אופרטורים יחסיים ובוליאניים עם אופרטורים מתמטיים. בדוגמה הזו נוצרות תחנות עיור בתמונה של אורות בלילה באמצעות אופרטורים יחסיים ו-add():

Code Editor‏ (JavaScript)

// Load a 2012 nightlights image.
var nl2012 = ee.Image('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS/F182012');
var lights = nl2012.select('stable_lights');

// Define arbitrary thresholds on the 6-bit stable lights band.
var zones = lights.gt(30).add(lights.gt(55)).add(lights.gt(62));

// Display the thresholded image as three distinct zones near Paris.
var palette = ['000000', '0000FF', '00FF00', 'FF0000'];
Map.setCenter(2.373, 48.8683, 8);
Map.addLayer(zones, {min: 0, max: 3, palette: palette}, 'development zones');

הגדרת Python

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

import ee
import geemap.core as geemap

Colab (Python)

# Load a 2012 nightlights image.
nl_2012 = ee.Image('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS/F182012')
lights = nl_2012.select('stable_lights')

# Define arbitrary thresholds on the 6-bit stable lights band.
zones = lights.gt(30).add(lights.gt(55)).add(lights.gt(62))

# Define a map centered on Paris, France.
map_zones = geemap.Map(center=[48.8683, 2.373], zoom=8)

# Display the thresholded image as three distinct zones near Paris.
palette = ['000000', '0000FF', '00FF00', 'FF0000']
map_zones.add_layer(
    zones, {'min': 0, 'max': 3, 'palette': palette}, 'development zones'
)
display(map_zones)

אופרטורים מותנים

שימו לב שהקוד בדוגמה הקודמת שווה ערך לשימוש באופרטור טרינרי שמוטמע באמצעות expression():

Code Editor‏ (JavaScript)

// Create zones using an expression, display.
var zonesExp = nl2012.expression(
    "(b('stable_lights') > 62) ? 3" +
      ": (b('stable_lights') > 55) ? 2" +
        ": (b('stable_lights') > 30) ? 1" +
          ": 0"
);
Map.addLayer(zonesExp,
             {min: 0, max: 3, palette: palette},
             'development zones (ternary)');

הגדרת Python

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

import ee
import geemap.core as geemap

Colab (Python)

# Create zones using an expression, display.
zones_exp = nl_2012.expression(
    "(b('stable_lights') > 62) ? 3 "
    ": (b('stable_lights') > 55) ? 2 "
    ": (b('stable_lights') > 30) ? 1 "
    ': 0'
)

# Define a map centered on Paris, France.
map_zones_exp = geemap.Map(center=[48.8683, 2.373], zoom=8)

# Add the image layer to the map and display it.
map_zones_exp.add_layer(
    zones_exp, {'min': 0, 'max': 3, 'palette': palette}, 'zones exp'
)
display(map_zones_exp)

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

conditional_paris
תחומים שרירותיים של תמונות של אורות לילה מ-2012 בפריז, צרפת.

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

Code Editor‏ (JavaScript)

// Load a cloudy Sentinel-2 image.
var image = ee.Image(
  'COPERNICUS/S2_SR/20210114T185729_20210114T185730_T10SEG');
Map.addLayer(image,
             {bands: ['B4', 'B3', 'B2'], min: 0, max: 2000},
             'original image');

// Load another image to replace the cloudy pixels.
var replacement = ee.Image(
  'COPERNICUS/S2_SR/20210109T185751_20210109T185931_T10SEG');

// Set cloudy pixels (greater than 5% probability) to the other image.
var replaced = image.where(image.select('MSK_CLDPRB').gt(5), replacement);

// Display the result.
Map.setCenter(-122.3769, 37.7349, 11);
Map.addLayer(replaced,
             {bands: ['B4', 'B3', 'B2'], min: 0, max: 2000},
             'clouds replaced');

הגדרת Python

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

import ee
import geemap.core as geemap

Colab (Python)

# Load a cloudy Sentinel-2 image.
image = ee.Image('COPERNICUS/S2_SR/20210114T185729_20210114T185730_T10SEG')

# Load another image to replace the cloudy pixels.
replacement = ee.Image(
    'COPERNICUS/S2_SR/20210109T185751_20210109T185931_T10SEG'
)

# Set cloudy pixels (greater than 5% probability) to the other image.
replaced = image.where(image.select('MSK_CLDPRB').gt(5), replacement)

# Define a map centered on San Francisco Bay.
map_replaced = geemap.Map(center=[37.7349, -122.3769], zoom=11)

# Display the images on a map.
vis_params = {'bands': ['B4', 'B3', 'B2'], 'min': 0, 'max': 2000}
map_replaced.add_layer(image, vis_params, 'original image')
map_replaced.add_layer(replaced, vis_params, 'clouds replaced')
display(map_replaced)