Google Earth Engine: извлекать значения полос из пикселя в каждом изображении коллекции? - PullRequest
0 голосов
/ 27 февраля 2020

извините за базовый c вопрос, я новичок в GEE.

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

Я понимаю, как это сделать если выходные данные представлены на графике, например:

print(ui.Chart.image.series(with_ndvi.select("nd"),area));

Где with_ndvi - это моя коллекция изображений, "nd" - это интересующая меня полоса, а area - это точечный объект.

Однако мне нужно получить эти значения в массив, потому что мне нужно выполнить вычисления для каждого значения.

Существует ли простая функция для сопоставления коллекции для извлечения значений в виде чисел для работы?

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 27 февраля 2020

В общем, чтобы получить определенные значения из изображения, вы используете reduceRegion. Поскольку у вас есть единственная точка, никакого точного сокращения не происходит, но эту же операцию можно использовать для получения среднего, медианы, максимума и т. Д. c. из области, и вам нужно выбрать редуктор для выполнения операции. (ui.Chart.image.series по умолчанию использует редуктор mean, если не указано иное).

Я создал этот пример из изображений, используемых в примере сценария нормализованной разницы:

var imageCollection = ee.ImageCollection('MODIS/006/MOD09GA')
    .filterDate('2019-01-01', '2019-01-31');

var ndviCollection = imageCollection.map(function (img) {
  var ndImage = img.normalizedDifference(['sur_refl_b02', 'sur_refl_b01']);
  return ee.Feature(area, ndImage.reduceRegion(ee.Reducer.mean(), area));
});

print(ndviCollection);

Пример запускаемой ссылки

Здесь ndviCollection - это FeatureCollection, где каждый объект имеет исходную точку в качестве геометрии (полезно, если у вас есть несколько точек интереса, но в противном случае вы можете сделать это быть null вместо) и NDVI в этой точке как свойство с именем nd.

Если вам абсолютно необходим список чисел, а не коллекция элементов, вы можете получить это:

print(ndviCollection
    .toList(100)  // set this number to the maximum number of elements you expect
    .map(function (feature) { 
      return ee.Feature(feature).get('nd');
    }));

но вы не должны этого делать, если можете избежать этого, поскольку списки всегда хранятся в памяти в целом, а не обрабатываются потоковым способом. Вместо этого выполните свои вычисления в коллекции элементов, используя map и / или reduceColumns.

...