hi
As discussed in the thread
http://groups.google.com/group/Numpy-discussion/browse_thread/thread/b9774ac757c3c
98e/a66aa2565d4e6a24
i tried to create an application to create eigenfaces from a set of
jpeg images.I followed these steps after obtaining an ndarray of 17
images (ie 17 rows where each row is an image and a column is pixel
intensity values) and 18750 columns(since each image is 125X150)
faceimages is a (17,18750) ndarray
averageimage=average(faceimages,axis=0)
adjfaces=faceimages-averageimage
adjfaces_tr=adjfaces.transpose()
covmat=dot(adjfaces , adjfaces_tr)
evals,evects=eigh(covmat)
reversedevalueorder=evals.argsort()[::-1]
sortedeigenvectors=evects[:,reversedevalueorder]
# now i have sortedeigenvectors of shape(17,17) .I assume that the
sort has made the first column to contain the most significant
eigenvector.Can someone confirm this assumption? If i do a transpose()
on it then i will get an ndarray with the first row as most
significant eigenvector?
sortedeigenvectors_rowwise=sortedeigenvectors.transpose()
# then i create a facespace where each row correspond to an eigenface
facespace=dot(sortedeigenvectors_rowwise,adjfaces)
# i want to create the eigenface corresponding to most significant and
least significant eigenvectors.(I do this with the help of a
createImage() function to put pixelvalues in an image)
besteigenvector=sortedeigenvectors_rowwise[0]
leasteigenvector=sortedeigenvectors_rowwise[numberofimgs-1] #which is
16
besteigenface=dot(besteigenvector,adjfaces)
leasteigenface=dot(leasteigenvector,adjfaces)
createImage(besteigenface,"eigenface0.jpg",(125,150))
createImage(leasteigenface,"eigenface16.jpg",(125,150))
#now this creates 2 images.they are given in this page(http://
roytechdumps.blogspot.com/).The leasteigenface ie 'eigenface16.jpg'
is quite 'deteriorated' in appearance compared to the other.Is this
because of the
corresponding eigenvector containing least variations? can someone
explain this deterioration?
thanks
RG
by the way the function to create image is
def createImage(v, filename,imsize):
v.shape = (-1,) #change to 1 dim array
a, b = v.min(), v.max()
im = Image.new('L', imsize)
sclaedarray=((v-a)* 255/(b - a))
im.putdata(scaledarray)
_______________________________________________
Numpy-discussion mailing list
[email protected]
http://projects.scipy.org/mailman/listinfo/numpy-discussion