private void OnStartup(object sender, StartupEventArgs e)
        {
            List<CImage> lImages = new List<CImage>()
            {
                new CImage(
                    Directory.GetCurrentDirectory() + @"\images\stalone\сталоне1.jpg",
                    "stalone1"),
                new CImage(
                    Directory.GetCurrentDirectory() + @"\images\stalone\сталоне2.jpg",
                    "stalone2"),
                new CImage(
                    Directory.GetCurrentDirectory() + @"\images\stalone\сталоне3.jpg",
                    "stalone3"),
            };

            CImage image = new CImage(
                    Directory.GetCurrentDirectory() + @"\images\stalone\сталоне0.jpg",
                    "stalone0");

            List<ACFaceRecognition> lFaceRecognition = new List<ACFaceRecognition>()
            {
                new CFisherRecognition( image, lImages ),
                new CLBPHRecognition( image, lImages ),
                new CPCARecognition( image, lImages ),
            };

            MainView view = new MainView(); // создали View
            MainViewModel viewModel = new ViewModels.MainViewModel(lImages, image, lFaceRecognition); // Создали ViewModel
            view.DataContext = viewModel; // положили ViewModel во View в качестве DataContext
            view.Show();
        }
        public CLBPHRecognition( CImage _userImage, List<CImage> _lDatabaseImages )
        {
            comparisonMethod = "Метод применяющий двоичные локальные особенности (local binary pattern)";
            shortDescription = "--.";

            userImage = _userImage;
            lDatabaseImages = _lDatabaseImages;
        }
        public CFisherRecognition( CImage _userImage, List<CImage> _lDatabaseImages )
        {
            comparisonMethod = "Метод линейного дискриминанта Фишера (Fisher's Linear Discriminant )";
            shortDescription = "использует такую проекцию пространства изображений на пространство " +
                               "признаков, которая минимизирует внутриклассовое и максимизирует " +
                               "межклассовое расстояние в пространстве признаков. В этих методах " +
                               "предполагается, что классы линейно разделимы.";

            userImage = _userImage;
            lDatabaseImages = _lDatabaseImages;

            CreateDatabaseImageLabels();
        }
        public CPCARecognition( CImage _userImage, List<CImage> _lDatabaseImages )
        {
            comparisonMethod = "Метод главных компонент (Principal component analysis)";
            shortDescription = "Главной целью метода главных компонент является значительное" +
                               "уменьшение размерности пространства признаков таким образом,"+
                               "чтобы оно как можно лучше описывало «типичные» образы, "+
                               "принадлежащие множеству лиц. Используя этот метод можно "+
                               "выявить различные изменчивости в обучающей выборке изображений "+
                               "лиц и описать эту изменчивость в базисе нескольких ортогональных "+
                               "векторов, которые называются собственными (eigenface).";

            userImage       = _userImage;
            lDatabaseImages = _lDatabaseImages;
        }
        // Метод, обнаруживающий все лица на фото.
        public int FaceDetect(CImage _image )
        {
            /*
            // Можно так.
            HaarCascade HaarCascadeXML = new HaarCascade("haarcascade_frontalface_default.xml");
            _facesDetected = HaarCascadeXML.Detect(
                this.inputImage,
                1.2,
                10,
                HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                new System.Drawing.Size(20, 20)
                );
            */
            Emgu.CV.HaarCascade face = new HaarCascade("haarcascade_frontalface_default.xml");
            aDetectedFaces = _image.bgrImage.DetectHaarCascade(
                 face,
                 1.2,
                 10,
                 Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                 new System.Drawing.Size(20, 20));

            foreach (MCvAvgComp f in aDetectedFaces[0])
            {
                CvInvoke.cvSetImageROI(_image.bgrImage, f.rect); // Устанавливаем ROI
            }

            _image.Normalization();

            return 0;
        }
 public DatabaseImageViewModel( CImage _image)
 {
     this.image = _image;
 }