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 den Regionen auf eine Statistik oder eine andere kompakte Darstellung der Pixeldaten in der Region reduziert (z.B. Histogramm). Die Region wird als Geometry dargestellt. Das kann ein Polygon mit vielen Pixeln oder ein einzelner Punkt sein. 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, das auf ein Bild und eine Region angewendet wird.

Ein Beispiel für die Verwendung von reduceRegion() zum Abrufen von Pixelstatistiken in einer Region eines Bildes ist die Ermittlung der durchschnittlichen Spektralwerte eines 5-jährigen Landsat-Composites innerhalb der Grenzen des Nadelwalds der Sierra Nevada (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 zu drucken, das im Code-Editor als Dictionary in der Konsole angezeigt wird. 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. Falschfarbenbild der Landsat-Bilddaten für Kalifornien und Nevada. Der Bereich, in dem die Verringerung erfolgen soll, wird weiß dargestellt.

In diesem Beispiel wird die Reduzierung durch Angabe der reducer (ee.Reducer.mean()), der geometry (region.geometry()), der scale (30 Meter) und der maxPixels für die maximale Anzahl von Pixeln angegeben, die in den Reduzierer eingegeben werden sollen. Bei reduceRegion()-Aufrufen sollte immer eine Skala angegeben werden. Das liegt daran, dass bei komplexen Verarbeitungsabläufen, die Daten aus verschiedenen Quellen mit unterschiedlichen Skalen umfassen können, die Skalierung der Ausgabe nicht eindeutig anhand der Eingaben bestimmt werden kann. In diesem Fall wird die Skala standardmäßig auf 1 Grad festgelegt, was in der Regel zu unbefriedigenden Ergebnissen führt. Auf dieser Seite finden Sie weitere Informationen dazu, wie die Earth Engine mit Skalierung umgeht.

Es gibt zwei Möglichkeiten, den Maßstab festzulegen: durch Angabe des Parameters scale oder durch Angabe eines CRS und einer CRS-Transformation. Weitere Informationen zu CRS und CRS-Transformationen finden Sie im Glossar. Die meanDictionary-Reduktion (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 Skala anzugeben, was zu einem besser lesbaren Code führt. Earth Engine bestimmt, welche Pixel in den Reduzierer eingegeben werden sollen, indem die Region zuerst gerastert wird. Wenn ein Maßstab ohne ein CRS angegeben wird, wird die Region in der nativen Projektion des Bildes gerastert und auf die angegebene Auflösung skaliert. Wenn sowohl ein CRS als auch ein Maßstab angegeben sind, wird die Region anhand dieser Informationen gerastert.

Pixel in der Region

Pixels werden gemäß den folgenden Regeln, die im angegebenen Maßstab und der angegebenen Projektion angewendet werden, als zur Region gehörend eingestuft (und gewichtet):

  • Ungewichtete Reduzierer (z.B. ee.Reducer.count() oder ee.Reducer.mean().unweighted()): Pixel werden berücksichtigt, wenn sich ihr Schwerpunkt in der Region befindet und die Maske des Bilds nicht null ist.
  • Gewichtete Verringerer (z.B. ee.Reducer.mean()): Pixel werden berücksichtigt, wenn mindestens (ungefähr) 0,5% des Pixels in der Region liegen und die Maske des Bilds nicht null ist.Ihr Gewicht ist das Minimum aus der Maske des Bilds und dem (ungefähren) Anteil des Pixels, der von der Region abgedeckt wird.

Der Parameter maxPixels ist erforderlich, damit die Berechnung erfolgreich durchgeführt werden kann. 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: Sie können maxPixels erhöhen, wie im Beispiel, scale erhöhen oder bestEffort auf „wahr“ setzen. Dadurch wird automatisch eine neue (größere) Skala berechnet, sodass maxPixels nicht überschritten wird. Wenn Sie maxPixels nicht angeben, wird der Standardwert verwendet.