2017-02-04 149 views
2

我有一個函數,它讀取作爲柵格磚對象的多波段圖像,遍歷各種計算的波段,然後將光柵寫入爲新的.tif。所有這些工作都很好,但新圖像文件的文件大小大約是原來圖像的4倍(我假設是4倍)。我想知道writeRaster()函數中是否存在一個我不知道的參數,或者如果有其他方法,我可以確保輸出圖像基本上與輸入文件大小相同。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:[email protected]@nbands){ 
    raster[[i]] = raster[[i]] - minValue(raster[[i]]) 
    } 
    writeRaster(raster, paste0(path,img,"_process.tif"), format = "GTiff", overwrite=TRUE) 
} 
+0

因此,輸入和輸出具有完全相同數量的像素和波段?因此,它的.img文件使用的壓縮比.tiff更好,或者.img文件以更低的精度存儲(如8位整數),而.tiff存儲4字節浮點....或者都。 sp :: GDALinfo對你的文件有什麼看法? – Spacedman

+0

是的,這似乎是問題。 GDALinfo指示輸出寫入FLT4S,輸入作爲INT2U輸入。我試着改變輸出的數據類型,但除FLT4S之外的任何東西都會創建一個空白圖像(data = 0-1)。 – Danple

+0

https://stat.ethz.ch/pipermail/r-sig-geo/2015-January/022246.html – Danple

回答

3

您可以設置默認的數據類型與rasterOptions()寫光柵如下:

rasterOptions(datatype="INT2U") 
在writeRaster通話

或者直接:

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

還要注意可以指定壓縮的選項參數。

通常,當我從R導出整數柵格時,我確保我確實有整數而不是浮點數,因爲這會導致空柵格。出口前嘗試以下操作:

ras <- as.integer(ras) 

請注意: 也爲您在您的光柵負值。如果您的值低於零,請嘗試INT2S

+1

我想補充一點,輸出光柵格式的所有選項和屬性都可以在[這裏]找到( http://gdal.org/formats_list.html) – loki