2016-07-07 6 views
0

私はHantson & Chuvieco(2010)が提案した手法を使用して地形補正を行って土地データを処理しています。植生と非植生の間に伝える特定のNDVI値に基づく被覆分離方法がありますエリア。マルチバンドラスタをrに追加

私はマルチバンドラスタオブジェクトを1つ持っているから、2つに分割します。これらのオブジェクトは、別々に処理され、その後結合されて元のトポグラフィ的に修正されたシーンになります。

問題は、シーンにいくつかのNA値があることです。問題を解決しないと、結果として空のイメージが得られます。この問題に取り組むにはsum関数をna.rmオプションをTRUEと定義して使用しますが、結果はスタックまたはラスターブリックオブジェクトではなく1バンドラスターオブジェクトになります。

これは私のコードです:

#topographic correction 
VEGB1TC<- topocorr(VEGB1,slopeG,aspectG,sunelev,sunazimuth,method="ccorrection",na.value=NA) 
VEGB2TC<- topocorr(VEGB2,slopeG,aspectG,sunelev,sunazimuth,method="ccorrection",na.value=NA) 
....   
SDB1TC<- topocorr(SDB1,slopeG,aspectG,sunelev,sunazimuth,method="ccorrection",na.value=NA) 
SDB2TC<- topocorr(SDB2,slopeG,aspectG,sunelev,sunazimuth,method="ccorrection",na.value=NA) 
... 

#rasterize corrected band and stack them 
VB1<-raster(VEGB1TC) 
VB2<-raster(VEGB2TC) 
.... 

ADEVEG<-stack(VB1, VB2,...) 

SB1<-raster(SDB1TC) 
SB2<-raster(SDB2TC) 
.... 

ADESD<-stack(SB1, SB2,...) 

#-----------combine images------- 

ADE<-sum(stack(ADEVEG,ADESD),na.rm=T) 

na.rmタグでマルチバンドラスタを追加できる機能がありますか?私はdo.call関数を見つけましたが、いくつかのラスタを1つのバンドオブジェクトに合計しているように見えます。

ありがとうございました。 Landsat画像のための異なる地形補正方法の評価。応用地球観測と地質学の国際ジャーナル13(2011):691-700p。

+0

あなたはラスタレイヤの数を合計した場合、あなたが唯一のバンドを取得します。または、スタックADEVEGとADESDを別々に合計してスタックしますか? – rar

+0

2つのスタックを1つに統合して、それらのスタックを表すようにしたいと思うかもしれません。複数のバンドを同時に組み合わせて、シーンの不毛で植生された部分。最終的には、NA変数を手動で0に置き換えた後、単純な推論で両方のスタックを追加します。あなたの方法は私が意図するものではありませんが、迅速な回答には非常に感謝しています。 –

答えて

1

library(raster) 
s1 <- stack(system.file("external/rlogo.grd", package="raster")) 
s2 <- flip(s1, 'x') 
s2[1000:4000] <- NA  

今、あなたは

r1 <- s1 + s2 

を行うことができますしかし、それはNA値の世話をしない再現性の例を提供してください。だから、

r2 <- overlay(s1, s2, fun=function(x) sum(x, na.rm=TRUE)) 

またはこの

s2r <- reclassify(s2, cbind(NA, 0)) 
r3 <- s1 + s2r 

PSのようなものに頼る必要があるだろうか。私はsum(s1, s2)は、多層のオブジェクトを返すことが期待されることを理解し、私は一つの層を返すことはbase::sumと一致していると思う:

sum(1:4, 1:4) 
# [1] 20 
+0

クイック回答ありがとうございます。最後に、マルチバンドラスタのそれぞれに対してx [is.na(x [])] < - 0を使用してNA値を置き換え、単純なアディション(x3 < - x1 + x2)でそれらを1つに結合しました。 これは私にとってうまくいきますが、2つのラスタを合計してNAの存在を処理する自動化された方法があるかどうかは不思議でした。 –

+1

'x [is.na(x [])] < - 0'(危険なメモリワイズ)をしないでください。おそらく 'x [is.na(x)] < - 0'を行いますが、' reclassify'が望ましいでしょう。 – RobertH

関連する問題