计算相邻像素随时间变化的平均相关性 [英] calculate average correlation for neighboring pixels through time

查看:14
本文介绍了计算相邻像素随时间变化的平均相关性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一堆4个栅格。我想要一个像素与其8个相邻像素之间的平均时间相关性。

部分数据:

library(raster)  

r1=raster(matrix(runif(25),nrow=5))
r2=raster(matrix(runif(25),nrow=5))
r3=raster(matrix(runif(25),nrow=5))
r4=raster(matrix(runif(25),nrow=5))
s=stack(r1,r2,r3,r4)

因此,对于位置x的像素,它在NE、E、SE、S等位置有8个邻居,我想要平均值

cor(x,NE)
cor(x,E)
cor(x,SE)
cor(x,S)
cor(x,SW)
cor(x,W)
cor(x,NW)
cor(x,N)

和保存在结果栅格中位置x处的平均值。边缘单元将是NA,或者,如果可能的话,是一个标志,用于仅计算与其接触的单元(3个或5个单元)的平均相关性。 谢谢!

推荐答案

我认为@Pascal使用focal()的建议不可行,因为focal()使用单个栅格层作为参数,而不是堆栈。这是最容易理解的解决方案。通过最大限度地减少提取每个焦点单元格的值的次数,可以提高效率:

library(raster)  

set.seed(2002)
r1 <- raster(matrix(runif(25),nrow=5))
r2 <- raster(matrix(runif(25),nrow=5))
r3 <- raster(matrix(runif(25),nrow=5))
r4 <- raster(matrix(runif(25),nrow=5))
s <- stack(r1,r2,r3,r4)

##  Calculate adjacent raster cells for each focal cell:
a <- adjacent(s, 1:ncell(s), directions=8, sorted=T)

##  Create column to store correlations:
out <- data.frame(a)
out$cors <- NA

##  Loop over all focal cells and their adjacencies,
##    extract the values across all layers and calculate
##    the correlation, storing it in the appropriate row of
##    our output data.frame:
for (i in 1:nrow(a)) {
    out$cors[i] <- cor(c(s[a[i,1]]), c(s[a[i,2]]))
}

##  Take the mean of the correlations by focal cell ID:
r_out_vals <- aggregate(out$cors, by=list(out$from), FUN=mean)

##  Create a new raster object to store our mean correlations in
##    the focal cell locations:
r_out <- s[[1]]
r_out[] <- r_out_vals$x

plot(r_out)

这篇关于计算相邻像素随时间变化的平均相关性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆