예제 #1
0
        //-------------------------------------------------

        //----------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;
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        //----------------------------------------------------------

        //-----------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);
            }
        }