2017-03-04 122 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")