2017-03-04 124 views
0

背景的黑白圖像中不需要着色:我試圖遵循this post如何旋轉,防止進口爲R

的步驟我已經下載圖像,並使其接近here。它被保存在R目錄baboon.png

enter image description here

現在來自R工作室我

library('png') # used the png package 
image = readPNG('baboon.png') # to read the image 

從那裏在後其餘部分的步驟可以遵循。例如,

baboon.svd = svd(image) 

baboon.1 = sweep(baboon.svd$u[,1,drop=FALSE],2,baboon.svd$d[1],"*") %*% 
    t(baboon.svd$v[,1,drop=FALSE]) 
baboon.20 = sweep(baboon.svd$u[,1:20,drop=FALSE],2,baboon.svd$d[1:20],"*") %*% 
    t(baboon.svd$v[,1:20,drop=FALSE]) 
baboon.250 = sweep(baboon.svd$u[,1:250,drop=FALSE],2,baboon.svd$d[1:250],"*") %*% 
    t(baboon.svd$v[,1:250,drop=FALSE]) 
image(baboon.1) 
image(baboon.20) 
image(baboon.250) 

然而,

  1. 產生的圖像被反時針旋轉了90度。
  2. 它們包含顏色信息,這在原始png中並不存在。

下面是一個例子:(?)

enter image description here

我認爲我可能需要將PNG圖像轉換爲PPM文件,以便能夠放棄色彩,但總的來說我d喜歡就上述兩個問題尋求幫助:旋轉和不需要的顏色。

回答

1

你如何試試這個。

install.packages("raster") 
install.packages("rgdal") 
library(raster) 
r1 <- brick("baboon.png")#please use any jpg image 
plotRGB(r1) 
png("baboonNew.png",width=nrow(r1),height=ncol(r1)) 
plotRGB(t(flip(r1, 1))) 
dev.off() 

我想我並沒有真正明白你在找什麼。我看到你有答案,也試試這個:

library(raster) 
library(rgdal) 
img <- "baboon.png" 
photo.raster<- raster(img) 
photo.flip <- flip(photo.raster, 2) 
photo.raster <- t(as.matrix(photo.flip)) 
dim(photo.raster) 

image(photo.raster, col = grey(seq(0, 1, length = 256))) 
+0

'R1 < - 磚(」請使用任何jpg圖像 錯誤.rasterObjectFromFile(x,objecttype =「RasterBrick」,...): 無法從此文件創建RasterLayer對象;也許你需要先安裝rgdal' – Toni

+0

你會收到警告信息,但它可以工作 –

+0

+1謝謝你的幫助。但最終你的代碼似乎旨在保存一個PNG圖像。然而,我需要的是一個矩陣,可以輸入到「svd」中。 – Toni

0

好的。這是我正在尋找的答案:

首先,我們需要下載軟件包EBImage,該軟件包不能立即在R版本3.3.1或更新版本中使用。我們可以做到這一點要Bioconductor,其中包可與clear code lines複製並粘貼入R然後安裝:

source("https://bioconductor.org/biocLite.R") 
biocLite("EBImage") 

其餘的只是如下:

library(png) 
library(EBImage) 

img = readImage("baboon.png") 
display(img, method="raster") 
dim(img) 
is.matrix(img) 
baboon.svd = svd(img) 

baboon.1 = sweep(baboon.svd$u[,1,drop=FALSE],2,baboon.svd$d[1],"*") %*% 
    t(baboon.svd$v[,1,drop=FALSE]) 


display(baboon.1, method="raster") #89 KB saved as png 646 x 466 

baboon.20 = sweep(baboon.svd$u[,1:20,drop=FALSE],2,baboon.svd$d[1:20],"*") %*% 
    t(baboon.svd$v[,1:20,drop=FALSE]) 

display(baboon.20, method="raster") #179 KB saved as png 646 x 466 

baboon.250 = sweep(baboon.svd$u[,1:250,drop=FALSE],2,baboon.svd$d[1:250],"*") %*% 
    t(baboon.svd$v[,1:250,drop=FALSE]) 
display(baboon.250, method ="raster")