/// <summary>
        ///     Extract a minutia list from the specified bitmap image.
        /// </summary>
        /// <param name="image">The source bitmap image to extract features from.</param>
        /// <returns>The features extracted from the specified bitmap image.</returns>
        public override List <Minutia> ExtractFeatures(Bitmap image)
        {
            Ratha1995OrImgExtractor orImgExtractor   = new Ratha1995OrImgExtractor();
            OrientationImage        orientationImage = orImgExtractor.ExtractFeatures(image);
            ImageMatrix             matrix           = skeImgExtractor.ExtractSkeletonImage(image, orientationImage);

            return(GetMinutiaes(matrix, orientationImage));
        }
        /// <summary>
        ///     Extract a skeleton image from the specified bitmap image.
        /// </summary>
        /// <param name="image">The source bitmap image to extract features from.</param>
        /// <returns>The features extracted from the specified bitmap image.</returns>
        public override SkeletonImage ExtractFeatures(Bitmap image)
        {
            Ratha1995OrImgExtractor ratha1995OrImgExtractor = new Ratha1995OrImgExtractor();
            OrientationImage        orientationImage        = ratha1995OrImgExtractor.ExtractFeatures(image);
            ImageMatrix             skeletonImage           = ExtractSkeletonImage(image, orientationImage);

            byte[] img = new byte[skeletonImage.Width * skeletonImage.Height];
            for (int i = 0; i < skeletonImage.Height; i++)
            {
                for (int j = 0; j < skeletonImage.Width; j++)
                {
                    img[skeletonImage.Width * i + j] = (byte)skeletonImage[i, j];
                }
            }

            return(new SkeletonImage(img, skeletonImage.Width, skeletonImage.Height));
        }