Статистика области изображения

reduceRegion

Чтобы получить статистику значений пикселей в области ee.Image , используйте image.reduceRegion() . Это сводит все пиксели в области(ях) к статистическому или другому компактному представлению данных пикселей в области (например, гистограмме). Регион представлен как Geometry , который может быть многоугольником, содержащим множество пикселей, или это может быть одна точка, и в этом случае в регионе будет только один пиксель. В любом случае, как показано на рисунке 1, выходные данные представляют собой статистику, полученную на основе пикселей в регионе.

Диаграмма уменьшения региона
Рисунок 1. Иллюстрация применения ee.Reducer к изображению и области.

В качестве примера получения статистики по пикселям в области изображения с помощью reduceRegion() рассмотрим поиск средних спектральных значений 5-летнего композита Landsat в границах хвойного леса Сьерра-Невада (показано на рисунке 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);

Для принудительного вычисления достаточно распечатать результат, который Редактор кода отобразит в виде Dictionary в консоли. Вывод должен выглядеть примерно так:

B1: 25.406029716816853
B2: 23.971497014238988
B3: 22.91059593763103
B4: 54.83164133293403
B5: 38.07655472573677
B6_VCID_2: 198.93216428012906
B7: 24.063261634961563
Диаграмма уменьшения региона
Рисунок 2. Комбинация ложных цветов данных изображения Landsat для Калифорнии и Невады. Область, которую необходимо уменьшить, показана белым цветом.

Обратите внимание, что в этом примере уменьшение указывается путем предоставления reducer ( ee.Reducer.mean() ), geometry ( region.geometry() ), scale (30 метров) и maxPixels для максимального количества пикселей, вводимых в редуктор. Масштаб всегда должен указываться в вызовах reduceRegion() . Это связано с тем, что в сложных потоках обработки, которые могут включать данные из разных источников с разными масштабами, масштаб выходных данных не будет однозначно определен на основе входных данных. В этом случае шкала по умолчанию равна 1 градусу, что обычно приводит к неудовлетворительным результатам. См. эту страницу для получения дополнительной информации о том, как Earth Engine обрабатывает масштаб.

Существует два способа установить масштаб: указав параметр scale или указав CRS и преобразование CRS. (Дополнительную информацию о CRS и преобразованиях CRS см. в глоссарии ). Например, сокращение meanDictionary (выше) эквивалентно следующему:

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

В общем, указания масштаба достаточно, и в результате код становится более читаемым. Earth Engine определяет, какие пиксели вводить в редуктор, сначала растрируя область. Если масштаб указан без CRS, область растеризуется в собственной проекции изображения, масштабированной до указанного разрешения. Если указаны и CRS, и масштаб, регион растеризуется на их основе.

Пиксели в регионе

Пиксели определяются как находящиеся в регионе (и взвешиваются) в соответствии со следующими правилами, применяемыми в указанном масштабе и проекции:

  • Невзвешенные редукторы (например ee.Reducer.count() или ee.Reducer.mean().unweighted() ): пиксели включаются, если их центроид находится в регионе, а маска изображения не равна нулю.
  • Взвешенные редукторы (например, ee.Reducer.mean() ): пиксели включаются, если по крайней мере (приблизительно) 0,5% пикселя находится в области и маска изображения не равна нулю; их вес равен минимуму маски изображения и (приблизительной) доли пикселя, охватываемой областью.

Параметр maxPixels необходим для успешного выполнения вычислений. Если этот параметр опустить в примере, возвращается ошибка, которая выглядит примерно так:

Существует несколько вариантов обойти эти ошибки: увеличить maxPixels , как в примере, увеличить scale или установить bestEffort значение true, что автоматически вычисляет новый (более крупный) масштаб, чтобы maxPixels не превышалось. Если вы не укажете maxPixels , используется значение по умолчанию.