Sys.setenv(RGL_USE_NULL=TRUE)
library(OpenImageR)
library(doParallel)
## Loading required package: foreach
## Loading required package: iterators
## Loading required package: parallel
library(foreach)
library(jpeg)
library(EBImage)
##
## Attaching package: 'EBImage'
## The following objects are masked from 'package:OpenImageR':
##
## readImage, writeImage
#Here we add graphics to the data set.
# set counter limit to 17
num = 17
# read jpegs into files list
(files = list.files('/Users/Audiorunner13/CUNY MSDS Course Work/DATA605 Fall 2022/Week 4/jpg/',pattern="\\.jpg")[1:num])
## [1] "RC_2500x1200_2014_us_53446.jpg" "RC_2500x1200_2014_us_53455.jpg"
## [3] "RC_2500x1200_2014_us_53469.jpg" "RC_2500x1200_2014_us_53626.jpg"
## [5] "RC_2500x1200_2014_us_53632.jpg" "RC_2500x1200_2014_us_53649.jpg"
## [7] "RC_2500x1200_2014_us_53655.jpg" "RC_2500x1200_2014_us_53663.jpg"
## [9] "RC_2500x1200_2014_us_53697.jpg" "RC_2500x1200_2014_us_54018.jpg"
## [11] "RC_2500x1200_2014_us_54067.jpg" "RC_2500x1200_2014_us_54106.jpg"
## [13] "RC_2500x1200_2014_us_54130.jpg" "RC_2500x1200_2014_us_54148.jpg"
## [15] "RC_2500x1200_2014_us_54157.jpg" "RC_2500x1200_2014_us_54165.jpg"
## [17] "RC_2500x1200_2014_us_54172.jpg"
View Shoes Function plot_jpeg
# Set Adjustment Parameters
height = 1200; width = 2500; scale = 20
plot_jpeg = function(path, add = FALSE){ jpg = readJPEG(path,native = T) # read the file
(res = dim(jpg)[2:1]) # get the resolution, [x,y]
if (!add) # initialize an empty plot area if add == FALSE
plot(1,1,xlim = c(1,res[1]),ylim = c(1,res[2]),asp=1, type = 'n', xaxs='i',yaxs='i',xaxt='n',yaxt='n',xlab='',ylab='',bty='n')
rasterImage(jpg,1,1,res[1],res[2])
}
Loads data into an array
# Load array
im=array(rep(0,length(files)*height/scale*width/scale*3), dim=c(length(files), height/scale, width/scale,3))
for (i in 1:17){
temp=resize(readJPEG(paste0("/Users/Audiorunner13/CUNY MSDS Course Work/DATA605 Fall 2022/Week 4/jpg/",files[i])),height/scale, width/scale)
im[i,,,]=array(temp,dim=c(1, height/scale, width/scale,3))
}
Vectorize
flat=matrix(0,17,prod(dim(im)))
for (i in 1:17) {
newim <- readJPEG(paste0("/Users/Audiorunner13/CUNY MSDS Course Work/DATA605 Fall 2022/Week 4/jpg/",files[1]))
r=as.vector(im[i,,,1]); g=as.vector(im[1,,,2]);b=as.vector(im[1,,,3])
flat[i,] <- t(c(r,g,b))
}
shoes=as.data.frame(t(flat))
Actual Plots of images
# Old shoes
par(mfrow=c(3,3))
par(mai=c(.3,.3,.3,.3))
for (i in 1:17){
plot_jpeg(writeJPEG(im[i,,,]))
}
# Eigencomponents from correlation structure
scaled = scale(shoes, center = TRUE, scale = TRUE)
mean.shoe=attr(scaled, "scaled:center") # saving for classification
std.shoe=attr(scaled, "scaled:scale") # saving for classification...later
scaled[is.na(scaled)] = 0
Calculate the Covariance(Correlation)
Sigma_=cor(scaled)
Get the Eigencomponents
myeigen=eigen(Sigma_)
cumsum(myeigen$values)/ sum(myeigen$values)
## [1] 0.8594596 0.9213376 0.9395480 0.9484448 0.9569411 0.9642784 0.9692101
## [8] 0.9738644 0.9781265 0.9823173 0.9857965 0.9889028 0.9917276 0.9943113
## [15] 0.9966497 0.9988442 1.0000000
Eigenshoes
scaling=diag(myeigen$values[1:5]^(1/2)) / (sqrt(nrow(scaled)-1))
eigenshoes=scaled %*% myeigen$vectors[,1:5] %*% scaling
par(mfrow=c(2,3))
imageShow(array(eigenshoes[,1], c(60,125,3)))
Generate Principal Components Transform the images.
height=1200
width=2500
scales=20
newdata=im
dim(newdata) = c(length(files),height * width * 3 / scale^2)
mypca = princomp(t(as.matrix(newdata)), scores = TRUE, cor=TRUE)
Eigenshoes Generate Eigenshoes
mypca2 = t(mypca$scores)
dim(mypca2) = c(length(files),height/scale, width/scale, 3)
par(mfrow = c(5,5))
par(mai = c(.001, .001, .001, .001))
for (i in 1:17){ #plot the first 17 Eigenshoes only
plot_jpeg(writeJPEG(mypca2[i,,,], bg="white")) # complete without reduction
}
a = round(mypca$sdev[1:17]^2 / sum(mypca$sdev^2), 3)
cumsum(a)
## Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 Comp.8 Comp.9 Comp.10
## 0.693 0.794 0.845 0.872 0.891 0.907 0.921 0.933 0.943 0.952
## Comp.11 Comp.12 Comp.13 Comp.14 Comp.15 Comp.16 Comp.17
## 0.960 0.968 0.976 0.983 0.989 0.995 1.000