r - writeRaster 输出文件大小

标签 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)
}

最佳答案

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

rasterOptions(datatype="INT2U")

或者直接在 writeRaster 调用中:
writeRaster(yourRas, "path/to/raster/", dataType="INT2U", options="COMPRESS=LZW")

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

通常当我从 R 导出整数栅格时,我会确保我真的有整数而不是浮点数,因为这可能会导致空栅格。在导出之前尝试以下操作:
ras <- as.integer(ras)

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

关于r - writeRaster 输出文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42041695/

相关文章:

c++ - 基于生产者-消费者的多线程图像处理

r - 为什么在重命名栅格堆栈层时 R 添加了 "x"

javascript - R 中的 googleVis 数据类型转换似乎不起作用

r - 如何使横坐标(即网格线 y=0)在 ggplot2 中显得更暗或更粗?

java - 使用 OpenCV 和 Java 从 gif 帧中获取 Mats

delphi - Delphi如何旋转png图像?

在 R 中按月使用栅格堆栈进行栅格线性和条件回归

r - 无法从逻辑上解决 rasterToPoints 提取的 x,y 值

r - 求r中有效位数与小数点后的位数

r - 有没有办法让 R 脚本在收到错误消息后继续执行而不是停止执行?