无监督分类(聚类)

ee.Clusterer 软件包在 Earth Engine 中处理无监督分类(或聚类)。这些算法目前基于 Weka 中同名的算法。如需详细了解每个 Clusterer,请参阅参考文档

在 Earth Engine 中,聚类器的使用方式与分类器相同。对数据进行分组的一般工作流程如下:

  1. 组合具有数值属性的特征,以便查找集群。
  2. 实例化分块器。根据需要设置其参数。
  3. 使用训练数据训练聚类器。
  4. 将聚类器应用于图像或地图项集合。
  5. 为集群添加标签。

训练数据是一个 FeatureCollection,其中包含将输入到聚类器的属性。与分类器不同,Clusterer 没有输入类值。与分类器一样,训练和应用步骤的数据应具有相同数量的值。将训练好的聚类器应用于图片或表格时,它会为每个像素或地图项分配一个整数聚类 ID。

下面是一个构建和使用 ee.Clusterer 的简单示例:

Code Editor (JavaScript)

// Define a region in which to generate a segmented map.
var region = ee.Geometry.Rectangle(29.7, 30, 32.5, 31.7);

// Load a Landsat composite for input.
var input = ee.ImageCollection('LANDSAT/COMPOSITES/C02/T1_L2_32DAY')
  .filterDate('2001-05', '2001-06')
  .first()
  .clip(region);

// Display the sample region.
Map.setCenter(31.5, 31.0, 8);
Map.addLayer(ee.Image().paint(region, 0, 2), {}, 'region');

// Make the training dataset.
var training = input.sample({
  region: region,
  scale: 30,
  numPixels: 5000
});

// Instantiate the clusterer and train it.
var clusterer = ee.Clusterer.wekaKMeans(15).train(training);

// Cluster the input using the trained clusterer.
var result = input.cluster(clusterer);

// Display the clusters with random colors.
Map.addLayer(result.randomVisualizer(), {}, 'clusters');

Python 设置

如需了解 Python API 以及如何使用 geemap 进行交互式开发,请参阅 Python 环境页面。

import ee
import geemap.core as geemap

Colab (Python)

# Define a region in which to generate a segmented map.
region = ee.Geometry.Rectangle(29.7, 30, 32.5, 31.7)

# Load a Landsat composite for input.
input = (
    ee.ImageCollection('LANDSAT/COMPOSITES/C02/T1_L2_32DAY')
    .filterDate('2001-05', '2001-06')
    .first()
    .clip(region)
)

# Display the sample region.
m = geemap.Map()
m.set_center(31.5, 31.0, 8)
m.add_layer(ee.Image().paint(region, 0, 2), {}, 'region')

# Make the training dataset.
training = input.sample(region=region, scale=30, numPixels=5000)

# Instantiate the clusterer and train it.
clusterer = ee.Clusterer.wekaKMeans(15).train(training)

# Cluster the input using the trained clusterer.
result = input.cluster(clusterer)

# Display the clusters with random colors.
m.add_layer(result.randomVisualizer(), {}, 'clusters')
m

请注意:

  • 相同的输入应始终生成相同的输出,但重新排列输入可能会改变结果。
  • 使用 10 个频段 * 10 万个点进行训练时,可能会产生内存不足错误。
  • Cobweb 可能需要很长时间才能完成,并且可能会生成大量集群。
  • 输出集群及其 ID 取决于算法和输入。