Mar*_*ent 6 rgb r pixel colors
谁能帮助我如何从R中的图像中获取RGB像素数据?
我需要这些信息来比较鸟类羽毛的差异,以帮助理解物种形成事件.
我的照片是由数码相机拍摄的,现在是NEF文件.无论哪种类型的文件需要,我都有可能将文件转换为我想要的任何文件.但是,我更愿意在文件中保留尽可能多的信息(即PNG文件很好).
我在R:Pixmap,Raster,ImageMetrics中尝试过很多软件包,浏览互联网,测试方法,问同学等几周试图解决这个问题.在Stackoverflow我试过这个:如何提取像素数据使用R的pixmap包?,没有运气.我的文件对于R窗口来说也太大了(整个数组都没有显示),我很难理解生成的数组.对我来说最好的事情是将数据作为矩阵或以其他方式获取,以便更容易理解什么是什么.我发现了很多类似的问题,但在其他程序(如Java,C++,IOS,Matlab,Python等)中,我很遗憾不知道如何使用.
我的问题可能是由于我在这类工作中的低技能,但我正在尽我所能地尝试我的背景.如果有人可以帮助我或给我索取提示,我将非常感激.
首先,我生成一个示例png图像:
png("/tmp/test.png")
plot(rnorm(100))
dev.off()
Run Code Online (Sandbox Code Playgroud)
然后我将它转换为可读的格式pixmap:这里我将png转换为ppm文件,因为我想保留颜色信息.我从命令行使用ImageMagick,但您可以使用您想要的任何程序:
$ convert /tmp/test.png /tmp/test.ppm
Run Code Online (Sandbox Code Playgroud)
接下来,您可以使用包中的read.pnm函数读取图像pixmap:
x <- read.pnm("/tmp/test.ppm")
Run Code Online (Sandbox Code Playgroud)
然后,可以使用x@red,x@blue,x@green时隙(或x@grey对于灰度图像),以获得针对每个信道作为一个矩阵的象素值.您可以检查矩阵的尺寸是否与图片的尺寸相同:
dim(x@red)
[1] 480 480
Run Code Online (Sandbox Code Playgroud)
采取这个小样本 3x3 像素 png 图像:

然后:
library('png')
download.file('https://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
Run Code Online (Sandbox Code Playgroud)
如果您正在读取带有 Alpha 通道的 PNG 图像(如上面的示例图像),则每个变量pix.都是一个具有四个条目的向量,每个条目对应于像素的红色、绿色、蓝色和 Alpha 值。
> pix.top.left
[1] 1 0 0 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12017 次 |
| 最近记录: |