Libraries
Load needed libraries:
library(doParallel)
library(foreach)
library(jpeg)
library(kableExtra)
library(OpenImageR)
library(EBImage)
Use of Graphics
Put the images together on a single object files
num=17
files=list.files("D:/Jered/Images/jpg",pattern="\\.jpg")[1:num]
View Shoes Functions
Read the file & get the resolution
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])
}
Load the Data into an 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("D:/Jered/Images/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("D:/Jered/Images/jpg/", files[i]))
r=as.vector(im[i,,,1]); g=as.vector(im[i,,,2]);b=as.vector(im[i,,,3])
flat[i,] <- t(c(r, g, b))
}
shoes=as.data.frame(t(flat))
Actual Plots
par(mfrow=c(3,3))
par(mai=c(.3,.3,.3,.3))
for (i in 1:17){ #plot the first images only
plot_jpeg(writeJPEG(im[i,,,]))
}


Get eigencompents for 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)
Get 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
About 80% of variability can be represented within 2 first eigenvalues and about 90% of variability can be represented within 5 first eigenvalues
Eigenshoes
Eigenshoes with about 80% of variability: 2 first eigenvalues
scaling=diag(myeigen$values[1:2]^(-1/2)) / (sqrt(nrow(scaled)-1))
eigenshoes=scaled%*%myeigen$vectors[,1:2]%*%scaling
imageShow(array(eigenshoes[,1], c(60,125,3)))

Eigenshoes with about 90% of variability: 5 first eigenvalues
scaling1=diag(myeigen$values[1:5]^(-1/2)) / (sqrt(nrow(scaled)-1))
eigenshoes1=scaled%*%myeigen$vectors[,1:5]%*%scaling1
imageShow(array(eigenshoes1[,1], c(60,125,3)))

Generate Principal Components
Summary of components
## Importance of components:
## Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
## Standard deviation 3.4319009 1.3118000 0.93169738 0.68096781 0.56832205
## Proportion of Variance 0.6928202 0.1012247 0.05106235 0.02727748 0.01899941
## Cumulative Proportion 0.6928202 0.7940449 0.84510722 0.87238470 0.89138411
## Comp.6 Comp.7 Comp.8 Comp.9 Comp.10
## Standard deviation 0.52558864 0.48775558 0.45280468 0.40604197 0.392417779
## Proportion of Variance 0.01624961 0.01399444 0.01206071 0.00969824 0.009058336
## Cumulative Proportion 0.90763372 0.92162816 0.93368887 0.94338711 0.952445449
## Comp.11 Comp.12 Comp.13 Comp.14
## Standard deviation 0.379195884 0.368483202 0.360218987 0.3374253
## Proportion of Variance 0.008458207 0.007987051 0.007632807 0.0066974
## Cumulative Proportion 0.960903656 0.968890707 0.976523514 0.9832209
## Comp.15 Comp.16 Comp.17
## Standard deviation 0.324191464 0.318186594 0.280894368
## Proportion of Variance 0.006182359 0.005955453 0.004641273
## Cumulative Proportion 0.989403273 0.995358727 1.000000000
Provides same values on cumulative proportion as calculated earlier with cumsum
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_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)
LS0tDQp0aXRsZTogIkZ1bmRhbWVudGFscyBvZiBDb21wdXRhdGlvbmFsIE1hdGhlbWF0aWNzIC0gSG9tZXdvcmsgNCINCmF1dGhvcjogIkplcmVkIEF0YWt5Ig0KZGF0ZTogIjIvMTUvMjAyMSINCm91dHB1dDoNCiAgb3BlbmludHJvOjpsYWJfcmVwb3J0OiBkZWZhdWx0DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmtuaXRyOjpvcHRzX2NodW5rJHNldChyb290LmRpciA9IG5vcm1hbGl6ZVBhdGgoIkQ6L0plcmVkL0RBVEFfNjA1L2pwZyIpKQ0KbWVtb3J5LnNpemUobWF4PVQpDQpgYGANCg0KDQojIyBMaWJyYXJpZXMNCg0KTG9hZCBuZWVkZWQgbGlicmFyaWVzOg0KDQpgYGB7ciBsb2FkLXBhY2thZ2UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCmxpYnJhcnkoZG9QYXJhbGxlbCkNCmxpYnJhcnkoZm9yZWFjaCkNCmxpYnJhcnkoanBlZykNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkoT3BlbkltYWdlUikNCmxpYnJhcnkoRUJJbWFnZSkNCmBgYA0KDQoNCg0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KDQojU2V0IHRoZSBkaXJlY3RvcnkNCg0Kc2V0d2QoIkQ6L0plcmVkL0ltYWdlcy9qcGciKQ0KDQpgYGANCg0KDQojIyBVc2Ugb2YgR3JhcGhpY3MNCg0KUHV0IHRoZSBpbWFnZXMgdG9nZXRoZXIgb24gYSBzaW5nbGUgb2JqZWN0IGZpbGVzDQoNCmBgYHtyfQ0KDQpudW09MTcNCg0KZmlsZXM9bGlzdC5maWxlcygiRDovSmVyZWQvSW1hZ2VzL2pwZyIscGF0dGVybj0iXFwuanBnIilbMTpudW1dDQoNCmBgYA0KDQoNCiMjIFZpZXcgU2hvZXMgRnVuY3Rpb25zDQoNClJlYWQgdGhlIGZpbGUgJiBnZXQgdGhlIHJlc29sdXRpb24NCg0KYGBge3J9DQoNCmhlaWdodD0xMjAwOyB3aWR0aD0yNTAwO3NjYWxlPTIwDQpwbG90X2pwZWcgPSBmdW5jdGlvbihwYXRoLCBhZGQ9RkFMU0UpDQp7IGpwZyA9IHJlYWRKUEVHKHBhdGgsIG5hdGl2ZT1UKSAjIHJlYWQgdGhlIGZpbGUNCiAgcmVzID0gZGltKGpwZylbMjoxXSAjIGdldCB0aGUgcmVzb2x1dGlvbiwgW3gsIHldDQogIGlmICghYWRkKSAjIGluaXRpYWxpemUgYW4gZW1wdHkgcGxvdCBhcmVhIGlmIGFkZD09RkFMU0UNCiAgICBwbG90KDEsMSx4bGltPWMoMSxyZXNbMV0pLHlsaW09YygxLHJlc1syXSksYXNwPTEsdHlwZT0nbicseGF4cz0naScseWF4cz0naScseGF4dD0nbicseWF4dD0nbicseGxhYj0nJyx5bGFiPScnLGJ0eT0nbicpDQogIHJhc3RlckltYWdlKGpwZywxLDEscmVzWzFdLHJlc1syXSkNCn0NCg0KYGBgDQoNCiMjIExvYWQgdGhlIERhdGEgaW50byBhbiBBcnJheQ0KDQoNCmBgYHtyfQ0KDQppbT1hcnJheShyZXAoMCxsZW5ndGgoZmlsZXMpKmhlaWdodC9zY2FsZSp3aWR0aC9zY2FsZSozKSwgZGltPWMobGVuZ3RoKGZpbGVzKSwgaGVpZ2h0L3NjYWxlLCB3aWR0aC9zY2FsZSwzKSkNCg0KZm9yIChpIGluIDE6MTcpew0KICB0ZW1wPXJlc2l6ZShyZWFkSlBFRyhwYXN0ZTAoIkQ6L0plcmVkL0ltYWdlcy9qcGcvIiwgZmlsZXNbaV0pKSxoZWlnaHQvc2NhbGUsIHdpZHRoL3NjYWxlKQ0KICBpbVtpLCwsXT1hcnJheSh0ZW1wLGRpbT1jKDEsIGhlaWdodC9zY2FsZSwgd2lkdGgvc2NhbGUsMykpfQ0KDQpgYGANCg0KDQojIyBWZWN0b3JpemUNCg0KDQpgYGB7cn0NCg0KZmxhdD1tYXRyaXgoMCwgMTcsIHByb2QoZGltKGltKSkpIA0KZm9yIChpIGluIDE6MTcpIHsNCiAgbmV3aW0gPC0gcmVhZEpQRUcocGFzdGUwKCJEOi9KZXJlZC9JbWFnZXMvanBnLyIsIGZpbGVzW2ldKSkNCiAgcj1hcy52ZWN0b3IoaW1baSwsLDFdKTsgZz1hcy52ZWN0b3IoaW1baSwsLDJdKTtiPWFzLnZlY3RvcihpbVtpLCwsM10pDQogIGZsYXRbaSxdIDwtIHQoYyhyLCBnLCBiKSkNCn0NCnNob2VzPWFzLmRhdGEuZnJhbWUodChmbGF0KSkNCg0KYGBgDQoNCg0KIyMgQWN0dWFsIFBsb3RzDQoNCmBgYHtyfQ0KDQpwYXIobWZyb3c9YygzLDMpKQ0KcGFyKG1haT1jKC4zLC4zLC4zLC4zKSkNCmZvciAoaSBpbiAxOjE3KXsgICNwbG90IHRoZSBmaXJzdCBpbWFnZXMgb25seQ0KcGxvdF9qcGVnKHdyaXRlSlBFRyhpbVtpLCwsXSkpDQp9DQoNCg0KYGBgDQoNCiMjIyBHZXQgZWlnZW5jb21wZW50cyBmb3IgY29ycmVsYXRpb24gc3RydWN0dXJlDQoNCg0KYGBge3J9DQoNCnNjYWxlZD1zY2FsZShzaG9lcywgY2VudGVyID0gVFJVRSwgc2NhbGUgPSBUUlVFKQ0KbWVhbi5zaG9lPWF0dHIoc2NhbGVkLCAic2NhbGVkOmNlbnRlciIpICNzYXZpbmcgZm9yIGNsYXNzaWZpY2F0aW9uDQpzdGQuc2hvZT1hdHRyKHNjYWxlZCwgInNjYWxlZDpzY2FsZSIpICAjc2F2aW5nIGZvciBjbGFzc2lmaWNhdGlvbi4uLmxhdGVyDQoNCmBgYA0KDQoNCiMjIENhbGN1bGF0ZSBDb3ZhcmlhbmNlIChDb3JyZWxhdGlvbikNCg0KYGBge3J9DQoNClNpZ21hXz1jb3Ioc2NhbGVkKQ0KDQoNCmBgYA0KDQojIyBHZXQgZWlnZW5jb21wb25lbnRzDQoNCmBgYHtyfQ0KDQpteWVpZ2VuPWVpZ2VuKFNpZ21hXykNCmN1bXN1bShteWVpZ2VuJHZhbHVlcykgLyBzdW0obXllaWdlbiR2YWx1ZXMpDQoNCmBgYA0KDQpBYm91dCA4MCUgb2YgdmFyaWFiaWxpdHkgY2FuIGJlIHJlcHJlc2VudGVkIHdpdGhpbiAyIGZpcnN0IGVpZ2VudmFsdWVzDQphbmQgYWJvdXQgOTAlIG9mIHZhcmlhYmlsaXR5IGNhbiBiZSByZXByZXNlbnRlZCB3aXRoaW4gNSBmaXJzdCBlaWdlbnZhbHVlcw0KDQoNCiMjIEVpZ2Vuc2hvZXMNCg0KIyMjIEVpZ2Vuc2hvZXMgd2l0aCBhYm91dCA4MCUgb2YgdmFyaWFiaWxpdHk6IDIgZmlyc3QgZWlnZW52YWx1ZXMgIA0KDQpgYGB7cn0NCg0Kc2NhbGluZz1kaWFnKG15ZWlnZW4kdmFsdWVzWzE6Ml1eKC0xLzIpKSAvIChzcXJ0KG5yb3coc2NhbGVkKS0xKSkNCmVpZ2Vuc2hvZXM9c2NhbGVkJSolbXllaWdlbiR2ZWN0b3JzWywxOjJdJSolc2NhbGluZw0KaW1hZ2VTaG93KGFycmF5KGVpZ2Vuc2hvZXNbLDFdLCBjKDYwLDEyNSwzKSkpDQoNCg0KYGBgDQoNCg0KDQojIyMgRWlnZW5zaG9lcyB3aXRoIGFib3V0IDkwJSBvZiB2YXJpYWJpbGl0eTogNSBmaXJzdCBlaWdlbnZhbHVlcyANCg0KDQpgYGB7cn0NCg0Kc2NhbGluZzE9ZGlhZyhteWVpZ2VuJHZhbHVlc1sxOjVdXigtMS8yKSkgLyAoc3FydChucm93KHNjYWxlZCktMSkpDQplaWdlbnNob2VzMT1zY2FsZWQlKiVteWVpZ2VuJHZlY3RvcnNbLDE6NV0lKiVzY2FsaW5nMQ0KaW1hZ2VTaG93KGFycmF5KGVpZ2Vuc2hvZXMxWywxXSwgYyg2MCwxMjUsMykpKQ0KDQoNCmBgYA0KDQoNCiMjIEdlbmVyYXRlIFByaW5jaXBhbCBDb21wb25lbnRzDQoNCiMjIyBUcmFuc2Zvcm0gdGhlIGltYWdlcw0KDQpgYGB7cn0NCg0KaGVpZ2h0PTEyMDANCndpZHRoPTI1MDANCnNjYWxlPTIwDQpuZXdkYXRhPWltDQpkaW0obmV3ZGF0YSk9YyhsZW5ndGgoZmlsZXMpLGhlaWdodCp3aWR0aCozL3NjYWxlXjIpDQpteXBjYT1wcmluY29tcCh0KGFzLm1hdHJpeChuZXdkYXRhKSksIHNjb3Jlcz1UUlVFLCBjb3I9VFJVRSkNCg0KDQpgYGANCg0KDQoNCg0KDQojIyMgU3VtbWFyeSBvZiBjb21wb25lbnRzDQoNCmBgYHtyfQ0Kc3VtbWFyeShteXBjYSkNCg0KYGBgDQoNCg0KUHJvdmlkZXMgc2FtZSB2YWx1ZXMgb24gY3VtdWxhdGl2ZSBwcm9wb3J0aW9uIGFzIGNhbGN1bGF0ZWQgZWFybGllciB3aXRoIGN1bXN1bQ0KDQoNCg0KIyMgRWlnZW5zaG9lcw0KDQoNCiMjIyBHZW5lcmF0ZSBFaWdlbnNob2VzDQoNCmBgYHtyfQ0KDQpteXBjYTI9dChteXBjYSRzY29yZXMpDQpkaW0obXlwY2EyKT1jKGxlbmd0aChmaWxlcyksaGVpZ2h0L3NjYWxlLHdpZHRoL3NjYWxlLDMpDQpwYXIobWZyb3c9Yyg1LDUpKQ0KcGFyKG1haT1jKC4wMDEsLjAwMSwuMDAxLC4wMDEpKQ0KZm9yIChpIGluIDE6MTcpew0KcGxvdF9qcGVnKHdyaXRlSlBFRyhteXBjYTJbaSwsLF0sIGJnPSJ3aGl0ZSIpKSAgI2NvbXBsZXRlIHdpdGhvdXQgcmVkdWN0aW9uDQp9DQoNCg0KDQpgYGANCg0KDQoNCiMjIyBWYXJpYW5jZSBjYXB0dXJlDQoNCg0KYGBge3J9DQoNCmE9cm91bmQobXlwY2Ekc2RldlsxOjE3XV4yLyBzdW0obXlwY2Ekc2Rldl4yKSwzKQ0KY3Vtc3VtKGEpDQoNCg0KYGBgDQoNCg0KIyMgTmV3IGRhdGEgc2V0DQoNCmBgYHtyfQ0KeCA9IHQodChlaWdlbnNob2VzKSUqJXNjYWxlZCkNCg0KYGBgDQo=