Classificazione non supervisionata (clustering)

Il pacchetto ee.Clusterer gestisce la classificazione non supervisionata (o clustering) in Earth Engine. Al momento, questi algoritmi si basano su quelli con lo stesso nome in Weka. Ulteriori dettagli su ogni Clusterer sono disponibili nella documentazione di riferimento.

I raggruppamenti vengono utilizzati nello stesso modo dei classificatori in Earth Engine. Il flusso di lavoro generale per il clustering è:

  1. Assembla funzionalità con proprietà numeriche in cui trovare cluster.
  2. Esegui l'istanza di un raggruppatore. Imposta i relativi parametri, se necessario.
  3. Addestra il clusterer utilizzando i dati di addestramento.
  4. Applica il clusterer a un'immagine o a una raccolta di elementi.
  5. Etichetta i cluster.

I dati di addestramento sono un FeatureCollection con proprietà che verranno inserite nell'aggregatore in cluster. A differenza dei classificatori, non esiste un valore della classe di input per un Clusterer. Come per i classificatori, i dati per gli step di addestramento e applicazione dovrebbero avere lo stesso numero di valori. Quando un clusterer addestrato viene applicato a un'immagine o a una tabella, assegna un ID cluster intero a ogni pixel o elemento.

Ecco un semplice esempio di creazione e utilizzo di un ee.Clusterer:

Editor di codice (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');

Configurazione di Python

Per informazioni sull'API Python e sull'utilizzo di geemap per lo sviluppo interattivo, consulta la pagina Ambiente 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

Tieni presente quanto segue:

  • Gli stessi input dovrebbero sempre produrre gli stessi output, ma l'ordinamento degli input può modificare i risultati.
  • L'addestramento con un numero minimo di 10 bande * 100.000 punti può produrre un errore di memoria insufficiente.
  • La ricerca di ragnatela può richiedere molto tempo e può produrre un numero elevato di cluster.
  • I cluster di output e i relativi ID dipendono dall'algoritmo e dagli input.