【发布时间】: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