如何将 XY-RGB 数据帧转换为图像 [cimg 类型]
How To Convert an XY-RGB dataframe into a Image [cimg type]
使用 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
如果我正确阅读了 ?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 ...
使用 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
如果我正确阅读了 ?cimg
帮助页面,您将需要一个视频时间变量,然后可以将 rgb 数据堆叠在单个值列中。然后阅读 ?as.cimg
页面,您似乎还需要指定 c=3 的颜色维度数。我的工作目录中确实有 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 ...