前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Google Earth Engine(GEE)——容易犯的错误3(请在select之前使用filter )和(用updateMask()代替mask())、组合reducer的使用!

Google Earth Engine(GEE)——容易犯的错误3(请在select之前使用filter )和(用updateMask()代替mask())、组合reducer的使用!

作者头像
此星光明
发布2024-02-02 08:20:14
960
发布2024-02-02 08:20:14
举报

首先过滤再select()

通常,在对集合执行任何其他操作之前,按时间、位置和/或元数据过滤输入集合。在选择性较少的过滤器之前应用更多选择性过滤器。空间和/或时间过滤器通常更具选择性。例如,请注意select()之前filter()应用: map()

代码语言:javascript
复制
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()会导致很多像素被掩盖,这些像素不属于感兴趣的图像:

代码语言:javascript
复制
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了

代码语言:javascript
复制
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,如示例中所示。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先过滤再select()
  • 使用updateMask()代替mask()
  • 组合reducer
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档