Неконтролируемая классификация (кластеризация)

Пакет ee.Clusterer обеспечивает неконтролируемую классификацию (или кластеризацию ) в Earth Engine. Эти алгоритмы на данный момент основаны на одноименных алгоритмах в Weka . Более подробная информация о каждом Clusterer доступна в справочной документации .

Кластереры используются так же, как классификаторы в Earth Engine. Общий рабочий процесс кластеризации следующий:

  1. Соберите объекты с числовыми свойствами, в которых можно найти кластеры.
  2. Создайте экземпляр кластеризатора. При необходимости задайте его параметры.
  3. Обучите кластеризатор, используя обучающие данные.
  4. Примените кластеризатор к изображению или коллекции объектов.
  5. Обозначьте кластеры.

Данные обучения представляют собой FeatureCollection со свойствами, которые будут вводиться в кластеризатор. В отличие от классификаторов, для Clusterer не существует входного значения класса. Как и в случае с классификаторами, ожидается, что данные для шагов обучения и применения будут иметь одинаковое количество значений. Когда обученный кластеризатор применяется к изображению или таблице, он присваивает целочисленный идентификатор кластера каждому пикселю или объекту.

Вот простой пример создания и использования ee.Clusterer :

Редактор кода (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 Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

# 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 полосами * 100 тыс. точек может привести к ошибке «Недостаточно памяти».
  • Создание паутины может занять много времени и может создать большое количество кластеров.
  • Выходные кластеры и их идентификаторы зависят от алгоритма и входных данных.