コード例 #1
0
ファイル: MainWindow.xaml.cs プロジェクト: xgrommx/DPSI
        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;
        }
コード例 #2
0
ファイル: MainWindow.xaml.cs プロジェクト: xgrommx/DPSI
        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;
                }
            }
        }