我使用R中的biOps包从图像中提取RGB值。例如,我有一个10x10像素的图像。结果是一个数组,x[1:10,1:10,1]
代表红色,x[1:10,1:10,2]
代表绿色,x[1:10,1:10,3]
代表蓝色。我想将其转换为如下所示的数据框架:
(像素X位置,像素Y位置,红色值,绿色值,蓝色值)
X Y R G B
1 1 255 255 255
1 2 255 255 255
1 3 0 0 0
...
10 10 255 255 255
重要:我并不总是知道像素的大小,我只是用10x10作为例子。
在R中怎么做?如有任何帮助,我将不胜感激。
干杯B
reshape2
库可以简化此操作。首先让我们创建一些测试数据
x <- array(sapply(1:3, function(i) sample(0:9, 100, replace=T)+i*10),昏暗的= c (10 10 3))
这是一个数组x
与您的dim c(10,10,3)
。现在我们可以融化数据并按我们喜欢的方式进行转换
mm <- melt(x, varnames=c("X","Y","Color"))
mm$Color <- factor(mm$Color, levels=1:3, labels=c("Red","Blue","Green"))
xx <- dcast(mm, X+Y~Color)
head(xx)
生成类似
这样的数据 X Y Red Blue Green
1 1 1 10 26 33
2 1 2 12 23 31
3 1 3 13 25 32
4 1 4 18 24 31
5 1 5 18 26 35
6 1 6 14 24 36
注意reshape
命令不关心它是10x10
,它只会取消数组的每个维度。你只需要确保第三个维度是3,以对应这三种颜色。