Emgu.CV.EigenObjectRecognizer.CalcEigenObjects C# (CSharp) Method

CalcEigenObjects() public static method

Caculate the eigen images for the specific traning image
public static CalcEigenObjects ( Byte>.Image trainingImages, MCvTermCriteria &termCrit, Single>.Image &eigenImages, Single>.Image &avg ) : void
trainingImages Byte>.Image The images used for training
termCrit Emgu.CV.Structure.MCvTermCriteria The criteria for tranning
eigenImages Single>.Image The resulting eigen images
avg Single>.Image The resulting average image
return void
        public static void CalcEigenObjects(Image<Gray, Byte>[] trainingImages, ref MCvTermCriteria termCrit, out Image<Gray, Single>[] eigenImages, out Image<Gray, Single> avg)
        {
            int width = trainingImages[0].Width;
             int height = trainingImages[0].Height;

             IntPtr[] inObjs = Array.ConvertAll<Image<Gray, Byte>, IntPtr>(trainingImages, delegate(Image<Gray, Byte> img) { return img.Ptr; });

             if (termCrit.max_iter <= 0 || termCrit.max_iter > trainingImages.Length)
            termCrit.max_iter = trainingImages.Length;

             int maxEigenObjs = termCrit.max_iter;

             #region initialize eigen images
             eigenImages = new Image<Gray, float>[maxEigenObjs];
             for (int i = 0; i < eigenImages.Length; i++)
            eigenImages[i] = new Image<Gray, float>(width, height);
             IntPtr[] eigObjs = Array.ConvertAll<Image<Gray, Single>, IntPtr>(eigenImages, delegate(Image<Gray, Single> img) { return img.Ptr; });
             #endregion

             avg = new Image<Gray, Single>(width, height);

             CvInvoke.cvCalcEigenObjects(
             inObjs,
             ref termCrit,
             eigObjs,
             null,
             avg.Ptr);
        }