如何使用R获取单波段栅格的RGBA颜色表?

问题描述

这是一个名为singleband-raster.tif的光栅文件

使用R,我可以像这样获得颜色表:

my.raster <- raster( "/path/to/singleband-raster.tif" )
colortable( my.raster ) 

它将为您提供RGB值,如下所示:

[1] "#FFFFFF" "#969696" "#FA00FF" "#F200FF" "#E600FF" # shortened for brevity

这没关系,但是我想得到的是 RGBA (红色,绿色,蓝色,alpha)值,而不只是 RGB 值。因为栅格文件也具有如下的alpha值:

[1] "#FFFFFF00" "#969696FF" "#FA00FFFF" "#F200FFFF" "#E600FFFF"

可以通过GDAL工具在命令行中检查alpha值,如下所示:

gdalinfo /path/to/singleband-raster.tif

如何使用R获取单波段栅格的RGBA色表?

解决方法

page

TIFF格式仅支持用于调色板/颜色的R,G,B组件 表。因此,在编写Alpha信息时,它会保持静默 丢弃。

(因此,无法阅读)

在这种情况下(文件中没有alpha),GDAL似乎为NA标志分配了0的alpha值,为所有其他值分配了255。 raster::colortable没有显示出来。但是使用terra(版本0.9-1)的开发版本,您可以得到想要的东西

library(terra)
x <- rast("singleband-raster.tif")
ct <- cols(x)[[1]]

head(ct)
#  red green blue alpha
#1 255   255  255     0
#2 150   150  150   255
#3 250     0  255   255
#4 242     0  255   255
#5 230     0  255   255
#6 222     0  255   255
 
cols <- rgb(ct[,1],ct[,2],3],4],maxColorValue=255)
head(cols)
#[1] "#FFFFFF00" "#969696FF" "#FA00FFFF" "#F200FFFF" "#E600FFFF" "#DE00FFFF"