Как преобразовать фрейм данных XY-RGB в изображение [тип cimg] - PullRequest
1 голос
/ 26 марта 2020

Используя библиотеку imager, у меня есть кадр данных, который содержит следующую информацию об изображении в столбцах:

  • X column: x координата пикселя
  • Y column: координата y пикселя
  • Rvalue: красный компонент пикселя
  • Gvalue: зеленый компонент пикселя
  • Bvalue: синий компонент пикселя

Я пытаюсь преобразовать этот фрейм данных в cimg, чтобы сохранить его на диске как изображение - после того, как я закончил свою обработку на фрейме данных -.

Я попытался использовать as.cimg сделать преобразование, как указано в документе https://rdrr.io/cran/imager/man/as.cimg.data.frame.html

Но он не поддерживает аргумент RGB и принимает вместо него аргумент value, представляющий все цвета, как я могу конвертировать RGB в значение или как рассчитывается это значение, чтобы я мог перестроить его с помощью своего кода из компонентов RGB?

Вот пример, который можно попробовать с

install.packages('imager')
library(imager)
im <- load.image("~/any_image.png")
df_image <- as.data.frame(im, wide="c") # that's the same structure as my dataframe
# need to convert that back to an image

, вот пример заголовка моего df

  x y       c.1       c.2       c.3
1 1 1 0.8588235 0.7058824 0.4039216
2 2 1 0.9019608 0.7254902 0.4549020
3 3 1 0.8862745 0.7294118 0.4313725
4 4 1 0.8745098 0.7254902 0.4117647
5 5 1 0.8823529 0.7019608 0.4039216
6 6 1 0.8941176 0.7333333 0.4509804

1 Ответ

1 голос
/ 26 марта 2020

Если я читаю справочную страницу ?cimg правильно, вам понадобится переменная времени для видео, а затем вы можете поместить данные rgb в один столбец значений. Затем, читая страницу ?as.cimg, кажется, что вам также необходимо указать число цветовых измерений с c = 3. У меня есть png-график из предыдущего SO-ответа в моем рабочем каталоге, поэтому я перечислил три столбца rgb как один вектор и вызвал as.cimg с соответствующими параметрами для структуры:

im <- load.image( file.choose())
df_image <- as.data.frame(im, wide="c")
head(df_image)
  x y c.1 c.2 c.3
1 1 1   1   1   1
2 2 1   1   1   1
3 3 1   1   1   1
4 4 1   1   1   1
5 5 1   1   1   1
6 6 1   1   1   1
?as.cimg
str(df_image)
#-----------------------
'data.frame':   230400 obs. of  5 variables:
 $ x  : int  1 2 3 4 5 6 7 8 9 10 ...
 $ y  : int  1 1 1 1 1 1 1 1 1 1 ...
 $ c.1: num  1 1 1 1 1 1 1 1 1 1 ...
 $ c.2: num  1 1 1 1 1 1 1 1 1 1 ...
 $ c.3: num  1 1 1 1 1 1 1 1 1 1 ...
#--------------
length(unique(df_image$x))
#[1] 480
length(unique(df_image$y))
#[1] 480
my_cimg <- as.cimg(unlist(df_image[3:5]),x=480,y=480,cc=3) #480x480 RGB
plot(my_cimg)

enter image description here

str(my_cimg)
# 'cimg' num [1:480, 1:480, 1, 1:3] 1 1 1 1 1 1 1 1 1 1 ...
...