/// <summary>
        /// Caculate the eigen images for the specific traning image
        /// </summary>
        public static void CalcEigenObjects(Bitmap[] trainingImages, int maxIter, double eps, out FloatImage[] eigenImages, out FloatImage avg)
        {
            int width  = trainingImages[0].Width;
            int height = trainingImages[0].Height;

            if (maxIter <= 0 || maxIter > trainingImages.Length)
            {
                maxIter = trainingImages.Length;
            }

            int maxEigenObjs = maxIter;

            eigenImages = new FloatImage[maxEigenObjs];
            for (int i = 0; i < eigenImages.Length; i++)
            {
                eigenImages[i] = new FloatImage(width, height);
            }

            avg = new FloatImage(width, height);

            ManagedEigenObjects.CalcEigenObjects(trainingImages, maxIter, eps, eigenImages, null, avg);
        }
 /// <summary>
 /// Decompose the image as eigen values, using the specific eigen vectors
 /// </summary>
 public static float[] EigenDecomposite(Bitmap src, FloatImage[] eigenImages, FloatImage avg)
 {
     return(ManagedEigenObjects.EigenDecomposite(src, eigenImages, avg));
 }