Initialization
Here, we add graphics to the data set.
#############Prepare for Image Processing#######################
num=20
files=list.files("D:/FootJoy/Images/jpg",pattern="\\.jpg")[1:num]
################################################################
###################Set Adj. 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])
}
################################################################
###################Load#########################
im=array(rep(0,length(files)*height/scale*width/scale*3), dim=c(length(files), height/scale, width/scale,3))
for (i in 1:20){
temp=resize(readJPEG(paste0("D:/FootJoy/Images/jpg/", files[i])),height/scale, width/scale)
im[i,,,]=array(temp,dim=c(1, height/scale, width/scale,3))}
#################################################
#################################################
flat=matrix(0, 20, prod(dim(im)))
for (i in 1:20) {
newim <- readJPEG(paste0("D:/FootJoy/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))
#################################################
####Old Shoes##################
par(mfrow=c(3,3))
par(mai=c(.3,.3,.3,.3))
for (i in 1:20){ #plot the first images only
plot_jpeg(writeJPEG(im[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
#################################################
#################################################
Sigma_=cor(scaled)
#################################################
#################################################
myeigen=eigen(Sigma_)
cumsum(myeigen$values) / sum(myeigen$values)
## [1] 0.6896929 0.7832142 0.8336140 0.8580769 0.8773557 0.8940943 0.9080996
## [8] 0.9202671 0.9307130 0.9406380 0.9487722 0.9560462 0.9631945 0.9699554
## [15] 0.9759101 0.9813791 0.9866118 0.9916244 0.9960756 1.0000000
#################################################
#################################################
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)))
#imageShow(array(eigenshoes[,2], c(60,125,3)))
#imageShow(array(eigenshoes[,3], c(60,125,3)))
#imageShow(array(eigenshoes[,4], c(60,125,3)))
#imageShow(array(eigenshoes[,5], c(60,125,3)))
#################################################
Transform the images.
###################Generate Variables###########################
height=1200
width=2500
scale=20
newdata=im
dim(newdata)=c(length(files),height*width*3/scale^2)
mypca=princomp(t(as.matrix(newdata)), scores=TRUE, cor=TRUE)
################################################################
Generate Eigenshoes.
###################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:20){#plot the first 25 Eigenshoes only
plot_jpeg(writeJPEG(mypca2[i,,,], bg="white")) #complete without reduction
}
################################################################
# Variance Capture
#################################################
a=round(mypca$sdev[1:20]^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.690 0.784 0.834 0.858 0.877 0.894 0.908 0.920 0.930 0.940
## Comp.11 Comp.12 Comp.13 Comp.14 Comp.15 Comp.16 Comp.17 Comp.18 Comp.19 Comp.20
## 0.948 0.955 0.962 0.969 0.975 0.980 0.985 0.990 0.994 0.998
#################################################
#################################################
x = t(t(eigenshoes)%*%scaled)
#################################################