2015-01-10 4 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', который создает' X by y по r, g, b' 3D-массив. Из этого тривиально делать то, что вы хотите. –

+0

возможно 'browseVignettes (" EBImage ")' поможет? возможно, 'imgk = channel (img, 'rgb')' – ckluss

ответ

1

EBImage - это пакет Bioc (но поскольку он не будет правильно компилироваться на Mac, работающем с Yosemite), я не смог вначале попытаться изучить эту проблему. На этой машине, на которой работает Lion, я могу продемонстрировать, как смотреть на элементы формального класса «Изображение» и как их сортировать. (Я использую коммерческий файл, который был прикреплен к одному из моих писем, как мой тестовый случай, и это всего лишь 142 х 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 

Обратите внимание на-знак, а не знак доллара в качестве оператора экстракции инфиксного Это обеспечит механизм для вычисления суммы слоя Валу ЕЭС с коэффициентами и возведение в квадрат вас просил:

> 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 ... 

Результатом является матрица R «интенсивности» одних и тех же размеров, что и проектируемых RGB слоев

+0

Молодцы. Теперь, если только SO может научиться RTFM и понять, что такое «слоты» :-( –

+0

Спасибо BondedDust! Он работает просто отлично! – Hans