Toán tử quy chiếu, có điều kiện và Boolean

Các đối tượng ee.Image có một tập hợp các phương thức quy chiếu, có điều kiện và boolean để tạo biểu thức ra quyết định. Kết quả của các phương thức này rất hữu ích để giới hạn việc phân tích ở một số pixel hoặc vùng nhất định thông qua việc che khuất, phát triển bản đồ được phân loại và gán lại giá trị.

Toán tử quy chiếu và boolean

Các phương thức Tương quan bao gồm:

eq(), gt(), gte(), lt()lte()

Các phương thức Boolean bao gồm:

Trình soạn thảo mã (JavaScript)

and(),or()not()

Colab (Python)

And(),Or()Not()

Để so sánh từng pixel giữa các hình ảnh, hãy sử dụng toán tử quy chiếu. Để trích xuất các khu vực đô thị trong hình ảnh, ví dụ này sử dụng các toán tử quy chiếu để đặt ngưỡng cho các chỉ số phổ, kết hợp các ngưỡng với toán tử and (và):

Trình soạn thảo mã (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');

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

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)

Như minh hoạ trong ví dụ này, kết quả của toán tử quy chiếu và toán tử boolean là đúng (1) hoặc sai (0). Để che các số 0, bạn có thể che hình ảnh nhị phân thu được bằng chính hình ảnh đó bằng cách sử dụng selfMask().

relational_sf
NDVI thấp và NDWI thấp (màu trắng) từ Landsat 8, San Francisco, California, Hoa Kỳ.

Bạn có thể sử dụng hình ảnh nhị phân do toán tử quy chiếu và toán tử boolean trả về với các toán tử số học. Ví dụ này tạo các khu đô thị trong hình ảnh ánh sáng ban đêm bằng cách sử dụng toán tử quy chiếu và add():

Trình soạn thảo mã (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');

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

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)

Toán tử có điều kiện

Xin lưu ý rằng mã trong ví dụ trước tương đương với việc sử dụng toán tử ba ngôi do expression() triển khai:

Trình soạn thảo mã (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)');

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

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)

Hãy quan sát rằng trong ví dụ về biểu thức trước, dải tần quan tâm được tham chiếu bằng hàm b(), thay vì từ điển tên biến. Tìm hiểu thêm về biểu thức hình ảnh trên trang này. Việc sử dụng toán tử toán học hoặc biểu thức sẽ cho ra kết quả giống nhau.

conditional_paris
Các khu vực tuỳ ý của hình ảnh ánh sáng ban đêm năm 2012 cho Paris, Pháp.

Một cách khác để triển khai các phép toán có điều kiện trên hình ảnh là sử dụng toán tử where(). Cân nhắc việc cần thay thế các pixel được che bằng một số dữ liệu khác. Trong ví dụ sau, các pixel có mây được thay thế bằng các pixel từ hình ảnh không có mây bằng cách sử dụng where():

Trình soạn thảo mã (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');

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

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)