Как использовать R для базовой обработки изображений

В настоящее время я работаю над применением анализа основных компонентов для визуальных данных в R.

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

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

Ответ 1

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

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

Ответ 3

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

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

Ответ 4

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

  • установить через командную строку, если у вас нет редактора, такого как RStudio
  • установите командную строку, введя интерпретатор R, используя команду R в bash.

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

выполнить эту команду, чтобы установить biocLite biioLite для биопровода, который поможет установить пакет 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 для чтения изображения. Дисплей используется для просмотра изображения в графическом окне.