如何将 XY-RGB 数据帧转换为图像 [cimg 类型]

How To Convert an XY-RGB dataframe into a Image [cimg type]

使用 imager 库,我有一个数据框,其中包含有关列中图像的以下信息:

我正在尝试将此数据帧转换为 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

如果我正确阅读了 ?cimg 帮助页面,您将需要一个视频时间变量,然后可以将 rgb 数据堆叠在单个值列中。然后阅读 ?as.cimg 页面,您似乎还需要指定 c=3 的颜色维度数。我的工作目录中确实有 ,所以我将三个 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)

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