2016-08-02 7 views
0

Das Paket EBImagedisplay eine Funktion hat, die Image Objekte angezeigt werden kann, aber wenn imagematrix, matrix oder array ein Eingang ist, ist es auch möglich (als Raster) anzuzeigen.Convert Array Bild (EBImage) in R

Nun, wenn ich zu combine mehrere Bilder versuchen, ist es nur möglich, Image Objekte zu kombinieren, so seit meiner ersten Bilder in imagematrix oder matrix Format sind, kann ich nicht diese combine Funktion verwenden, dann mehrere Bilder anzuzeigen.

Meine Frage ist also: Wie konvertiert man eine Matrix in ein Image Objekt (EBImage)? (Wenn Sie eine andere Funktion haben mehrere Matrizen als Rasterbild angezeigt werden, hilft es auch.)

Antwort

0

TL; DR: die Image() Konstruktor Matrizen oder Arrays Image Objekte zu konvertieren.

Sie können einfach zwischen einfachen Matrizen/Arrays und Image Objekten mit Hilfe von imageData() Accessor und Image() Konstruktor wechseln. Eine andere Möglichkeit, eine Pixelintensitätsmatrix auf eine Image zu übertragen, ist die Verwendung von as.Image(). Im folgenden Beispiel wird diese Vorgehensweise bei einem einkanaligen Graustufenbild veranschaulicht.

library(EBImage) 

## sample grayscale image 
f <- system.file("images", "sample.png", package="EBImage") 
x <- readImage(f) 

## extract pixel intensity matrix from the Image object 
m <- imageData(x) 

## convert matrix to Image 
img <- Image(m) 

## combine and display the result 
img2 <- combine(img, img) 

display(img2, method="raster", all=TRUE) 

enter image description here

Wenn Ihr Pixelintensitäten Array enthält getrennte Farbkanäle für die roten, grünen und blauen Komponenten, würden Sie zusätzlich die colormode=Color Argument Image() angeben.

## get sample pixel intensity RGB array 
x <- readImage(system.file("images", "sample-color.png", package="EBImage")) 
a <- imageData(x) 

## convert back to Image 
img <- Image(a, colormode=Color) 

## combine and display the result 
img2 <- combine(img, img) 

display(img2, method="raster", all=TRUE) 

enter image description here

Falls Sie Farbkanäle als separate Matrizen, können Sie sie in einen Farb Image mit Hilfe von rgbImage() kombinieren.

## matrices corresponding to red, green and blue color channels 
r <- a[,,1] 
g <- a[,,2] 
b <- a[,,3] 

## construct an color Image object 
img <- rgbImage(r, g, b) 
+0

Funktioniert hier nicht. Ich erhalte den folgenden Fehler nach dem letzten Display-Anruf. 'Fehler in validImage (x): Objekt muss ein Array sein. Windows, R Ver 3.4.3 – dca

+0

Welche Version von EBImage verwenden Sie? (Sie können die Paketversion anzeigen, indem Sie 'packageVersion (" EBImage ")') ausführen. Der obige Code läuft unter der EBImage-Version einwandfrei. Wenn Sie also eine ältere Version haben, können Sie ein Upgrade durchführen, indem Sie 'source (" https://bioconductor.org/bioclite.R ") ausführen; bioClite ("EBImage") '. – aoles

+0

PackageVersion ("EMIage") = '4.20.1'. Und das ist der gleiche, nachdem ich Ihren Upgrade-Code ausgeführt habe. Und jetzt auf einem Mac. – dca