SG滤波是一种基于曲线局部特征的多项式拟合方法,应用最小二乘法确定加权系数进行移动窗口加权平均的滤波方法,重构的数据能够较好的保留局部特征。基本公式如下:
以重构NDVI时间序列为利,其中,Y是原始的NDVI,Y*是新得到NDVI,Ci是该滑动窗口的第i个NDVI值的相关系数,滑动窗口的大小为2m+1(即一个窗口涵盖2m+1个NDVI值),注意这里的Y是一次的,所以本公式只是一次项拟合。
原理到这里就说清楚了,说白了就是选用某个多项式函数,通过最小二乘法来拟合窗口里的数据。
下面放出GEE论坛里一个大佬写的SG代码~https://code.earthengine.google.com/e9f4f2bb84f0bdd26ecfbea47a71885f
代码有完善的英文的注释,我在这里理一下某些函数的用法~
ImageCollection.toArray()
知道Array的构成,就可以轻松理解array.arraySlice()的用法了
Array.matrixSolve()
求最小二乘解,即我们要求的多项式的各项系数。
.arrayProject([0]) .arrayFlatten()
把系数矩阵映射到低纬度展开~
2020-8-12补充
谢谢Seibert的指正,原文用的函数是Image.matrixSolve而非Array.matrixSolve,在此更正,抱歉!
资料来源:https://blog.csdn.net/qq_20823641/article/details/51537461