首页 > 解决方案 > 如何使用 3D 数组中的 image() 函数绘制 RGB 图像?

问题描述

我有一个尺寸为 (28,28,3) 高度、宽度、深度的数组。每个深度都是 RGB 通道之一。值介于 0 和 1 之间。

我想使用 image() 函数来绘制图像。z 参数是一个矩阵。如何将数组转换为矩阵以便能够绘图?

我的最终目标是拥有这样的东西,带有彩色图像。

标签: rimageimage-processingplot

解决方案


问题graphics::image在于它不会将您的 3D 数组绘制为彩色图像。它将矩阵绘制为热图。

让我们来一张彩色图案的图像:

R <- matrix(rep(sin(seq(0, 2*pi, length.out = 31))^2, length.out = 900), nrow = 30)
G <- matrix(rep(cos(seq(0, 2*pi, length.out = 15))^2, length.out = 900), nrow = 30)
B <- matrix(rep(sin(seq(pi, 2*pi, length.out = 30))^2, length.out = 900), nrow = 30)

my_img <- c(R, G, B)
dim(my_img) <- c(30, 30, 3)

现在,如果我raster按照@IanCampbell 的建议绘制它,我会得到我想要的图像:

plot(raster::as.raster(my_img))

在此处输入图像描述

而如果我使用 绘制一层(这里是红色通道)image,我会得到一个热图:

image(R)

在此处输入图像描述

如果你真的想使用image,那么你必须对所有层进行平均,但是你会丢失颜色信息,并且仍然会得到一个热图:

image((R + B + G)/3)

在此处输入图像描述

所以底线是,如果你想绘制彩色图像,那么image不是你正在寻找的功能。有很多方法可以在单个 R 窗口中绘制多个彩色图像,所以说你必须使用image因为你需要绘制图像网格是不正确的。

例如:

grid.arrange(rasterGrob(my_img),   rasterGrob(1-my_img),
             rasterGrob(1-my_img), rasterGrob(my_img), ncol = 2)

在此处输入图像描述


推荐阅读