2015-02-05 44 views
1

我想写一个高效的脚本来校准数百个Landsat 8图像。在校准步骤的某个点,我需要在栅格堆栈的每一层中应用一些系数。R - 结合索引从矢量和栅格堆栈层的函数

这是一个示例堆栈:

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') 

有关如何做到这一点的任何想法?

非常感谢。

+1

请问这个问题与光栅有什么关系,或者可以将它抽象出来,给出一个简单的可重现示例输入和预期输出的示例? – 2015-02-05 19:21:54

+1

@ A.Webb它肯定与栅格对象有关 – thiagoveloso 2015-02-05 19:25:52

回答

2

光栅是一个惊人构建良好的包,你可以简单地做:

s2 <- s * mult + add 

对于快速的视觉确认,该矢量称之为“只是工程”,做这样的事情:

library(gridExtra) 
library(rasterVis) 
grid.arrange(levelplot(s), levelplot(s2), nrow=2) 

enter image description here

+1

或者通过执行'(s2-add)/ s'来进一步保证你自己! – 2015-02-05 19:55:19

+0

我对一些大文件做了一些测试,你提出的是wawaaaaay比我想象的要快! – thiagoveloso 2015-02-05 20:50:47

+0

我想知道:乘法运算非常简单,但有什么办法可以将进度条添加到此操作中吗? – thiagoveloso 2015-02-06 02:52:11

相关问题