การดำเนินการแบบสัมพันธ์ แบบมีเงื่อนไข และบูลีน

ออบเจ็กต์ ee.Image มีชุดเมธอดเชิงสัมพันธ์ เงื่อนไข และบูลีนสำหรับสร้างนิพจน์การตัดสินใจ ผลลัพธ์ของวิธีการเหล่านี้มีประโยชน์ในการจํากัดการวิเคราะห์ให้อยู่เฉพาะบางพิกเซลหรือบางภูมิภาคผ่านการมาสก์ การพัฒนาแผนที่ที่จัดประเภท และการกําหนดค่าใหม่

โอเปอเรเตอร์เชิงสัมพันธ์และบูลีน

วิธีการเชิงสัมพันธ์ ได้แก่

eq(), gt(), gte(), lt() และ lte()

วิธีการของบูลีน ได้แก่

เครื่องมือแก้ไขโค้ด (JavaScript)

and(),or() และ not()

Colab (Python)

And(),Or() และ Not()

หากต้องการทำการเปรียบเทียบแบบพิกเซลต่อพิกเซลระหว่างรูปภาพ ให้ใช้โอเปอเรเตอร์เชิงสัมพันธ์ หากต้องการดึงข้อมูลพื้นที่เมืองในรูปภาพ ตัวอย่างนี้ใช้โอเปอเรเตอร์เชิงสัมพันธ์เพื่อกำหนดเกณฑ์ดัชนีสเปกตรัม โดยรวมเกณฑ์เข้ากับโอเปอเรเตอร์ and ดังนี้

เครื่องมือแก้ไขโค้ด (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 API และการใช้ geemap สําหรับการพัฒนาแบบอินเทอร์แอกทีฟได้ที่หน้า สภาพแวดล้อม Python

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)

ดังที่แสดงในตัวอย่างนี้ เอาต์พุตของโอเปอเรเตอร์เชิงสัมพันธ์และบูลีนจะเป็นจริง (1) หรือเท็จ (0) หากต้องการมาสก์ 0 ให้มาสก์รูปภาพไบนารีที่ได้โดยใช้รูปภาพนั้นเองด้วย selfMask()

relational_sf
NDVI และ NDWI ต่ำ (สีขาว) จาก Landsat 8, ซานฟรานซิสโก, รัฐแคลิฟอร์เนีย, สหรัฐอเมริกา

รูปภาพไบนารีที่แสดงผลโดยโอเปอเรเตอร์เชิงสัมพันธ์และบูลีนสามารถใช้ร่วมกับโอเปอเรเตอร์ทางคณิตศาสตร์ได้ ตัวอย่างนี้สร้างโซนเมืองในรูปภาพแสงไฟยามค่ำคืนโดยใช้โอเปอเรเตอร์เชิงสัมพันธ์และ add()

เครื่องมือแก้ไขโค้ด (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 API และการใช้ geemap สําหรับการพัฒนาแบบอินเทอร์แอกทีฟได้ที่หน้า สภาพแวดล้อม Python

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)

โอเปอเรเตอร์แบบมีเงื่อนไข

โปรดทราบว่าโค้ดในตัวอย่างก่อนหน้านี้เทียบเท่ากับการใช้โอเปอเรเตอร์แบบ 3 เงื่อนไขที่ expression() นำมาใช้ ดังนี้

เครื่องมือแก้ไขโค้ด (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 API และการใช้ geemap สําหรับการพัฒนาแบบอินเทอร์แอกทีฟได้ที่หน้า สภาพแวดล้อม Python

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()

เครื่องมือแก้ไขโค้ด (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 API และการใช้ geemap สําหรับการพัฒนาแบบอินเทอร์แอกทีฟได้ที่หน้า สภาพแวดล้อม Python

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)