private void NoiseButton_Click(object sender, RoutedEventArgs e) { if (!int.TryParse(NoiseValueTextBox.Text, out _noiseValue)) { MessageBox.Show("Bad noise value!"); return; } Bitmap bitmap = BitmapConverter.BitmapImage2Bitmap(_sourceImage); var random = new Random(); var pointsHashSet = new HashSet <Point>(); int pixelsToInvert = _pixelsNumber * _noiseValue / 100; for (int i = 0; i < pixelsToInvert; i++) { bool wasInverted = false; while (!wasInverted) { Point point; point.X = random.Next(0, _width); point.Y = random.Next(0, _height); if (pointsHashSet.Add(point)) { Color curColor = bitmap.GetPixel(point.X, point.Y); bitmap.SetPixel(point.X, point.Y, curColor.R > 230 ? Color.Black : Color.White); wasInverted = true; } } } _noisedImage = BitmapConverter.Bitmap2BitmapImage(bitmap); SourceImage.Source = _noisedImage; }
private void RecognizeButton_Click(object sender, RoutedEventArgs e) { _knowledgeMatrix = new int[_pixelsNumber, _pixelsNumber]; foreach (var stdVector in _standardImageVectors) { for (int i = 0; i < _pixelsNumber; i++) { for (int j = 0; j < _pixelsNumber; j++) { _knowledgeMatrix[j, i] += (i == j) ? 0 : stdVector[j] * stdVector[i]; } } } Bitmap sourceBitmap = BitmapConverter.BitmapImage2Bitmap(_noisedImage); int[] sourceImageVector = GetImageVector(sourceBitmap); int counter = 0; int[] temp = new int[_pixelsNumber]; while (true) { temp = Copy(sourceImageVector); sourceImageVector = MultiplyMatrixAndColumn(_knowledgeMatrix, sourceImageVector); counter++; if (IsEqual(temp, sourceImageVector)) { ResultImage.Source = BitmapConverter.Bitmap2BitmapImage(GetImageFromVector(sourceImageVector)); MessageBox.Show("Iterations" + counter.ToString()); return; } } }