Classification non supervisée (clustering)

Le package ee.Clusterer gère la classification non supervisée (ou clustering) dans Earth Engine. Ces algorithmes sont actuellement basés sur les algorithmes du même nom dans Weka. Des informations plus détaillées sur chaque Clusterer sont disponibles dans la documentation de référence.

Les algorithmes de clustering sont utilisés de la même manière que les classificateurs dans Earth Engine. Le workflow général pour le clustering est le suivant:

  1. Rassemblez des éléments géographiques avec des propriétés numériques pour trouver des clusters.
  2. Instancier un regroupeur. Définissez ses paramètres si nécessaire.
  3. Entraînez le clustereur à l'aide des données d'entraînement.
  4. Appliquez le clustereur à une image ou à une collection d'éléments géographiques.
  5. Attribuez un libellé aux clusters.

Les données d'entraînement sont un FeatureCollection avec des propriétés qui seront transmises au clustereur. Contrairement aux classificateurs, il n'existe aucune valeur de classe d'entrée pour un Clusterer. Comme pour les classificateurs, les données des étapes d'entraînement et d'application doivent avoir le même nombre de valeurs. Lorsqu'un outil de clustering entraîné est appliqué à une image ou à un tableau, il attribue un ID de cluster entier à chaque pixel ou caractéristique.

Voici un exemple simple de création et d'utilisation d'un ee.Clusterer:

Éditeur de code (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');

Configuration de Python

Consultez la page Environnement Python pour en savoir plus sur l'API Python et l'utilisation de geemap pour le développement interactif.

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

Remarque :

  • Les mêmes entrées doivent toujours produire les mêmes sorties, mais le réordonnancement des entrées peut modifier les résultats.
  • L'entraînement avec seulement 10 bandes * 100 000 points peut générer une erreur de mémoire insuffisante.
  • L'algorithme Cobweb peut prendre beaucoup de temps et générer un grand nombre de clusters.
  • Les clusters de sortie et leurs ID dépendent de l'algorithme et des entrées.