2015-02-05 47 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

相關問題