问题与矩阵重组中的问题相似但不同
我有一些 PNG 文件,想做一些像素分析。使用 png 库,我可以轻松读取图像:
myImage <- readPNG("4colorpattern_15.png",native=FALSE)
str(myImage)
输出是
## num [1:483, 1:483, 1:3] 0 0 0 0 0 0 0 0 0 0 ...
我想把它重新组织成类似的东西
X Y R G B A
0 0 0 0 0 0
1 0 0 0 0 0
...
X,Y 是坐标,RGB 是该像素的红色、绿色和蓝色值,A 是 alpha(如果图像有它)。
我一直在阅读有关重塑和融化的内容,但似乎并非如此。我没有 R 技能来设计一个 mapply 函数来做到这一点。我想避免创建可能有效但效率低下的嵌套 fors。
编辑 数组似乎可以解决问题:
nrow <- dim(myImage)[1]
ncol <- dim(myImage)[2]
nbands <- dim(myImage)[3]
array(myImage,dim=c(nrow*ncol,nbands))
我仍然需要检查顺序是否正确,但我仍然认为其中一个 apply 函数可以做到。此外,这个解决方案没有给我 X 和 Y 坐标。
编辑 2
我添加了一个非常小的 PNG——抱歉,点击它太难了!它是一个 9x4 PNG,具有 3x2 像素的 3x2 图案。顶行颜色为黑色、红色、绿色,底行颜色为蓝色、黄色、洋红色。
从该图像中,我希望得到一个类似于
X Y R G B (no A in this case)
0 0 0 0 0
1 0 0 0 0
2 0 0 0 0
3 0 1 0 0
4 0 1 0 0
5 0 1 0 0
6 0 0 1 0
7 0 0 1 0
8 0 0 1 0
...
0 2 0 0 1
1 2 0 0 1
2 2 0 0 1
3 2 1 1 0
4 2 1 1 0
5 2 1 1 0
6 2 1 0 1
7 2 1 0 1
8 2 1 0 1
(很多省略)
这是图片的放大版本供参考,但结果是基于 9x4 的。