我有一个函数,可以将多波段图像作为栅格砖对象读取,遍历波段进行各种计算,然后将栅格写出作为新的 .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")
另请注意选项参数,您可以在其中指定压缩。
通常,当我从 R 导出整数栅格时,我会确保我确实有整数而不是浮点数,因为这可能会导致空栅格。导出前请尝试以下操作:
ras <- as.integer(ras)
请注意:还要检查栅格中的负值。尝试INT2S
如果您的值低于零。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)