任何人都可以帮我解决如何从R?中的图像中获取RGB像素数据的问题。
我需要这些信息来比较鸟类羽毛的差异,以帮助理解物种形成事件。
我的照片是由数码相机拍摄的,现在是NEF文件。无论哪种类型的文件需要,我都有可能将文件转换为我想要的任何文件。但是,我更愿意在文件中保留尽可能多的信息(即PNG文件很好)。
我在R:Pixmap,Raster,ImageMetrics中尝试过很多软件包,浏览互联网,测试方法,问同学等几周试图解决这个问题。 在Stackoverflow,我试过这个:How to extract the pixel data Use R's pixmap package?,没有运气。我的文件对于R窗口来说也太大了(整个数组都没有显示),我很难理解生成的数组。对我来说最好的事情是将数据作为矩阵或以其他方式获取,以便更容易理解什么是什么。 我发现了很多类似的问题,但在其他程序(如Java,C ++,IOS,Matlab,Python等)中,我很遗憾不知道如何使用。
我的问题可能是由于我在这类工作中的低技能,但我正在尽我所能地尝试我的背景。 如果有人可以帮助我或给我索取提示,我将非常感激。
答案 0 :(得分:8)
首先,我生成一个示例png
图片:
png("/tmp/test.png")
plot(rnorm(100))
dev.off()
然后我将其转换为pixmap
可读的格式:这里我将png转换为ppm文件,因为我想保留颜色信息。我从命令行使用ImageMagick,但你可以使用你想要的任何程序:
$ convert /tmp/test.png /tmp/test.ppm
接下来,您可以使用read.pnm
包中的pixmap
功能阅读图片:
x <- read.pnm("/tmp/test.ppm")
然后,您可以使用x@red
,x@blue
,x@green
广告位(或x@grey
作为灰度图像)来获取每个频道的像素值矩阵。您可以检查矩阵的尺寸是否与图片的尺寸相同:
dim(x@red)
[1] 480 480
答案 1 :(得分:2)
采取这个微小的样本3x3像素png图像:
然后:
library('png')
download.file('http://i.stack.imgur.com/hakvE.png', 'sample.png')
img <- readPNG('sample.png')
pix.top.left <- img[1,1,] # row 1, column 1
pix.bottom.left <- img[3,1,] # row 3, column 1
pix.top.right <- img[1,3,] # row 1, column 3
如果您正在阅读带有Alpha通道的PNG图像(如上面的示例图片),则每个pix.
变量都是一个包含四个条目的向量,每个条目对应红色,绿色,蓝色和像素的Alpha值。
> pix.top.left
[1] 1 0 0 1