Statistiques d'une région d'image

reduceRegion

Pour obtenir des statistiques sur les valeurs de pixels dans une région d'un ee.Image, utilisez image.reduceRegion(). Cela réduit tous les pixels de la ou des régions à une statistique ou à une autre représentation compacte des données de pixels dans la région (par exemple, un histogramme). La région est représentée par un Geometry, qui peut être un polygone contenant de nombreux pixels ou un point unique, auquel cas la région ne comportera qu'un seul pixel. Dans les deux cas, comme illustré à la figure 1, la sortie est une statistique dérivée des pixels de la région.

Diagramme reduceRegion
Figure 1. Illustration d'un ee.Reducer appliqué à une image et à une région.

Pour obtenir des statistiques sur les pixels dans une région d'une image à l'aide de reduceRegion(), considérez la recherche des valeurs spectrales moyennes d'un composite Landsat de cinq ans dans les limites de la forêt de conifères de la Sierra Nevada (illustrée par la figure 2) :

// Load input imagery: Landsat 7 5-year composite.
var image = ee.Image('LANDSAT/LE7_TOA_5YEAR/2008_2012');

// Load an input region: Sierra Nevada.
var region = ee.Feature(ee.FeatureCollection('EPA/Ecoregions/2013/L3')
  .filter(ee.Filter.eq('us_l3name', 'Sierra Nevada'))
  .first());

// Reduce the region. The region parameter is the Feature geometry.
var meanDictionary = image.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: region.geometry(),
  scale: 30,
  maxPixels: 1e9
});

// The result is a Dictionary.  Print it.
print(meanDictionary);

Pour forcer le calcul, il suffit d'imprimer le résultat, que l'éditeur de code affichera sous la forme d'un Dictionary dans la console. Le résultat devrait ressembler à ceci :

B1: 25.406029716816853
B2: 23.971497014238988
B3: 22.91059593763103
B4: 54.83164133293403
B5: 38.07655472573677
B6_VCID_2: 198.93216428012906
B7: 24.063261634961563
Diagramme reduceRegion
Figure 2. Composite en fausses couleurs des données d'images Landsat pour la Californie et le Nevada. La région à réduire est indiquée en blanc.

Notez que dans cet exemple, la réduction est spécifiée en fournissant reducer (ee.Reducer.mean()), geometry (region.geometry()), scale (30 mètres) et maxPixels pour le nombre maximal de pixels à saisir dans le réducteur. Une échelle doit toujours être spécifiée dans les appels reduceRegion(). En effet, dans les flux de traitement complexes, qui peuvent impliquer des données provenant de différentes sources avec des échelles différentes, l'échelle de la sortie ne sera pas déterminée de manière non ambiguë à partir des entrées. Dans ce cas, l'échelle est définie par défaut sur un degré, ce qui produit généralement des résultats insatisfaisants. Pour en savoir plus sur la façon dont Earth Engine gère l'échelle, consultez cette page.

Il existe deux façons de définir l'échelle : en spécifiant le paramètre scale ou en spécifiant un CRS et une transformation CRS. (Pour en savoir plus sur les CRS et les transformations CRS, consultez le glossaire.) Par exemple, la réduction meanDictionary (ci-dessus) équivaut à ce qui suit :

// As an alternative to specifying scale, specify a CRS and a CRS transform.
// Make this array by constructing a 4326 projection at 30 meters,
// then copying the bounds of the composite, from composite.projection().
var affine = [0.00026949458523585647, 0, -180, 0, -0.00026949458523585647, 86.0000269494563];

// Perform the reduction, print the result.
print(image.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: region.geometry(),
  crs: 'EPSG:4326',
  crsTransform: affine,
  maxPixels: 1e9
}));

En général, il suffit de spécifier l'échelle pour obtenir un code plus lisible. Earth Engine détermine les pixels à saisir dans le réducteur en rastérisant d'abord la région. Si une échelle est spécifiée sans CRS, la région est rastérisée dans la projection native de l'image, mise à l'échelle à la résolution spécifiée. Si un CRS et une échelle sont spécifiés, la région est rastérisée en fonction de ces valeurs.

Pixels dans la région

Les pixels sont considérés comme appartenant à la région (et sont pondérés) selon les règles suivantes, appliquées à l'échelle et à la projection spécifiées :

  • Réducteurs non pondérés (par exemple, ee.Reducer.count() ou ee.Reducer.mean().unweighted()) : les pixels sont inclus si leur centroïde se trouve dans la région et que le masque de l'image est non nul.
  • Réducteurs pondérés (par exemple, ee.Reducer.mean()) : les pixels sont inclus si au moins (environ) 1/256 (~0,4%) du pixel se trouve dans la région et si le masque de l'image est non nul. Leur pondération correspond au minimum du masque de l'image et de la fraction (approximative) du pixel couvert par la région. Les pondérations d'intersection des pixels sont représentées en interne sous forme d'entiers 8 bits (de 0 à 255), ce qui quantifie la couverture fractionnaire en 256 niveaux discrets.

Le paramètre maxPixels est nécessaire pour que le calcul aboutisse. Si ce paramètre est omis dans l'exemple, une erreur s'affiche, comme suit :

Plusieurs options permettent de résoudre ces erreurs : augmenter maxPixels, comme dans l'exemple, augmenter scale ou définir bestEffort sur "true", ce qui calcule automatiquement une nouvelle échelle (plus grande) de sorte que maxPixels ne soit pas dépassé. Si vous ne spécifiez pas maxPixels, la valeur par défaut est utilisée.