谷歌地球引擎:从集合的每个图像中的像素提取波段值



对不起,我是GEE初学者。

本质上,我想做的是从集合中的每个图像中提取像素中某个带的值,并将其放入数组中。

如果输出是图表,我知道如何做到这一点,例如:

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

其中with_ndvi是我的图像集合,"nd"是我感兴趣的波段,面积是一个点特征。

但是,我需要将这些值放入一个数组中,因为我需要对每个值执行计算。

有没有一个简单的函数可以映射到集合上,将值提取为数字来处理?

谢谢你的帮助。

通常,为了从图像中获得特定的值,可以使用reduceRegion。由于只有一个点,因此没有任何缩减,但可以使用相同的运算来获得区域的平均值、中值、最大值等,因此需要选择一个缩减器来执行该运算。(如果未另行指定,则ui.Chart.image.series默认为mean减速器(。

我根据Normalized Difference示例脚本中使用的图像构建了这个示例:

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

可运行的示例链接

这里,ndviCollectionFeatureCollection,其中每个特征都有作为几何体的原始点(如果您有多个感兴趣的点,则很有用,但否则您可以将其改为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对特征集合执行计算。

最新更新