Google Earth Engine(GEE)——容易犯的错误3(请在select之前使用filter )和(用updateMask()代替mask())、组合reducer的使用!
2023-09-11 14:15:12 时间
首先过滤再select()
通常,在对集合执行任何其他操作之前,按时间、位置和/或元数据过滤输入集合。在选择性较少的过滤器之前应用更多选择性过滤器。空间和/或时间过滤器通常更具选择性。例如,请注意select()
和之前filter()
应用: map()
var images = ee.ImageCollection('COPERNICUS/S2_SR');
var sf = ee.Geometry.Point([-122.463, 37.768]);
// 归约图像邻域功能。
var reduceFunction = function(image) {
return image.reduceNeighborhood({
reducer: ee.Reducer.mean(),
kernel: ee.Kernel.square(4)
});
};
var bands = ['B4', 'B3', 'B2'];
// Select and filter 首先进行,然后再进行MAP之类或者计算的操作!
var reasonableComputation = images
.select(bands)
.filterBounds(sf)
.filterDate('2018-01-01', '2019-02-01')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 1))
.aside(print) // Useful for debugging.
.map(reduceFunction)
.reduce('mean')
.rename(bands);
var viz = {bands: bands, min: 0, max: 10000};
Map.addLayer(reasonableComputation, viz, 'resonableComputation');
使用updateMask()
代替mask()
updateMask()
和 之间的区别在于mask()
前者and()
对参数(新掩码)和现有图像掩码进行逻辑处理,而mask()
只是用参数替换图像淹没掉。后者的危险在于您可能会无意中取消屏蔽像素。在此示例中,目标是屏蔽小于或等于 300 米高程的像素。正如您所看到的,使用 mask()
会导致很多像素被掩盖,这些像素不属于感兴趣的图像:
var l8sr = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR');
var sf = ee.Geometry.Point([-122.40554461769182, 37.786807309873716]);
var aw3d30 = ee.Image('JAXA/ALOS/AW3D30_V1_1');
Map.centerObject(sf, 7);
var image = l8sr.filterBounds(sf)
.filterDate('2019-06-01', '2019-12-31')
.first();
var vis = {bands: ['B4', 'B3', 'B2'], min: 0, max: 3000};
Map.addLayer(image, vis, 'image', false);
var mask = aw3d30.select('AVE').gt(300);
Map.addLayer(mask, {}, 'mask', false);
// NO! Don't do this!
var badMask = image.mask(mask);
Map.addLayer(badMask, vis, 'badMask');
//这样做比较好
var goodMask = image.updateMask(mask);
Map.addLayer(goodMask, vis, 'goodMask', false);
组合reducer
如果您需要来自单个输入(例如图像区域)的多个统计信息(例如均值和标准差),则组合减速器会更有效。例如,要获取图像统计信息,请按如下方式组合 reducer:这里用到了平均数和标准差之间的计算这样就不同再单独罗列和再次写一次reducer了
var image = ee.Image('COPERNICUS/S2/20150821T111616_20160314T094808_T30UWU');
// 通过组合减速器获得每个波段的均值和标准差
var stats = image.reduceRegion({
reducer: ee.Reducer.mean().combine({
reducer2: ee.Reducer.stdDev(),
sharedInputs: true
}),
geometry: ee.Geometry.Rectangle([-2.15, 48.55, -1.83, 48.72]),
scale: 10,
bestEffort: true // Use maxPixels if you care about scale.
});
print(stats);
// 将平均值和 SD 提取到图像。
var meansImage = stats.toImage().select('.*_mean');
var sdsImage = stats.toImage().select('.*_stdDev');
在这个例子中,请注意均值归约器与标准偏差归约器相结合,并且sharedInputs
能够单次通过输入像素。在输出字典中,reducer 的名称附加到带名称。要获得均值和 SD 图像(例如对输入图像进行归一化),您可以将值转换为图像并使用正则表达式分别提取均值和 SD,如示例中所示。
相关文章
- Google Earth Engine APPS(GEE)——使用 AREA2 和 CODED 估算森林砍伐和退化面积(第 2 部分:精度估计)
- Google Earth Engine(GEE)——容易犯的错误8分类超出计算?(不要采样超过需要的数据 )
- Google Earth Engine(GEE)——MODIS/061/MOD09GA影像计算NDVI并导出结果并UI可视化批量导出(含错误提示)
- Google Earth Engine (GEE)——将影像导出Google硬盘中的易犯错误
- Google Earth Engine(GEE)——影像分类中出现的错误(Classifier confusionMatrix: Property ‘type‘ of feature ‘000000)
- Google Earth Engine ——导出sentinel-2影像中出现的错误(波段分辨率不同)
- Google Earth Engine(GEE)——ImageCollection (Error)遍历影像集合产生的错误
- Google Earth Engine(GEE)——found inconsistent types: UInt16 and Byte.影像数据导出到Google硬盘中的错误
- Google Earth Engine(GEE)——缩放错误(计算超时、聚合过多、内存溢出)
- Google Earth Engine(GEE)——全球湖泊数据集HydroLAKES v1.0(大于10公顷的湖泊)
- Google Earth Engine(GEE)——容易犯的错误8(样本数据的导出export)
- Google SRE 定义了四个需要监控 延迟(Latency),流量(Traffic),错误(Errors)和饱和度(Saturation)
- Google称赛门铁克发布了3万个错误证书 将限制访问