ee.Image.expression

Đánh giá một biểu thức số học trên hình ảnh, có thể liên quan đến các hình ảnh bổ sung.

Các dải của hình ảnh đầu vào chính có sẵn bằng cách sử dụng hàm tích hợp b(), dưới dạng b(0) hoặc b('band_name').

Các biến trong biểu thức được diễn giải là các tham số hình ảnh bổ sung mà bạn phải cung cấp trong opt_map. Bạn có thể truy cập vào các dải tần của từng hình ảnh như image.band_name hoặc image[0].

Cả b() và image[] đều cho phép nhiều đối số để chỉ định nhiều dải tần, chẳng hạn như b(1, "name", 3). Gọi b() mà không có đối số hoặc sử dụng một biến riêng lẻ sẽ trả về tất cả các dải tần của hình ảnh.

Nếu kết quả của một biểu thức là một dải tần duy nhất, thì bạn có thể chỉ định tên cho dải tần đó bằng toán tử "=" (ví dụ: x = a + b).

Trả về hình ảnh được tính toán bằng biểu thức đã cho.

Cách sử dụngGiá trị trả về
Image.expression(expression, map)Hình ảnh
Đối sốLoạiThông tin chi tiết
this: imageHình ảnhĐối tượng Image.
expressionChuỗiBiểu thức cần đánh giá.
mapDictionary<Image>, không bắt buộcBản đồ của hình ảnh đầu vào có sẵn theo tên.

Ví dụ

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

// The following expressions calculate the normalized difference vegetation
// index (NDVI): (NIR - Red) / (NIR + Red).
// NIR is Landsat 8 L2 band 'SR_B5', the 4th band index.
// Red is Landsat 8 L2 band 'SR_B4', the 3rd band index.

// A Landsat 8 L2 surface reflectance image.
var img = ee.Image('LANDSAT/LC08/C02/T1_L2/LC08_044034_20210508');

// Visualization parameters for NDVI.
var ndviVis = {min: 0, max: 0.5};

// Expression using image band indices.
var bandIndexExp = '(b(4) - b(3)) / (b(4) + b(3))';
var bandIndexImg = img.expression(bandIndexExp).rename('NDVI');
Map.setCenter(-122.14, 37.38, 11);
Map.addLayer(bandIndexImg, ndviVis, 'NDVI 1');

// Expression using image band names.
var bandNameExp = '(b("SR_B5") - b("SR_B4")) / (b("SR_B5") + b("SR_B4"))';
var bandNameImg = img.expression(bandNameExp).rename('NDVI');
Map.addLayer(bandNameImg, ndviVis, 'NDVI 2');

// Expression using named variables.
var namedVarsExp = '(NIR - Red) / (NIR + Red)';
var namedVarsImg = ee.Image().expression({
  expression: namedVarsExp,
  map: {
    NIR: img.select('SR_B5'),
    Red: img.select('SR_B4')
  }
}).rename('NDVI');
Map.addLayer(namedVarsImg, ndviVis, 'NDVI 3');

// Expression using named variables with image band access by dot notation.
var namedVarsDotExp = '(ls8.SR_B5 - ls8.SR_B4) / (ls8.SR_B5 + ls8.SR_B4)';
var namedVarsDotImg = ee.Image().expression({
  expression: namedVarsDotExp,
  map: {ls8: img}
}).rename('NDVI');
Map.addLayer(namedVarsDotImg, ndviVis, 'NDVI 4');

// Expressions can use arithmetic operators (+ - * / % **), relational
// operators (== != < > <= >=), logical operators (&& || ! ^), the ternary
// operator (condition ? ifTrue : ifFalse), and a subset of JavaScript Math
// functions. Math functions are called by name directly, they are not accessed
// from the Math object (e.g., sqrt() instead of Math.sqrt()).
var jsMathExp = 'c = sqrt(pow(a, 2) + pow(b, 2))';
var jsMathImg = ee.Image().expression({
  expression: jsMathExp,
  map: {
    a: ee.Image(5),
    b: img.select('SR_B2')
  }
});
Map.addLayer(jsMathImg, {min: 5000, max: 20000}, 'Hypotenuse', false);

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 cho quá trình phát triển tương tác.

import ee
import geemap.core as geemap

Colab (Python)

# The following expressions calculate the normalized difference vegetation
# index (NDVI): (NIR - Red) / (NIR + Red).
# NIR is Landsat 8 L2 band 'SR_B5', the 4th band index.
# Red is Landsat 8 L2 band 'SR_B4', the 3rd band index.

# A Landsat 8 L2 surface reflectance image.
img = ee.Image('LANDSAT/LC08/C02/T1_L2/LC08_044034_20210508')

# Visualization parameters for NDVI.
ndvi_vis = {'min': 0, 'max': 0.5}

# Expression using image band indices.
band_index_exp = '(b(4) - b(3)) / (b(4) + b(3))'
band_index_img = img.expression(band_index_exp).rename('NDVI')
m = geemap.Map()
m.set_center(-122.14, 37.38, 11)
m.add_layer(band_index_img, ndvi_vis, 'NDVI 1')

# Expression using image band names.
band_name_exp = '(b("SR_B5") - b("SR_B4")) / (b("SR_B5") + b("SR_B4"))'
band_name_img = img.expression(band_name_exp).rename('NDVI')
m.add_layer(band_name_img, ndvi_vis, 'NDVI 2')

# Expression using named variables.
named_vars_exp = '(NIR - Red) / (NIR + Red)'
named_vars_img = (
    ee.Image()
    .expression(
        expression=named_vars_exp,
        opt_map={'NIR': img.select('SR_B5'), 'Red': img.select('SR_B4')},
    )
    .rename('NDVI')
)
m.add_layer(named_vars_img, ndvi_vis, 'NDVI 3')

# Expression using named variables with image band access by dot notation.
named_vars_dot_exp = '(ls8.SR_B5 - ls8.SR_B4) / (ls8.SR_B5 + ls8.SR_B4)'
named_vars_dot_img = (
    ee.Image()
    .expression(expression=named_vars_dot_exp, opt_map={'ls8': img})
    .rename('NDVI')
)
m.add_layer(named_vars_dot_img, ndvi_vis, 'NDVI 4')

# Expressions can use arithmetic operators (+ - * / % **), relational
# operators (== != < > <= >=), logical operators (&& || ! ^), the ternary
# operator (condition ? ifTrue : ifFalse), and a subset of JavaScript Math
# functions. Math functions are called by name directly, they are not accessed
# from the Math object (e.g., sqrt() instead of Math.sqrt()).
js_math_exp = 'c = sqrt(pow(a, 2) + pow(b, 2))'
js_math_img = ee.Image().expression(
    expression=js_math_exp, opt_map={'a': ee.Image(5), 'b': img.select('SR_B2')}
)
m.add_layer(js_math_img, {'min': 5000, 'max': 20000}, 'Hypotenuse', False)
m