//------------------------------------------------- //----------ComputeFaceSpace()--------------------- public void ComputeFaceSpace(MyImage im) { int i, j; double rsum; for (i = 0; i < EigenFaceList.Count; i++) { rsum = 0.0; for (j = 0; j < imageNumPixels; j++) { EigenFace ef = (EigenFace)EigenFaceList[i]; rsum = rsum + im.ImgVectorAdjM[j] * ef.EF[j]; } im.FSV[i] = rsum; } }
public object Clone() // for in memory copy { EigenFace copy = new EigenFace(); if (this.EF != null) { copy.EF = (double[])this.EF.Clone(); } copy.EigenValue = this.EigenValue; copy.size = this.size; if (this.Xvar2 != null) { copy.Xvar2 = (double[])this.Xvar2.Clone(); } return(copy); }
//---------------------------------------------------------- //-----------ComputeEigenFaces()------------------------- private void ComputeEigenFaces() { int numEFs = 0; if (ImageList.Count < NumEigenFaces) numEFs = ImageList.Count; else numEFs = NumEigenFaces; EigenFaceMatrix = new Matrix(imageWidth * imageHeight, numEFs); // copy EigenVectors into a Matrix Matrix EV = new Matrix(ImageList.Count, NumEigenFaces); //CREATING A MATRIX WITH JUST THE TOP EIGENVECTORS //The number of eigenvector we will use is prompted in the constructor for (int i = 0; i < NumEigenFaces; i++) { for (int j = 0; j < ImageList.Count; j++) EV[j, i] = EVList[i].EigenVec[j]; //Filling up the matrix with top EIGENVECTORS } EigenFaceMatrix = (Matrix)(I.Multiply(EV)); //Creating EigenFace Matrix, I * EV //normalize EigenFace(it is an eigen vector of orig.covar matrix) for (int j = 0; j < NumEigenFaces; j++) { double rsum = 0; for (int i = 0; i < imageNumPixels; i++) { rsum += EigenFaceMatrix[i, j] * EigenFaceMatrix[i, j]; } for (int i = 0; i < imageNumPixels; i++) EigenFaceMatrix[i, j] = EigenFaceMatrix[i, j] / Math.Sqrt(rsum); } // Copy Eigen Faces to a List for easier display later for (int i = 0; i < NumEigenFaces; i++) { EigenFace ef = new EigenFace(imageWidth * imageHeight); for (int j = 0; j < imageWidth * imageHeight; j++) ef.EF[j] = EigenFaceMatrix[j, i]; EigenFaceList.Add(ef); } }