r - 如何使用 3D 数组中的 image() 函数绘制 RGB 图像?
问题描述
我有一个尺寸为 (28,28,3) 高度、宽度、深度的数组。每个深度都是 RGB 通道之一。值介于 0 和 1 之间。
我想使用 image() 函数来绘制图像。z 参数是一个矩阵。如何将数组转换为矩阵以便能够绘图?
我的最终目标是拥有这样的东西,但带有彩色图像。
解决方案
问题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)
推荐阅读
- c# - 表上的 EF Core 删除违反了表上的外键约束
- asp.net - 如何将 .resx 文件存储在 javascript 对象中?
- ios - 广播结束,但计时器继续工作
- react-native - 如何更新在文本字段中输入的值以对 API 做出本机反应?
- c# - 无法在 Visual Studio 2017 中构建我的单元测试项目
- security - 为什么这个问题会导致 CSRF 问题?
- shell - 如何编写脚本来创建 EC2 实例
- angular - 我需要以角度将数据从一种方法调用到另一种方法吗?
- ios - 重新排列表格视图单元格时出现问题
- python - sqlalchemy 使用键子字符串连接两个模型