#source("http://bioconductor.org/biocLite.R")
#biocLite()
#biocLite("EBImage")
Yo elegí una libreria indie para manejar imagenes. Pero para que se puedan ver en el reporte uso “pixmap”.
library(EBImage)
## Loading required package: abind
library(pixmap)
cargamos la imagen
edgar<-readImage("/home/fou/Desktop/9/Multivariado/edgarin.jpg")
edgar
## Image
## colormode: Color
## storage.mode: double
## dim: 2240 1344 3
## nb.total.frames: 3
## nb.render.frames: 1
##
## imageData(object)[1:5,1:6,1]:
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.9411765 0.9372549 0.9372549 0.9372549 0.9333333 0.9294118
## [2,] 0.9411765 0.9372549 0.9372549 0.9372549 0.9294118 0.9254902
## [3,] 0.9372549 0.9372549 0.9333333 0.9294118 0.9254902 0.9215686
## [4,] 0.9333333 0.9333333 0.9294118 0.9254902 0.9215686 0.9137255
## [5,] 0.9294118 0.9294118 0.9254902 0.9215686 0.9176471 0.9137255
#display(edgar)
plot(pixmapRGB(edgar))
vemos que es una arreglo tridimensional y la pasamos a escala de grises
pic<-as.matrix(edgar[,,1])
head(pic)
## Image
## colormode: Color
## storage.mode: double
## dim: 6 1
## nb.total.frames: 1
## nb.render.frames: 1
##
## imageData(object)[1:5,1:1]:
## [1] 0.9411765 0.9411765 0.9372549 0.9333333 0.9294118
colorMode(edgar)<-Grayscale
#display(edgar)
plot(pixmapGrey(edgar))
nos quedamos con la primer capa
library(amap)
m1<-pca(pic)
veamos la gráfica codo
screeplot(m1)
plot(log(1:length(m1$eig),base=1.3),m1$eig/sum(m1$eig),type="o",col="purple",xlab="# componente",ylab="% var de la componente")
plot(log(1:length(m1$eig),base=1.3),cumsum(m1$eig)/sum(m1$eig),type="b",col="blue",xlab="# componente",ylab="% var explicado")
según con treinta componentes basta
componentes<-m1$loadings[,1:30]
compress<-as.Image(pic%*%componentes)
veamos la imagen compresa
compress
## Image
## colormode: Grayscale
## storage.mode: double
## dim: 2240 30
## nb.total.frames: 1
## nb.render.frames: 1
##
## imageData(object)[1:5,1:6]:
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 18.37649 26.86229 0.5016189 -2.638858 -2.443864 -2.771095
## [2,] 18.37085 26.86746 0.4979342 -2.630319 -2.446255 -2.789739
## [3,] 18.36403 26.86616 0.4845997 -2.633758 -2.446896 -2.784664
## [4,] 18.36530 26.86135 0.4875076 -2.635166 -2.443909 -2.791641
## [5,] 18.35426 26.84697 0.5033636 -2.629238 -2.453972 -2.804934
#display(compress)
plot(pixmapGrey(compress))
no se ve nada! y la descomprimimos
descompress<-as.Image(compress%*%t(componentes))
#display(descompress)
plot(pixmapGrey(descompress))
A pesar de que Edgar no luce tan bien en esta foto, como usualmente se ve, sólo usamos 30 componentes, es menos del \(\frac{1344*30+2240*30}{1344*2240} \sim 4\)% del espacio de almacenamiento original de la foto.
Repitamos la compresión de la imagen pero con 85 componentes para utilizar un espacio de memoria aproximado del \(\frac{1344*85+2240*85}{1344*2240} \sim 10\)% original
componentes<-m1$loadings[,1:85]
compress<-as.Image(pic%*%componentes)
veamos la imagen compresa
compress
## Image
## colormode: Grayscale
## storage.mode: double
## dim: 2240 85
## nb.total.frames: 1
## nb.render.frames: 1
##
## imageData(object)[1:5,1:6]:
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 18.37649 26.86229 0.5016189 -2.638858 -2.443864 -2.771095
## [2,] 18.37085 26.86746 0.4979342 -2.630319 -2.446255 -2.789739
## [3,] 18.36403 26.86616 0.4845997 -2.633758 -2.446896 -2.784664
## [4,] 18.36530 26.86135 0.4875076 -2.635166 -2.443909 -2.791641
## [5,] 18.35426 26.84697 0.5033636 -2.629238 -2.453972 -2.804934
#display(compress)
plot(pixmapGrey(compress))
y la descomprimimos
descompress<-as.Image(compress%*%t(componentes))
#display(descompress)
plot(pixmapGrey(descompress))
Y la calidad es buena considerando que se ahorro 90% de espacio en memoria.
Repitamos la compresión de la imagen pero con 300 componentes para utilizar un espacio de memoria aproximado del \(\frac{1344*300+2240*300}{1344*2240}\sim 36\)% original
componentes<-m1$loadings[,1:300]
compress<-as.Image(pic%*%componentes)
veamos la imagen compresa
compress
## Image
## colormode: Grayscale
## storage.mode: double
## dim: 2240 300
## nb.total.frames: 1
## nb.render.frames: 1
##
## imageData(object)[1:5,1:6]:
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 18.37649 26.86229 0.5016189 -2.638858 -2.443864 -2.771095
## [2,] 18.37085 26.86746 0.4979342 -2.630319 -2.446255 -2.789739
## [3,] 18.36403 26.86616 0.4845997 -2.633758 -2.446896 -2.784664
## [4,] 18.36530 26.86135 0.4875076 -2.635166 -2.443909 -2.791641
## [5,] 18.35426 26.84697 0.5033636 -2.629238 -2.453972 -2.804934
#display(compress)
plot(pixmapGrey(compress))
y la descomprimimos
descompress<-as.Image(compress%*%t(componentes))
#display(descompress)
plot(pixmapGrey(descompress))
Que se ve mucho mejor