我有一个Core i5 CPU和8GB RAM计算机,但是我想在一个像素块中使用R和光栅包(extract()函数)来进行像素计算(缓冲区的单位半径内的SD,偏度和峰度)。 geoTiff栅格,但是我的原始geoTiff图像的尺寸为6244(行),8721(ncol)和54453924(ncell)。此图像大小会导致内存不足,例如在下面的代码中:
### <code r>
#Packages
library(raster)
library(rgdal)
library(moments) #Measures of Skewness and Kurtosis
memory.limit(size=50000)#Increase memory
## Create artificial raster for my geoTiff simulation - dimensions of my original geoTiff: 6244, 8721, 54453924 (nrow, ncol, ncell)
r <- raster(nc=8721, nr=6244)
r <- setValues(r, round(runif(ncell(r))* 255))
##Create geoTiff
writeRaster(r, "r.tif", drivername="GTiff")
##Open geoTiff
r2<-raster("r.tif")
#Extract all pixel coordinates in raster
coord_r<-coordinates(r2)
#Extract standard deviation, skewness and kurtosis
Buffer<-1
SD<-function (x, na.rm = TRUE)
{
if (is.matrix(x))
apply(x, 2, sd, na.rm = na.rm)
else if (is.vector(x))
sqrt(var(x, na.rm = na.rm))
else if (is.data.frame(x))
sapply(x, sd, na.rm = na.rm)
else sqrt(var(as.vector(x), na.rm = na.rm))
}
desv_pad_R<-extract(r2, coord_r, buffer = Buffer, fun = SD)
str(desv_pad_R)
sk_R <-extract(r2,coord_r,buffer=Buffer, fun=skewness, na.rm = TRUE)
str(sk_R)
k_R <-extract(r2,coord_r,buffer=Buffer, fun=kurtosis, na.rm = TRUE)
str(k_R)
# <END code>
使用同一台计算机并在R中工作可以解决我的问题的不同方法(例如,与SAGA GIS或GRASS集成,使用RQGIS,将图像转换为ASCII)。
非常感谢