Classificação não supervisionada (agrupamento)

O pacote ee.Clusterer processa a classificação não supervisionada (ou agrupamento) no Earth Engine. Atualmente, esses algoritmos são baseados nos algoritmos com o mesmo nome no Weka. Mais detalhes sobre cada Clusterer estão disponíveis nos documentos de referência.

Os clusterizadores são usados da mesma forma que os classificadores no Earth Engine. O fluxo de trabalho geral para agrupamento é o seguinte:

  1. Monte recursos com propriedades numéricas para encontrar clusters.
  2. Instanciar um clusterer. Defina os parâmetros, se necessário.
  3. Treine o clusterizador usando os dados de treinamento.
  4. Aplique o clusterizador a uma imagem ou coleção de elementos.
  5. Rotule os clusters.

Os dados de treinamento são um FeatureCollection com propriedades que serão inseridas no clusterizador. Ao contrário dos classificadores, não há um valor de classe de entrada para um Clusterer. Assim como os classificadores, os dados das etapas de treinamento e aplicação precisam ter o mesmo número de valores. Quando um clusterizador treinado é aplicado a uma imagem ou tabela, ele atribui um ID de cluster de número inteiro a cada pixel ou elemento.

Confira um exemplo simples de como criar e usar uma ee.Clusterer:

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

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

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

Observação:

  • As mesmas entradas sempre precisam produzir as mesmas saídas, mas a reordenação das entradas pode mudar os resultados.
  • O treinamento com até 10 bandas * 100 mil pontos pode produzir um erro de falta de memória.
  • A teia de aranha pode levar muito tempo para ser concluída e produzir um grande número de clusters.
  • Os clusters de saída e os IDs deles dependem do algoritmo e das entradas.