2013-01-03 1 views
10

Я в настоящее время работает на применении основного компонента анализа визуальных данных в R.Как использовать R для основной обработки изображений

В Matlab, можно ссылаться на такие команды, как «im2double» и «mat2gray», чтобы преобразовать растровое изображение в числовую матрицу и обратно к изображению.

Мне было интересно, может ли это быть достигнуто в R, может быть, через дополнительные пакеты.

+1

Не в тему Я думаю, что это не статистический вопрос. Наверное, лучше для R-help, чем здесь. Но есть такие пакеты, как bmp, readbitmap, pixmap и растр, которые могут делать то, что вы хотите - в зависимости от того, что это (я не совсем вижу ссылку на основные компоненты). –

+0

Команда 'image' позволит вам отображать простые оттенки серого или индексированные изображения, например. (1: 100,1: 100, (1: 100)% *% t (1: 100)/100, col = rgb (1: 100/100,1: 100/100,1: 100/100)) ', но пакет EBImage, о котором @MattBagg говорит ниже, выглядит намного лучше. Насколько я знаю, база R не поддерживает загрузку изображений, поэтому вам придется предварительно обрабатывать netpbm или аналогичные. – user295691

+0

Для обработки изображений доступны два пакета: EBImage и adimpro. – marbel

ответ

7

Я использовал пакет EBImage (vignette здесь) доступны на Bioconductor для работы и работы с изображениями:

# installing package if needed 
source("http://bioconductor.org/biocLite.R") 
biocLite("EBImage") 

library(EBImage) 
f = readImage(system.file("images", "lena-color.png", package="EBImage")) 
str(f) 
#Formal class 'Image' [package "EBImage"] with 2 slots 
# [email protected] .Data : num [1:512, 1:512, 1:3] 0.886 0.886 0.875 0.875 0.886 ... 
# [email protected] colormode: int 2 
2

мне было достаточно любопытно попробовать это; очевидно, что пакет является лучшим решением, но если вы действительно хотите придерживаться базы R, это будет загружать png (хотя и вверх дном и назад, это, вероятно, исправление). Он предполагает наличие инструментов netpbm, поэтому, вероятно, не будет работать из коробки в системах Windows.

readPng <- function(pngFile) { 
    contents <- system(paste('pngtopnm',pngFile,'| pnmtoplainpnm'),intern=TRUE) 
    imgDims <- strsplit(contents[2], ' ') 
    width <- as.numeric(imgDims[[1]][1]) 
    height <- as.numeric(imgDims[[1]][2]) 
    rawimg <- scan(textConnection(contents),skip=3) 
    return(list(
    x=1:width, 
    y=1:height, 
    z=matrix(rawimg,width), 
    width=width, 
    height=height)) 
} 

Вы можете запустить image(img) на список, возвращаемый из этой функции непосредственно, или получить доступ к значениям попиксельных с помощью IMG $ Z.

1

Относительно новый пакет tiff будет хорошо читать и писать изображения TIF.
Все равно, для чего-либо иного, кроме относительно простого манипулирования изображениями, я бы рекомендовал использовать ImageJ или SAOImage9 из группы Harvard-Smithsonian: http://www.cfa.harvard.edu/resources/software.html.

Я написал инструменты в R, чтобы сделать слияние пикселей, разделение пикселей, Sobel & Хеп преобразования, обесцвечивание и т. Д., С большим успехом. В конечном счете выбор приложения зависит от размера ваших изображений и типа обработки, которую вам нужно сделать.

+0

Почему бы вам не поделиться некоторыми вашими инструментами? – by0

+0

@ by0 К сожалению, существует большая разница между некоторыми быстрыми хаками, которые выполняют задание и надежную функцию, правильную проверку ввода и, в частности, обработку изображений, достаточно быстро. Ни один из моих инструментов изображения не соответствует такой квалификации. –

1

Два способа установки пакета.

  1. установить через командную строку, если у вас нет редактора, как RStudio
  2. установить командную строку, введя в R интерпретатор с помощью команды R в Баш.

Перейти к подсказке, где вы можете выполнять команды R. вот эта основная команда обработки изображений.

выполнить эту команду для установки Bio проводника backage biocLite, который поможет установить пакет EBIMage (Этот пакет широко используются для обработки изображений)

source("http://bioconductor.org/biocLite.R") 

установить пакет EMImage использовать команды обработки изображений.

biocLite("EBImage") 

Загрузите пакет EBIMage использовать обработка изображений

library("EBImage") 
# Reading image from computer 
img=readImage(files="~/Desktop/Prog/R/tinago.JPG") 
display(img) 
img1=img+ 0.2 # increase brightness 
img2=img- 0.2 # decrease brightness 
display(img1) # Display images in browser or graphical window 
display(img2) # Display images in browser or graphical window 
img3= img * 0.5 # decrease contrast 
img4=img * 2 # increase contrast 
display(img3); display(img4) # show result images 
img5=img^2 # increase Gamma correction 
img6=img^0.7 # decrease Gamma correction 
display(img5); display(img6) # Display result images 

Примечание: readImage прочитать изображение. Дисплей используется для просмотра изображения в графическом окне.