2013-01-03 7 views
10

Ja obecnie pracuje nad zastosowaniem analizy składowych głównych do danych wizualnych w R.Jak korzystać R do podstawowej obróbki obrazu

w Matlab, można powołać komendy takie jak „im2double” i „mat2gray” w celu przekształcenia bitmapy do matrycy numerycznej iz powrotem do obrazu.

Zastanawiam się, czy można to osiągnąć w R, może za pośrednictwem dodatkowych pakietów.

+1

Wątek nie jest pytaniem statystycznym. Prawdopodobnie lepiej dla R-pomocy niż tutaj. Ale są pakiety takie jak bmp, readbitmap, pixmap i raster, które mogą robić, co chcesz - w zależności od tego, co dokładnie jest (nie całkiem widzę link do głównych składników). –

+0

Polecenie 'image' pozwala wyświetlać proste obrazy w skali szarości lub indeksowane, np. 'image (1: 100,1: 100, (1: 100)% *% t (1: 100)/100, col = rgb (1: 100/100,1: 100/100,1: 100/100)) ', ale pakiet EBImage, o którym @MattBagg mówi poniżej, wydaje się znacznie lepszy. O ile mi wiadomo, baza R nie obsługuje ładowania obrazów, więc musiałbyś preprocesować z netpbm lub podobnym. – user295691

+0

Dostępne są dwa pakiety do przetwarzania obrazu: EBImage i adimpro. – marbel

Odpowiedz

7

Użyłem pakiet EBImage (vignette tutaj) dostępny na BioConductor pracować i manipulowanie obrazami:

# 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

byłem na tyle ciekawy, aby spróbować to na zewnątrz; najwyraźniej pakiet jest lepszym rozwiązaniem, ale jeśli naprawdę chcesz trzymać się R, to załaduje png (choć do góry nogami i do tyłu, to prawdopodobnie można naprawić). Zakłada obecność narzędzi netpbm, więc prawdopodobnie nie będzie działać po wyjęciu z pudełka w systemach 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)) 
} 

można uruchomić image(img) na liście zwrócony z tej funkcji bezpośrednio, lub dostęp do wartości na piksel używając img $ z.

1

Stosunkowo nowy pakiet tiff będzie ładnie czytał i zapisywał obrazy TIF.
Niezależnie od względnie prostej manipulacji obrazem, polecam użycie ImageJ lub SAOImage9 z grupy Harvard-Smithsonian: http://www.cfa.harvard.edu/resources/software.html.

Napisałem narzędzia w R do łączenia pikseli, dzielenia pikseli, Sobel & Hough transformuje, odbarwia, itp., Z wielkim sukcesem. Ostatecznie wybór aplikacji zależy od wielkości zdjęć i rodzaju przetwarzania, który musisz wykonać.

+0

Dlaczego nie udostępniać niektórych swoich narzędzi? – by0

+0

@ by0 Niestety, jest duża różnica między szybkimi hackami, które wykonują zadanie, a funkcją, która jest solidna, czy poprawność danych wejściowych, a w szczególności przetwarzanie obrazu, jest dość szybka. Żadne z moich narzędzi graficznych nie spełnia takich kwalifikacji. –

1

Dwie metody instalacji pakietu.

  1. zainstalować poprzez linię poleceń, jeśli nie masz edytora podobnego RStudio
  2. zainstalować z wiersza poleceń wpisując w R R tłumacza za pomocą polecenia w bash.

Przejdź do pytania, gdzie można wykonywać polecenia R. Oto podstawowe polecenie przetwarzania obrazu.

wykonać to polecenie, aby zainstalować backage Bio przewodu biocLite, które pomogą zainstalować pakiet EBIMage (Pakiet ten jest szeroko stosowany do przetwarzania obrazu)

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

zainstalować pakiet EMImage do używania komend przetwarzania obrazu.

biocLite("EBImage") 

Załaduj pakiet EBIMage aby skorzystać z przetwarzania obrazu

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 

Uwaga: readImage czytać obraz. Wyświetlacz służy do wyświetlania obrazu w oknie graficznym.

Powiązane problemy