Statistiques sur les voisinages d'images

Plutôt que de spécifier une région sur laquelle effectuer une réduction, vous pouvez également spécifier un voisinage dans lequel appliquer un réducteur. Pour réduire les voisinages d'images, utilisez image.reduceNeighborhood(). Dans ce cas, la réduction se produit dans une fenêtre glissante sur l'image d'entrée, dont la taille et la forme sont spécifiées par un ee.Kernel. La sortie de reduceNeighborhood() sera une autre image, chaque valeur de pixel représentant la sortie de la réduction dans un voisinage autour de ce pixel dans l'image d'entrée. La figure 1 illustre ce type de réduction.

Diagramme reduceNeighborhood
Figure 1. Illustration de reduceNeighborhood(), où le réducteur est appliqué dans un noyau.

Par exemple, envisagez d'utiliser des images du programme NAIP (National Agriculture Imagery Program) pour quantifier les différences de paysage résultant de l'exploitation forestière dans les forêts de séquoias de Californie. Plus précisément, utilisez l'écart type (ET) dans un voisinage pour représenter la différence de texture entre la zone exploitée (sud-ouest de l'image de la figure 2) et la zone protégée (nord-est de l'image de la figure 2). Par exemple, pour obtenir la texture d'une image de l'indice de végétation par différence normalisée (NDVI) de la NAIP, utilisez reduceNeighborhood() pour calculer la SD dans un voisinage défini par un noyau:

Éditeur de code (JavaScript)

// Define a region in the redwood forest.
var redwoods = ee.Geometry.Rectangle(-124.0665, 41.0739, -123.934, 41.2029);

// Load input NAIP imagery and build a mosaic.
var naipCollection = ee.ImageCollection('USDA/NAIP/DOQQ')
  .filterBounds(redwoods)
  .filterDate('2012-01-01', '2012-12-31');
var naip = naipCollection.mosaic();

// Compute NDVI from the NAIP imagery.
var naipNDVI = naip.normalizedDifference(['N', 'R']);

// Compute standard deviation (SD) as texture of the NDVI.
var texture = naipNDVI.reduceNeighborhood({
  reducer: ee.Reducer.stdDev(),
  kernel: ee.Kernel.circle(7),
});

// Display the results.
Map.centerObject(redwoods, 12);
Map.addLayer(naip, {}, 'NAIP input imagery');
Map.addLayer(naipNDVI, {min: -1, max: 1, palette: ['FF0000', '00FF00']}, 'NDVI');
Map.addLayer(texture, {min: 0, max: 0.3}, 'SD of NDVI');

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 the redwood forest.
redwoods = ee.Geometry.Rectangle(-124.0665, 41.0739, -123.934, 41.2029)

# Load input NAIP imagery and build a mosaic.
naip_collection = (
    ee.ImageCollection('USDA/NAIP/DOQQ')
    .filterBounds(redwoods)
    .filterDate('2012-01-01', '2012-12-31')
)
naip = naip_collection.mosaic()

# Compute NDVI from the NAIP imagery.
naip_ndvi = naip.normalizedDifference(['N', 'R'])

# Compute standard deviation (SD) as texture of the NDVI.
texture = naip_ndvi.reduceNeighborhood(
    reducer=ee.Reducer.stdDev(), kernel=ee.Kernel.circle(7)
)

# Display the results.
m = geemap.Map()
m.center_object(redwoods, 12)
m.add_layer(naip, {}, 'NAIP input imagery')
m.add_layer(
    naip_ndvi, {'min': -1, 'max': 1, 'palette': ['FF0000', '00FF00']}, 'NDVI'
)
m.add_layer(texture, {'min': 0, 'max': 0.3}, 'SD of NDVI')
m

Tout pixel dont la valeur de noyau est non nulle est inclus dans le calcul. Les poids du noyau sont utilisés par défaut, mais vous pouvez modifier ce comportement avec l'argument inputWeight. La figure 2 compare l'image d'entrée et la sortie reduceNeighborhood().

input reduceNeighborhood
Figure 2a. Image NAIP de la côte nord de la Californie.
réduire la sortie de voisinage
Figure 2b. Sortie reduceNeighborhood() à l'aide d'un réducteur d'écart type.