Statystyki regionu obrazu

reduceRegion

Aby uzyskać statystyki wartości pikseli w regionie ee.Image, użyj image.reduceRegion(). Spowoduje to zredukowanie wszystkich pikseli w regionach do statystyk lub innej zwartej reprezentacji danych pikseli w regionie (np. do histogramu). Region jest reprezentowany przez 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 rysunku 1, dane wyjściowe to statystyki utworzone na podstawie pikseli w danym regionie.

reduceRegion diagram
Rysunek 1. Ilustracja przedstawiająca ee.Reducer zastosowaną na obrazie i obszarze.

Przykładem uzyskania statystyk pikseli w regionie obrazu za pomocą funkcji reduceRegion() może być znalezienie średnich wartości widmowych 5-letniego obrazu złożonego Landsat w granicach lasu iglastego Sierra Nevada (ilustracja na rysunku 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ć wykonanie obliczeń, wystarczy wydrukować wynik, który edytor kodu wyświetli jako Dictionary w konsoli. Dane wyjściowe powinny 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
reduceRegion diagram
Rysunek 2. Kompozyt w fałszywych kolorach danych obrazu Landsat dla Kalifornii i Nevady. Obszar, który ma zostać zmniejszony, jest oznaczony na biało.

Pamiętaj, że w tym przykładzie redukcja jest określana przez podanie wartości reducer (ee.Reducer.mean()), geometry (region.geometry()), scale (30 metrów) i maxPixels dla maksymalnej liczby pikseli, które mają być podane do reduktora. W wywołaniach funkcji reduceRegion() należy zawsze podawać skalę. Dzieje się tak, ponieważ w przypadku złożonych przepływów 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 jest domyślnie ustawiana na 1 stopień, co zwykle daje niezadowalające wyniki. Więcej informacji o tym, jak Earth Engine obsługuje skalowanie, znajdziesz na tej stronie.

Skalę można ustawić na 2 sposoby: przez podanie parametru scale lub przez podanie transformacji CRS i CRS. (więcej informacji o systemach CRS i ich przekształceniach znajdziesz w glosariuszu). Na przykład redukcja meanDictionary (powyżej) jest równoważna tym działaniom:

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

Ogólnie określenie skali jest wystarczające i powoduje, że kod jest bardziej czytelny. Earth Engine określa, które piksele ma podać do narzędzia do redukcji, najpierw rasteryzując region. Jeśli skala jest określona bez CRS, region jest rastrowany w natywnej projekcji obrazu z wymiarami dostosowanymi do podanej rozdzielczości. Jeśli podano zarówno system CRS, jak i współrzędne, region jest rastrowany na ich podstawie.

Pixele w regionie

Piksel jest określany jako należący do regionu (i uwzględniany) zgodnie z tymi regułami: zastosowanymi w określonej skali i projekcji:

  • Nieważone reduktor (np. ee.Reducer.count() lub ee.Reducer.mean().unweighted()): piksele są uwzględniane, jeśli ich centroid znajduje się w regionie, a maska obrazu ma wartość różną od zera.
  • Wagi redukujące (np. ee.Reducer.mean()): piksele są uwzględniane, jeśli co najmniej (w przybliżeniu) 0,5% piksela znajduje się w regionie, a maska obrazu ma wartość różną od 0; ich waga to minimum maski obrazu i (w przybliżeniu) ułamka piksela objętego przez region.

Aby obliczenia się powiodły, potrzebny jest parametr maxPixels. Jeśli ten parametr zostanie pominięty, zwrócony zostanie komunikat o błędzie, który będzie wyglądał mniej więcej tak:

Istnieje kilka opcji, które pozwalają uniknąć tych błędów: zwiększenie wartości maxPixels, jak w przykładzie, zwiększenie wartości scale lub ustawienie wartości bestEffort na true, co automatycznie oblicza nową (większą) skalę, aby nie przekroczyć wartości maxPixels. Jeśli nie podasz wartości maxPixels, zostanie użyta wartość domyślna.