【问题标题】:writeRaster output file sizewriteRaster 输出文件大小
【发布时间】:2017-06-21 20:30:52
【问题描述】:

我有一个函数,可以将多波段图像作为栅格砖对象读取,遍历波段进行各种计算,然后将栅格作为新的 .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)
}

【问题讨论】:

  • 所以输入和输出具有完全相同的像素和波段数?因此,您的 .img 文件使用的压缩比您的 .tiff 更好,或者 .img 文件以较低的精度存储(如 8 位整数),而您的 .tiff 正在存储 4 字节浮点数......或者两个都。 sp::GDALinfo 对您的文件有什么看法?
  • 是的,这似乎是问题所在。 GDALinfo 表示输出写入为 FLT4S,而输入输入为 INT2U。我尝试更改输出的数据类型,但除 FLT4S 之外的任何内容都会创建一个空白图像(数据 = 0-1)。

标签: r image-processing r-raster


【解决方案1】:

您可以使用rasterOptions() 设置写入栅格的默认数据类型,如下所示:

rasterOptions(datatype="INT2U")

或者直接在writeRaster调用中:

writeRaster(yourRas, "path/to/raster/", dataType="INT2U", options="COMPRESS=LZW")

还要注意选项参数,您可以在其中指定压缩。

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

ras <- as.integer(ras)

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

【讨论】:

  • 我想补充一点,输出栅格格式的所有选项和属性都可以找到here
猜你喜欢
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
相关资源
最近更新 更多