Как получить таблицу цветов RGBA одноканального растра с помощью R?

Вот растровый файл с именем 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 (красный, зеленый, синий, альфа), а не просто значения RGB. Поскольку растровый файл также имеет альфа-значения, предположительно такие:

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

Альфа-значения можно проверить с помощью инструмента GDAL в командной строке следующим образом:

gdalinfo /path/to/singleband-raster.tif

Как получить таблицу цветов RGBA одноканального растра с помощью R?


person Abel Callejo    schedule 26.10.2020    source источник


Ответы (1)


На этой странице говорится, что

Формат TIFF поддерживает только компоненты R,G,B для палитр/таблиц цветов. Таким образом, при записи альфа-информация будет молча отброшена.

(и, следовательно, на чтение недоступны)

Кажется, что в этом случае (в файле нет альфы) GDAL присваивает альфу 0 флагу 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"
 
person Robert Hijmans    schedule 26.10.2020
comment
Роберт Хиджманс, спасибо за эту информацию. Однако это заявление от GDAL привело меня в замешательство. Используя их gdalinfo, он может получить правильные альфа-значения из TIFF. Поэтому я не понимаю ту часть, где формат TIFF поддерживает только R,G,B - person Abel Callejo; 26.10.2020
comment
Возможно, это 4-слойный (полосный) файл TIFF (т.е. без использования таблицы цветов)? - person Robert Hijmans; 26.10.2020
comment
Роберт, у него только 1 группа. Я уже прикрепил файл TIFF к вопросу для справки. - person Abel Callejo; 27.10.2020
comment
Я думаю, что в этом случае альфа равна 0 для NA и 255 для всех остальных значений. GDAL назначает их, так как их нет в файле. - person Robert Hijmans; 27.10.2020
comment
Ой! Я понимаю. Он обрабатывается как логическое значение только 0 или 255? Хотя в этом есть смысл. - person Abel Callejo; 27.10.2020