【问题标题】:How to get the RGBA color table of a singleband raster using R?如何使用 R 获取单波段栅格的 RGBA 颜色表?
【发布时间】:2020-10-26 06:36:26
【问题描述】:

这是一个名为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色表?

【问题讨论】:

    标签: r raster geotiff


    【解决方案1】:

    page 这么说

    TIFF 格式仅支持调色板/颜色的 R、G、B 组件 表。因此,在写入 alpha 信息时将无声无息 丢弃。

    (因此,在阅读时不可用)

    似乎在这种情况下(文件中没有 alpha)GDAL 将 0 的 alpha 分配给 NA 标志,将 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], ct[,3], ct[,4], maxColorValue=255)
    head(cols)
    #[1] "#FFFFFF00" "#969696FF" "#FA00FFFF" "#F200FFFF" "#E600FFFF" "#DE00FFFF"
     
    

    【讨论】:

    • Robert Hijmans,感谢您提供的信息。然而,GDAL 的那句话让我非常困惑。使用他们的gdalinfo,它可以从 TIFF 中检索正确的 alpha 值。所以我没有得到 TIFF 格式只支持 R,G,B 的部分
    • 可能是 4 层(波段)TIFF 文件(即不使用颜色表)?
    • 罗伯特,它只有 1 个乐队。我已经在问题中附加了 TIFF 文件以供参考。
    • 我认为在这种情况下,NA 的 alpha 为 0,所有其他值的 alpha 为 255。 GDAL 分配这些,因为它们不在文件中。
    • 噢!我懂了。它被视为只有0255 的布尔值?不过这是有道理的。
    猜你喜欢
    • 2013-03-16
    • 2016-09-04
    • 1970-01-01
    • 2015-05-22
    • 2021-05-10
    • 2019-11-08
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    相关资源
    最近更新 更多