【问题标题】:How To Convert an XY-RGB dataframe into a Image [cimg type]如何将 XY-RGB 数据帧转换为图像 [cimg 类型]
【发布时间】:2020-03-26 01:08:32
【问题描述】:

使用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

【问题讨论】:

    标签: r dataframe cimg


    【解决方案1】:

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

    【讨论】:

    • 感谢这对我的情况非常有效,我认为文档需要更新,因为没有提到参数x, y, cc。它说只支持obj, v.name, dim,所有其他都被忽略,考虑到你在这里的工作示例,这是不正确的。我向页面提交了编辑请求以添加此类详细信息,再次感谢您的帮助
    • 软件包中有一些教程看起来非常有用,并通过大量工作示例进一步解释了参数。我确实看到 x 和 y 在 ?as.cimg 参数部分中作为命名参数被提及,并且在 ?cimg 的描述部分中也被提及。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 2019-07-06
    • 2021-12-15
    • 1970-01-01
    • 2020-07-03
    • 2011-12-07
    相关资源
    最近更新 更多