change_divided数据集存在很多异常值,并且还有nodata值没有被掩膜掉。如何实现剔除异常值?
参考博文(很清晰!!):GEE:去除异常值_gee去除条带__养乐多_的博客-优快云博客
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 个百分位数范围内的值的平均值以去除异常值。
我放在这了: