Tổng quan về phương thức giảm

Hàm giảm là cách tổng hợp dữ liệu theo thời gian, không gian, dải, mảng và các cấu trúc dữ liệu khác trong Earth Engine. Lớp ee.Reducer chỉ định cách tổng hợp dữ liệu. Các hàm giảm trong lớp này có thể chỉ định một số liệu thống kê đơn giản để sử dụng cho tính năng tổng hợp (ví dụ: tối thiểu, tối đa, trung bình, trung vị, độ lệch chuẩn, v.v.) hoặc một bản tóm tắt phức tạp hơn về dữ liệu đầu vào (ví dụ: biểu đồ thanh, hồi quy tuyến tính, danh sách). Việc giảm có thể xảy ra theo thời gian (imageCollection.reduce()), không gian (image.reduceRegion(), image.reduceNeighborhood()), dải (image.reduce()) hoặc không gian thuộc tính của FeatureCollection (featureCollection.reduceColumns() hoặc phương thức FeatureCollection bắt đầu bằng aggregate_).

Hàm giảm có dữ liệu đầu vào và đầu ra

Hàm giảm lấy một tập dữ liệu đầu vào và tạo ra một kết quả duy nhất. Khi một bộ giảm dữ liệu đầu vào được áp dụng cho hình ảnh nhiều băng tần, Earth Engine sẽ tự động sao chép bộ giảm dữ liệu đó và áp dụng riêng cho từng băng tần. Do đó, hình ảnh đầu ra có cùng số lượng dải với hình ảnh đầu vào; mỗi dải trong đầu ra là sự giảm số pixel từ dải tương ứng trong dữ liệu đầu vào. Một số hàm giảm lấy các bộ dữ liệu đầu vào. Các bộ giảm này sẽ không được tự động sao chép cho từng dải tần. Ví dụ: ee.Reducer.LinearRegression() lấy nhiều tập dữ liệu dự đoán (đại diện cho các biến độc lập trong hồi quy) theo thứ tự cụ thể (xem Bộ giảm hồi quy).

Một số trình giảm thiểu tạo ra nhiều đầu ra, ví dụ: ee.Reducer.minMax(), ee.Reducer.histogram() hoặc ee.Reducer.toList(). Ví dụ:

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

// Load and filter the Sentinel-2 image collection.
var collection = ee.ImageCollection('COPERNICUS/S2_HARMONIZED')
    .filterDate('2016-01-01', '2016-12-31')
    .filterBounds(ee.Geometry.Point([-81.31, 29.90]));

// Reduce the collection.
var extrema = collection.reduce(ee.Reducer.minMax());

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 and filter the Sentinel-2 image collection.
collection = (
    ee.ImageCollection('COPERNICUS/S2_HARMONIZED')
    .filterDate('2016-01-01', '2016-12-31')
    .filterBounds(ee.Geometry.Point([-81.31, 29.90]))
)

# Reduce the collection.
extrema = collection.reduce(ee.Reducer.minMax())

Thao tác này sẽ tạo ra một đầu ra có số lượng dải gấp đôi số lượng dải đầu vào, trong đó tên dải trong đầu ra có "_min" hoặc "_max" được thêm vào tên dải.

Loại đầu ra phải khớp với phép tính. Ví dụ: một bộ giảm áp được áp dụng cho ImageCollection có đầu ra Image. Vì đầu ra được diễn giải dưới dạng giá trị pixel, nên bạn phải sử dụng các trình giảm có đầu ra dạng số để giảm ImageCollection (các trình giảm như toList() hoặc histogram() sẽ không hoạt động).

Trình giảm thiểu sử dụng dữ liệu đầu vào có trọng số

Theo mặc định, các giá trị giảm trên pixel được tính trọng số theo mặt nạ của chúng, mặc dù bạn có thể thay đổi hành vi này (xem phần Trọng số). Các pixel có mặt nạ bằng 0 sẽ không được dùng trong quá trình giảm.

Kết hợp các reducer

Nếu bạn muốn áp dụng nhiều trình giảm cho cùng một dữ liệu đầu vào, bạn nên combine() các trình giảm để đạt được hiệu quả. Cụ thể, việc gọi combine() trên một trình giảm với sharedInputs được đặt thành true sẽ chỉ dẫn đến một lượt truyền dữ liệu. Ví dụ: để tính toán giá trị trung bình và độ lệch chuẩn của các pixel trong một hình ảnh, bạn có thể sử dụng nội dung như sau:

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

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

// Combine the mean and standard deviation reducers.
var reducers = ee.Reducer.mean().combine({
  reducer2: ee.Reducer.stdDev(),
  sharedInputs: true
});

// Use the combined reducer to get the mean and SD of the image.
var stats = image.reduceRegion({
  reducer: reducers,
  bestEffort: true,
});

// Display the dictionary of band means and SDs.
print(stats);

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/LC08_044034_20140318')

# Combine the mean and standard deviation reducers.
reducers = ee.Reducer.mean().combine(
    reducer2=ee.Reducer.stdDev(), sharedInputs=True
)

# Use the combined reducer to get the mean and SD of the image.
stats = image.reduceRegion(reducer=reducers, bestEffort=True)

# Display the dictionary of band means and SDs.
display(stats)

Trong kết quả, hãy lưu ý rằng tên của các hàm giảm đã được thêm vào tên của các đầu vào để phân biệt đầu ra của hàm giảm. Hành vi này cũng áp dụng cho đầu ra hình ảnh, trong đó tên của bộ giảm sẽ được thêm vào tên dải đầu ra.

Nếu bạn đang kết hợp các trình giảm sử dụng dữ liệu đầu vào không có trọng số và các trình giảm sử dụng dữ liệu đầu vào có trọng số, thì tất cả dữ liệu đầu vào có trọng số phải đứng trước tất cả dữ liệu đầu vào không có trọng số.