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