读取 R 中的图像并访问像素信息



我想读取(多个)图像(例如,使用read.jpeg,EBImage),而不是选择图像的一部分(ROI)并计算该区域的亮度(例如亮度= sqrt( .241*R^2 + .691*G^2 + .068*B^2 ))。如何访问此值 (RGB)?示例代码只是打开并裁剪图像:

require('EBImage')
Image <- readImage('path/image.JPG')
display(Image)
Image <- Image[200:400, 200:300,]
display(Image)
.
.
.
Y  <-  0.2126*R^2 + 0.7152*G^2 + 0.0722*B^2

最后,我将通过数千张图片的循环运行,并将每张图片的值写入向量中,因此它应该非常有效。

EBImage是一个Bioc软件包(但由于它无法在运行Yosemite的Mac上正确编译),我最初探索这个问题的努力失败了。在这台运行Lion的机器上,我能够演示如何查看正式类"图像"的项目以及如何将它们分开。(我正在使用附加到我的一封电子邮件的商业文件作为我的测试用例,它只有 142 x 69 像素,所以我使用了一个较小的"窗口"

> Image <- Image[75:100, 25:50,]
> display(Image)
> str(Image)
Formal class 'Image' [package "EBImage"] with 2 slots
  ..@ .Data    : num [1:21, 1:31, 1:3] 1 1 1 1 1 ...
  ..@ colormode: int 2

因此,此 S4 对象的.Data组件是 21 x 31 x 3 R 数组。大概有红色,绿色和蓝色层,尽管我不是图像专家,可能还有其他颜色设计。这将让你"看到"第一层的左上角:

> Image@.Data[ 1:5,1:5 , 1]
     [,1]      [,2]      [,3]      [,4]      [,5]
[1,]    1 0.9882353 1.0000000 1.0000000 1.0000000
[2,]    1 1.0000000 1.0000000 1.0000000 1.0000000
[3,]    1 1.0000000 1.0000000 0.9803922 0.8470588
[4,]    1 1.0000000 0.9960784 0.8588235 0.6627451
[5,]    1 1.0000000 0.9607843 0.8470588 0.6901961

请注意作为中缀提取运算符的 at 符号而不是美元符号。这将提供一种机制,用于计算图层值与请求的系数和平方的总和:

> Y  <-  0.2126*Image@.Data[ , , 1]^2 + 0.7152*Image@.Data[ , , 2]^2 + 0.0722*Image@.Data[ , , 3]^2
> str(Y)
 num [1:21, 1:31] 0.974 0.956 0.957 0.963 0.97 ...

结果是与投影的 RGB 图层相同尺寸的"强度"的 R 矩阵(如果这是.jpg文件使用的)。

最新更新