2013-02-21 53 views
0

我有两个ndvi图像的值为-1到1作为最小/最大....我想从第一个减去第二个图像,反之亦然,但是当我这样做,它是给我光栅0值...我认为它应该是这样的,因为我们从另一个或另一个图像中减去一个乐队...请帮助我在哪里我错了.....这里是我正在使用的代码看到变化....NDVI的差异

b3<-raster(stackIm1,3) #band 3 of first input image 
    b4<-raster(stackIm1,4) #band 4 of first input image 
    ndvi1<-(b4-b3)/(b4+b3) #calculating NDVI for first image 

    b3<-raster(stackIm2,3) #band 3 of second image 
    b4<-raster(stackIm2,4) #band 4 of second image 
    ndvi2<-(b4-b3)/(b4+b3) #calculating NDVI for second image 

    ndvi <- ndvi1-ndvi2 #subtracting second ndvi image from first 

在此先感谢

+2

请你的榜样重现性好,不,我们不能有效地帮助你.. – 2013-02-21 12:34:54

+1

其实我有一个区域陆地卫星图像,所以我只是堆放,并采取两个频段,用于计算指数,然后之后显示它我对第二张图片做了同样的事情,以不同年份的相同程度和面积,然后从第一张减去第二张ndvi,这样我就可以得到这个......这就是我想要的区别...... – Angad 2013-02-21 12:55:23

+0

我们可以'如果我们没有看到有什么问题,我们会帮助你。我建议你做一个可重复的小例子。看到这个问题如何使一个很好的:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – 2013-02-21 13:02:18

回答

2

这是你可以做一个重复的例子:

戈nerate一些数据

library(raster) 
r <- raster(nc=10, nr=10) 
set.seed(2212013) 
stackIm1 <- stack(lapply(1:5, function(x) setValues(r, round(runif(ncell(r))* 255)))) 
stackIm2 <- stack(lapply(1:5, function(x) setValues(r, round(runif(ncell(r))* 255)))) 

,然后用它来说明问题

b3<-raster(stackIm1,3) #band 3 of first input image 
b4<-raster(stackIm1,4) #band 4 of first input image 
ndvi1<-(b4-b3)/(b4+b3) #calculating NDVI for first image 

b3<-raster(stackIm2,3) #band 3 of second image 
b4<-raster(stackIm2,4) #band 4 of second image 
ndvi2<-(b4-b3)/(b4+b3) #calculating NDVI for second image 

ndvi <- ndvi1-ndvi2 #subtracting second ndvi image from first 

但我没有在这里看到的一个问题。

> ndvi 
class  : RasterLayer 
dimensions : 10, 10, 100 (nrow, ncol, ncell) 
resolution : 36, 18 (x, y) 
extent  : -180, 180, -90, 90 (xmin, xmax, ymin, ymax) 
coord. ref. : +proj=longlat +datum=WGS84 
data source : in memory 
names  : layer 
values  : -1.461194, 1.590255 (min, max) 

>