max日期最大值为0_GEE上实现NDVI时间序列最大值合成

由于云雨等影响,使得遥感数据无法有效地观测地面,这种影响在NDVI上表现为低值噪声,为了降低这种影响,通常使用最大值合成的方法,得到相邻时间内最佳观测值作为填充值,从而消除低值噪声。这种方法简单实用,但是无法恢复地表真实情况,且会造成最大值对应的日期发生偏移,通常还要结合各种滤波算法对时间序列数据进行平滑,比如S-G滤波、谐波分析等。

为了实现最大值合成,需要将时间序列数据(ee.Image)转为更易处理的数组(ee.Array)。实现的过程比较简单,使用滑动窗口,在时间序列上取窗口内的最大值作为返回值,具体实现代码:

function 

返回值的这段代码我本身有点疑惑

return slicedarray.arrayReduce(ee.Reducer.max(),[0]).arrayGet([0][0]).rename("NDVI").set("system:time_start",time.millis());

使用上面这段作为返回值时,在数据量小一点的时候可以正常运行(100景左右),在数据量比较大的时候就会报数组越界的错误。而加上arrayProject([0])之后,又可以正常运行了,不知道是为什么?

我做了几组对比实验,对比了原始数据(全年MODIS NDVI,364景)、八天最大值合成数据,还有这两组数据的sg滤波、谐波分析之后的效果。

f7740e1b6573da1e14196ae99804913f.png
原始NDVI时间序列

722cb4f33088ba12140abe29f751a198.png
八天滑动最大值合成NDVI时间序列

d6091d53bfe27f67fc10bb1c9714f768.png
原始数据SG滤波

81015ce8667f9f4da68b1d6fb0ec1e64.png
合成数据SG滤波

58e8305cb6cdb313998a3d7a4cfe04a6.png
原始数据谐波分析

ea8b90f73ecec582a646fa76869a318d.png
合成数据谐波分析

可以看到,由于原始数据较多由云雨造成的低值噪声,未做合成的数据直接做滤波会拉低整体的值,而使用合成之后的时候再进行滤波会与真实情况更接近。即便做了最大值合成,也无法完全消除密集云雨的影响。使用SG滤波对数据的细节有较好的保留,而使用谐波分析则消除了大部分细节,但使数据变得更平滑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值