Statistiken zu einer Bildregion

reduceRegion

Wenn Sie Statistiken zu Pixelwerten in einer Region eines ee.Image abrufen möchten, verwenden Sie image.reduceRegion(). Dadurch werden alle Pixel in der Region(en) auf eine Statistik oder eine andere kompakte Darstellung der Pixeldaten in der Region reduziert (z.B. Histogramm). Die Region wird als Geometry dargestellt, die ein Polygon mit vielen Pixeln oder ein einzelner Punkt sein kann. In diesem Fall gibt es nur ein Pixel in der Region. In beiden Fällen ist die Ausgabe, wie in Abbildung 1 dargestellt, eine Statistik, die aus den Pixeln in der Region abgeleitet wird.

Diagramm „reduceRegion“
Abbildung 1. Eine Abbildung eines ee.Reducer, der auf ein Bild und eine Region angewendet wird.

Ein Beispiel für das Abrufen von Pixelstatistiken in einer Region eines Bildes mit reduceRegion() ist das Ermitteln der mittleren Spektral werte eines 5-jährigen Landsat-Composites innerhalb der Grenzen des Sierra Nevada Coniferous Forest (siehe Abbildung 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);

Um die Berechnung zu erzwingen, reicht es aus, das Ergebnis auszugeben. Der Code-Editor zeigt es dann als Dictionary in der Konsole an. Die Ausgabe sollte in etwa so aussehen:

B1: 25.406029716816853
B2: 23.971497014238988
B3: 22.91059593763103
B4: 54.83164133293403
B5: 38.07655472573677
B6_VCID_2: 198.93216428012906
B7: 24.063261634961563
Diagramm „reduceRegion“
Abbildung 2. Falschfarben-Composite der Landsat-Bilddaten für Kalifornien und Nevada. Die Region, über die reduziert werden soll, ist weiß dargestellt.

In diesem Beispiel wird die Reduzierung durch Angabe von reducer (ee.Reducer.mean()), geometry (region.geometry()), scale (30 Meter) und maxPixels für die maximale Anzahl von Pixeln, die in den Reducer eingegeben werden sollen, festgelegt. In reduceRegion() Aufrufen sollte immer eine Skalierung angegeben werden. Bei komplexen Verarbeitungsabläufen, die Daten aus verschiedenen Quellen mit unterschiedlichen Skalierungen umfassen können, lässt sich die Skalierung der Ausgabe nicht eindeutig aus den Eingaben bestimmen. In diesem Fall wird standardmäßig die Skalierung 1 Grad verwendet, was in der Regel zu unbefriedigenden Ergebnissen führt. Weitere Informationen zur Verarbeitung von Skalierungen in Earth Engine finden Sie auf dieser Seite.

Es gibt zwei Möglichkeiten, die Skalierung festzulegen: durch Angabe des Parameters scale oder durch Angabe eines CRS und einer CRS-Transformation. Weitere Informationen zu CRS und CRS-Transformationen finden Sie in the glossary for more information about CRS's and CRS transforms). Die Reduzierung meanDictionary (siehe oben) entspricht beispielsweise Folgendem:

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

Im Allgemeinen reicht es aus, die Skalierung anzugeben. Das führt zu besser lesbarem Code. Earth Engine bestimmt, welche Pixel in den Reducer eingegeben werden sollen, indem zuerst die Region gerastert wird. Wenn eine Skalierung ohne CRS angegeben wird, wird die Region in der nativen Projektion des Bildes gerastert, skaliert auf die angegebene Auflösung. Wenn sowohl ein CRS als auch eine Skalierung angegeben werden, wird die Region anhand dieser Werte gerastert.

Pixel in der Region

Pixel werden gemäß den folgenden Regeln als in der Region befindlich bestimmt und gewichtet: angewendet in der angegebenen Skalierung und Projektion:

  • Ungewichtete Reducer (z.B. ee.Reducer.count() oder ee.Reducer.mean().unweighted()): Pixel werden einbezogen, wenn ihr Schwerpunkt in der Region liegt und die Maske des Bildes nicht null ist.
  • Gewichtete Reducer (z.B. ee.Reducer.mean()): Pixel werden einbezogen, wenn mindestens (ungefähr) 1/256 (~0,4%) des Pixels in der Region liegt und die Maske des Bildes nicht null ist.Das Gewicht ist das Minimum der Maske des Bildes und des (ungefähren) Anteils des Pixels, der von der Region abgedeckt wird. Pixel-Schnittgewichte werden intern als 8-Bit-Ganzzahlen (0 bis 255) dargestellt, wobei die fraktionale Abdeckung in 256 diskrete Stufen quantisiert wird.

Der Parameter maxPixels ist erforderlich, damit die Berechnung erfolgreich ist. Wenn dieser Parameter im Beispiel fehlt, wird ein Fehler zurückgegeben, der in etwa so aussieht:

Es gibt mehrere Möglichkeiten, diese Fehler zu beheben: Erhöhen Sie maxPixels, wie im Beispiel, erhöhen Sie die scale oder setzen Sie bestEffort auf „true“. Dadurch wird automatisch eine neue (größere) Skalierung berechnet, sodass maxPixels nicht überschritten wird. Wenn Sie maxPixels nicht angeben, wird der Standardwert verwendet.