Build and Visualize Eigenimagery
The dataset we are going to manipulate is data downloaded from DATA605 course which is a compressed files of 17 images of various sizes and jpg extension. We load all 17 files.
These images are shoes of various colors.
We will load all 17 files from C-drive location.
We read these images with their dimensions(2500x1200).
num=17 #17jpg images downloaded
files=list.files("C:/Users/Petit Mandela/OneDrive/Documents/Data605_HW4/images", pattern="\\.jpg")[1:num]
# Function to read the image file with dimensions
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])
}
We will load all images into an Array
images=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("C:/Users/Petit Mandela/OneDrive/Documents/Data605_HW4/images/", files[i])),height/scale, width/scale)
images[i,,,]=array(temp,dim=c(1, height/scale, width/scale,3))}
Let’s use matrix/Vectorize
flat=matrix(0, 17, prod(dim(images)))
for (i in 1:17) {
new_images <- readJPEG(paste0("C:/Users/Petit Mandela/OneDrive/Documents/Data605_HW4/images/", files[i]))
r=as.vector(images[i,,,1]); g=as.vector(images[i,,,2]);b=as.vector(images[i,,,3])
flat[i,] <- t(c(r, g, b))
}
shoes=as.data.frame(t(flat))
Let’s see the actual Plots
par(mfrow=c(5,4))
par(mai=c(.3,.3,.3,.3))
for (i in 1:17){ #plot the first images only
plot_jpeg(writeJPEG(images[i,,,]))
}

Get 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
Calculate Covariance (Correlation)
Sigma_=cor(scaled)
Get the Eigencomponents
myeigen=eigen(Sigma_)
cumsum(myeigen$values) / sum(myeigen$values)
## [1] 0.6928202 0.7940449 0.8451072 0.8723847 0.8913841 0.9076337 0.9216282
## [8] 0.9336889 0.9433871 0.9524454 0.9609037 0.9688907 0.9765235 0.9832209
## [15] 0.9894033 0.9953587 1.0000000
Eigenshoes
scaling=diag(myeigen$values[1:5]^(-1/2)) / (sqrt(nrow(scaled)-1))
eigenshoes=scaled%*%myeigen$vectors[,1:5]%*%scaling
imageShow(array(eigenshoes[,1], c(60,125,3)))

Generate Principal Components
Eigenshoes
Generate Eigenshoes.
mypca2=t(mypca$scores)
dim(mypca2)=c(length(files),height/scale,width/scale,3)
par(mfrow=c(5,4))
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
}

Variance Capture
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
New Data Set
x = t(t(eigenshoes)%*%scaled)