GEE剔除数据异常值的方法

文章介绍了使用GoogleEarthEngine(GEE)去除遥感数据中异常值的几种方法。包括使用(updateMask())方法设定阈值过滤,以及通过计算百分位数来确定并去除超出范围的异常值。对于多波段和多时相数据,分别给出了相应的处理策略。
摘要由CSDN通过智能技术生成

change_divided数据集存在很多异常值,并且还有nodata值没有被掩膜掉。如何实现剔除异常值?

参考博文(很清晰!!):GEE:去除异常值_gee去除条带__养乐多_的博客-CSDN博客

3 参考了:file:///C:/Users/%E4%BA%A6%E5%BF%83/Downloads/ce2cf7f5-f7d0-4469-9afc-8d0d37.html

PS.这两篇对于 2(1)的实现代码是很相似的。

1、普通异常值过滤:.updateMask()方法 

var minValue = -20;  
var maxValue = 20; 
// 将小于阈值的像素设为 null
var filtered = change_divided.map(function(x) {   
  return x.gte(minValue).and(x.lte(maxValue));    
}); 
print(filtered);

print的结果是几个波段都变成了int型,范围在0-1,不知道为什么。

2、按照百分位数去除异常值

(1)代码1是基本情况:

var p1 = change_divided.reduce(ee.Reducer.percentile([1]));
var p99 = change_divided.reduce(ee.Reducer.percentile([99]));
//或 设置max和min
//var percMin = change_divided..reduce(ee.Reducer.min())

// 掩膜掉最大值和最小值范围之外的值(设置为null)
var A = change_divided.map(function(image) {
  var mask = image.gt(p1).and(image.lt(p99));
  return image.updateMask(mask);
});

(2)代码2是多波段数据:"计算了每个像素在所有波段中的第2和第98个百分位数值。然后去除小于第2个百分位数和大于第98个百分位数的像素,并将这些像素的值设为 null。最后,我们打印了原始图像和过滤后的图像,以进行比较。"

// 计算每个像素在每个波段中的像素值
var combinedImage = change_divided.addBands(change_divided.select('ndvi_max_mean')).addBands(change_divided.select('evi_max_mean')).addBands(change_divided.select('lswi_max_mean')).addBands(change_divided.select('nirv_max_mean'));

// 计算每个像素在所有波段中的百分位数值
var p2 = combinedImage.reduce(ee.Reducer.percentile([1])).rename('p2');
var p98 = combinedImage.reduce(ee.Reducer.percentile([98])).rename('p98');

// 选择要去除的异常值的范围,并将图像中的异常值设为 null
var updated = combinedImage.mask(combinedImage.gte(p2).and(combinedImage.lte(p98)));

(3)代码3是多波段且多时相的数据,剔除异常值方法如下,结果updated是个包含48个band的image(原始数据集change_divided包含12个image,每个image有4个band)。

// 计算每个像素在每个波段中的像素值
var combinedImage = change_divided.toBands();

// 计算每个像素在所有波段中的百分位数值
var p2 = combinedImage.reduce(ee.Reducer.percentile([1])).rename('p2');
var p98 = combinedImage.reduce(ee.Reducer.percentile([98])).rename('p98');

// 选择要去除的异常值的范围,并将图像中的异常值设为 null
var updated = combinedImage.mask(combinedImage.gte(p2).and(combinedImage.lte(p98)));
//没看懂这行有啥意义:updated = ee.ImageCollection([updated]).toBands();

 

3、ee.Reducer.intervalMean():计算 2-98 个百分位数范围内的值的平均值以去除异常值。

我放在这了:

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值