RasterLayer 16 位转换为 RasterLayer 8 位

问题描述 投票:0回答:2

我尝试在 R 中将 RasterLayer 16 位转换为 RasterLayer 8 位,但没有成功。有什么想法吗?

谢谢!

r raster r-raster
2个回答
3
投票

如果要将 RasterLayer 从 16 位转换为 8 位,您需要首先将值拉伸到 8 位区间(0-255 无符号)。然后你可以将其保存为8位图像:

#sample raster
library(raster)
ras16b <- raster(x=matrix(as.integer(rnorm(180*180,1000,50)),180,180))


#convert to 0-255 using the calc. function and basic raster algebra
ras8b <- calc(ras16b, fun=function(x){((x - min(x)) * 255)/(max(x)- min(x)) + 0})

#export 8b raster
writeRaster(ras8b, '/bla/bla/ras8b.tif', datatype='INT1U')

您可以在此处找到有关如何将值标准化为 0-255 区间的更多信息


0
投票

16 位数字有 65,536 个 bin 或 2^16,应等于 0 到 65,535 的值范围,而 8 位数字有 256 个 bin 或 2^8,应等于 0 到 255 的值范围. 因此,您只需将 ras16b 除以 65,535 再乘以 255 即可。

ras8b<- ras16b/65535*255

© www.soinside.com 2019 - 2024. All rights reserved.