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