Statystyki regionu obrazu

reduceRegion

Aby uzyskać statystyki wartości pikseli w regionie ee.Image, użyj image.reduceRegion(). Spowoduje to zmniejszenie liczby pikseli w regionie(regionach) do statystyki lub innej zwartej reprezentacji danych pikseli w regionie (np. histogramu). Region jest reprezentowany jako Geometry, który może być wielokątem zawierającym wiele pikseli lub pojedynczym punktem. W tym drugim przypadku w regionie będzie tylko 1 piksel. W obu przypadkach, jak pokazano na ilustracji 1, wynikiem jest statystyka pochodząca z pikseli w regionie.

Diagram reduceRegion
Ilustracja 1. Ilustracja przedstawiająca an ee.Reducer zastosowany do obrazu and a region.

Aby zobaczyć przykład uzyskiwania statystyk pikseli w regionie obrazu za pomocą reduceRegion(), rozważmy znalezienie średnich wartości spektralnych 5-letniego kompozytu Landsat w granicach lasu iglastego Sierra Nevada (ilustracja 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);

Aby wymusić obliczenie, wystarczy wydrukować wynik, który Edytor kodu wyświetli w konsoli jako Dictionary. Wynik powinien wyglądać mniej więcej tak:

B1: 25.406029716816853
B2: 23.971497014238988
B3: 22.91059593763103
B4: 54.83164133293403
B5: 38.07655472573677
B6_VCID_2: 198.93216428012906
B7: 24.063261634961563
Diagram reduceRegion
Ilustracja 2. Kompozyt w fałszywych kolorach danych obrazu Landsat dla California i Nevady. Region, w którym ma zostać przeprowadzona redukcja, jest oznaczony na biało.

Pamiętaj, że w tym przykładzie redukcja jest określona przez podanie reducer (ee.Reducer.mean()), geometry (region.geometry()), scale (30 metrów) i maxPixels dla maksymalnej liczby pikseli, które mają być użyte w reduktorze. Skala powinna być zawsze określona w reduceRegion() wywołaniach. Dzieje się tak, ponieważ w złożonych procesach przetwarzania, które mogą obejmować dane z różnych źródeł o różnych skalach, skala danych wyjściowych nie będzie jednoznacznie określona na podstawie danych wejściowych. W takim przypadku skala domyślnie wynosi 1 stopień, co zwykle daje niezadowalające wyniki. Więcej informacji o tym, jak Earth Engine obsługuje skalę, znajdziesz na this page.

Skalę można ustawić na 2 sposoby: określając parametr scale lub określając CRS i transformację CRS. (Więcej informacji o CRS i transformacjach CRS znajdziesz w słowniku ). Na przykład redukcja meanDictionary (powyżej) jest równoważna z:

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

Zasadniczo wystarczy określić skalę, co sprawia, że kod jest bardziej czytelny. Earth Engine określa, które piksele mają być użyte w reduktorze, najpierw rasteryzując region. Jeśli skala jest określona bez CRS, region jest rasteryzowany w natywnej projekcji obrazu przeskalowanej do określonej rozdzielczości. Jeśli określono zarówno CRS, jak i skalę, region jest rasteryzowany na ich podstawie.

Piksele w regionie

Piksele są uznawane za znajdujące się w regionie (i ważone) zgodnie z tymi regułami, stosowanymi w określonej skali i projekcji:

  • Reduktory bez wag (np. ee.Reducer.count() lub ee.Reducer.mean().unweighted()): piksele są uwzględniane, jeśli ich środek znajduje się w regionie, a maska obrazu jest różna od zera.
  • Reduktory z wagami (np. ee.Reducer.mean()): piksele są uwzględniane, jeśli co najmniej (w przybliżeniu) 1/256 (~0,4%) piksela znajduje się w regionie, a maska obrazu jest różna od zera. Ich waga jest minimalną wartością maski obrazu i (przybliżonej) części piksela pokrytej przez region. Wagi przecięcia pikseli są reprezentowane wewnętrznie jako 8-bitowe liczby całkowite (od 0 do 255), które kwantyzują ułamkową pokrycie na 256 dyskretnych poziomów.

Aby obliczenie się powiodło, potrzebny jest parametr maxPixels. Jeśli ten parametr zostanie pominięty w przykładzie, zostanie zwrócony błąd, który wygląda mniej więcej tak:

Aby rozwiązać te błędy, możesz zwiększyć wartość maxPixels, jak w przykładzie, zwiększyć scale lub ustawić bestEffort na true, co automatycznie obliczy nową (większą) skalę, tak aby nie przekroczyć wartości maxPixels. Jeśli nie określisz maxPixels, zostanie użyta wartość domyślna.