计算栅格单元和邻域之间的差异

Calculate difference between raster cell and neighborhood

我正在尝试计算栅格像元与 3 x 3 邻域中的平均值之间的差异。

有了这个光栅

r = raster(ncol=10, nrow=10, xmn=0, xmx=100, ymn=0, ymx=100)
set.seed(123)
values(r) = round(runif(ncell(r),1,100))

我可以使用类似于

的东西
r2 <- focal(r2, w=matrix(1,nrow=3,ncol=3), fun=)

但我认为我需要一个自定义函数作为 fun 的参数来计算 3 x 3 邻域的平均值,然后从中心单元格中减去该值。

我知道我可以用两个不同的栅格图层来做到这一点,但我怀疑有上面概述的更好的方法。

如有任何建议,我们将不胜感激。

您可以分两步完成:

#First, get the mean in a 3x3 neighbourhood
r2 <- focal(r, w=matrix(1,nrow=3,ncol=3), fun=mean)

#Then subtract the focal mean from the original cell values using simple raster arithmetic:
r3 <- r - r2

然后您可以轻松地将上述步骤包装在一个更方便的函数中,干杯。