2015-01-10 45 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