writeRaster输出文件大小

Dan*_*ple 3 r image-processing r-raster

我有一个函数,它以光栅砖对象的形式读取多波段图像,迭代通过各种计算的波段,然后将光栅写为新的.tif.所有这一切都很好,但新图像文件的文件大小大约是其四倍(我假设因为原始图像有4个波段).我想知道在writeRaster()函数中是否有一个我不知道的参数,或者如果有其他方法我可以确保输出图像与输入的文件大小基本相同.

原始文件大小为134 MB; 输出范围从471到530 MB左右,具体取决于格式.

简化代码:

library(rgdal)
library(raster)

path = "/Volumes/ENVI Standard Files/"
img = "qb_tile.img"

imageCorrection = function(path, img){
  raster = brick(paste0(path, img))   
  raster = reclassify(raster, cbind(0, NA))  

  for(i in 1:nlayers(raster)){   
    raster[[i]] = raster[[i]] - minValue(raster[[i]]) 
  }
  writeRaster(raster, paste0(path,img,"_process.tif"), format = "GTiff", overwrite=TRUE)
}
Run Code Online (Sandbox Code Playgroud)

maR*_*tin 7

您可以使用以下命令设置用于编写栅格的默认数据类型rasterOptions():

rasterOptions(datatype="INT2U")
Run Code Online (Sandbox Code Playgroud)

或者直接在writeRaster调用中:

writeRaster(yourRas, "path/to/raster/", dataType="INT2U", options="COMPRESS=LZW")
Run Code Online (Sandbox Code Playgroud)

另请注意options参数,您可以在其中指定压缩.

通常当我从R导出整数栅格时,我确保我确实有整数而不是浮点数,因为这可能会导致空栅格.导出前请尝试以下操作:

ras <- as.integer(ras)
Run Code Online (Sandbox Code Playgroud)

请注意: 还要检查栅格中的负值.INT2S如果您的值低于零,请尝试.

  • 我想补充一点,输出栅格格式的所有选项和属性都可以在[此处](http://gdal.org/formats_list.html)找到 (4认同)