我正在尝试编写一个高效的脚本来校准数百个Landsat 8图像。在校准步骤的某个点,我需要在光栅堆栈的每一层中应用一些系数。
这是一个样本堆栈:
fn <- system.file("external/test.grd", package="raster")
s <- stack(fn, fn)
这些是样本系数:
mult <- c(0.0003342, 0.0005534)
add <- c(0.1, 0.2)
我需要的是将系数的每个索引应用于堆栈层的对应索引,如下例所示:
s[[1]] <- (s[[1]] * mult[1]) + add[1]
s[[2]] <- (s[[2]] * mult[2]) + add[2]
这是我的不良尝试,显然不起作用:
cal.fun <- function(x) {
x <- (x * mult) + add
}
s.cal <- calc(s, cal.fun, progress='text')
关于如何做到这一点的任何想法?
非常感谢。
答案 0 :(得分:2)
raster 是一个非常精心构建的软件包,你可以简单地做到:
s2 <- s * mult + add
为了快速直观地确认该向量化呼叫&#34;只是工作&#34;,做这样的事情:
library(gridExtra)
library(rasterVis)
grid.arrange(levelplot(s), levelplot(s2), nrow=2)