2015-01-10 40 views
0

我想读取(多个)图像(例如,使用read.jpeg,EBImage)而不是选择图像的一部分(ROI)并计算该区域的亮度(例如,亮度= sqrt(.241 * R^2 + .691 * G^2 + .068 * B^2))。 我怎样才能访问这个值(RGB)?示例代码只是打开和作物图片:在R中读取图像并访问像素信息

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 

最后,我将通过一个循环超过数千图片运行这个和向量中每个画面写入值,所以它应该是非常有效的。

+0

(如果是文件使用的是什么的.jpg)。首先,阅读'readImage'的帮助文件。我会为你做,但你没有说明可以找到哪个包。与此同时,考虑CRAN软件包'jpg',它可以通过r,g,b'三维数组生成一个'X by y。从那里做你想做的是微不足道的。 –

+0

或许'browseVignettes(“EBImage”)'会有帮助吗?也许'imgk = channel(img,'rgb')' – ckluss

回答

1

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 
    [email protected] .Data : num [1:21, 1:31, 1:3] 1 1 1 1 1 ... 
    [email protected] colormode: int 2 

所以这个.Data组件S4对象是一个21 x 31 x 3 R阵列,大概有红色,绿色和蓝色图层,虽然我不是图像专家,可能还有其他颜色方案,这会让您“看到”左上角第一层:

> [email protected][ 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符号而不是美元符号作为中缀运算符提取这将提供一个机制,用于计算层val的总和用的系数和平方的UE你请求:

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

结果是相同的尺寸投影RGB各层的“强度”的R矩阵

+0

干得好。现在,如果只有SO可以学习RTFM并理解“插槽”是什么:-( –

+0

感谢BondedDust!它的工作原理非常棒! – Hans