【发布时间】:2016-07-07 13:26:33
【问题描述】:
我正在使用 Hantson & Chuvieco (2010) 提出的方法对 landsat 数据进行一些地形校正,该方法涉及一种基于特定 NDVI 值的覆盖分离方法,以区分植被和非植被区域。
所以,我从一个多波段栅格对象变为两个,分别处理,然后组合形成原始的地形校正场景。
问题是我在场景中有一些 NA 值,所以如果我不摆脱它们,我会得到一个空白图像。我使用sum 函数和定义为TRUE 的na.rm 选项来解决这个问题,但结果是单波段光栅对象而不是堆栈或光栅砖对象。
这是我的代码:
#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 函数,但在我看来,它将几个栅格相加成一个单波段对象。
感谢您的帮助。
ps:Hantson, S. Chuvieco, E. 2010。陆地卫星图像不同地形校正方法的评估。 International Journal of Applied Earth Observations and Geoinformation 13(2011):691-700p.
【问题讨论】:
-
如果将多个栅格图层相加,则只会得到一个波段。或者您想分别将堆栈 ADEVEG 和 ADESD 相加,然后将它们叠加?可能你想做的是
ADE<-stack(sum(ADEVEG,na.rm=T),sum(ADESD,na.rm=T)) -
我想将两个堆栈融合为一个,因为它们代表了场景中的贫瘠和植被部分,同时结合了多个波段。最后,我只是用 0 手动替换了 NA vaues,然后通过简单的加法继续添加两个堆栈。您的方法不是我想要的,但非常感谢您的快速回答。