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

이 질문은 래스터와 관련이 있습니까? 아니면 그 거리를 추상화하여 더 간단하게 재생산 할 수 있습니까? 샘플 입력과 예상 출력을 가진 예제? –

+1

@A.Webb 그것은 래스터 오브젝트와 분명히 관련이 있습니다 – thiagoveloso

답변

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'를 통해 자신을 안심 시키십시오! –

+0

몇 가지 큰 파일을 가지고 몇 가지 테스트를 해봤습니다. 내가 제안한 것보다 더 빨리 waaaaaaay를 제안했습니다. – thiagoveloso

+0

궁금한 점은 곱셈은 정말 간단하지만이 작업에 진행률 막대를 추가 할 수있는 방법이 있습니까? – thiagoveloso