コード例 #1
0
ファイル: BitmapExtension.cs プロジェクト: arkhio99/Canny
        /// <summary>
        /// Smoothing Black-White picture.
        /// </summary>
        /// <param name="pic">Picture.</param>
        /// <param name="type">Type of smootthing.</param>
        /// <param name="matrixSize">Size of matrix of smooth.</param>
        /// <returns>Smoothed picture.</returns>
        public static Bitmap SmoothBWPicture(this Bitmap pic, SmoothMatrixType type, int matrixSize)
        {
            double[,] matrix = new double[matrixSize, matrixSize];

            // Calculate matrix of smooth
            switch (type)
            {
            case SmoothMatrixType.Simple:
            {
                double temp = 1.0 / (matrixSize * matrixSize);
                for (int i = 0; i < matrixSize; i++)
                {
                    for (int j = 0; j < matrixSize; j++)
                    {
                        matrix[i, j] = temp;
                    }
                }
                break;
            }

            case SmoothMatrixType.Gauss:
            {
                //TODO doesn't work
                // calculate discret gauss matrix
                double div = 0;
                for (int i = 0; i < matrixSize; i++)
                {
                    for (int j = 0; j < matrixSize; j++)
                    {
                        matrix[i, j] = GaussCoeff(i, j, 1);
                        div         += matrix[i, j] * matrix[i, j];
                    }
                }

                // norm matrix
                for (int i = 0; i < matrixSize; i++)
                {
                    for (int j = 0; j < matrixSize; j++)
                    {
                        matrix[i, j] /= div;
                    }
                }

                break;
            }
            }

            // Smooth pitcture
            Bitmap result = SmoothingBW(pic, matrix);

            return(result);
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: arkhio99/Canny
        public Bitmap CannyProcessing(SmoothMatrixType type, int size)
        {
            Invoke(new Action(() => StateLbl.Text = "Начато преобразование"));
            var bitmap = new Bitmap(originalPic, 64, 64).GetBWPicture();

            Invoke(new Action(() =>
            {
                StateLbl.Text      = "Получено чернобелое изображение";
                resultPicBox.Image = bitmap;
                UpdateForm();
            }));

            var smoothedBWPicture = bitmap.SmoothBWPicture(type, size);

            Invoke(new Action(() =>
            {
                StateLbl.Text = "Получено размытое изображение";
                resultPic     = bitmap;
                UpdateForm();
            }));

            var gradients = smoothedBWPicture.FindGradients();

            Invoke(new Action(() =>
            {
                StateLbl.Text = "Найдены градиенты";
                StateLbl.Refresh();
            }));

            var gradientsWithSuppressedMaximums = gradients.SuppressMaximums();

            Invoke(new Action(() =>
            {
                StateLbl.Text = "Удалены немаксимумы";
                StateLbl.Refresh();
            }));

            var cuttedGradients = gradientsWithSuppressedMaximums.BlackEdge(size / 2 + 1);

            Invoke(new Action(() =>
            {
                StateLbl.Text = "Закрашены края";
                StateLbl.Refresh();
            }));

            var filteredGradients = cuttedGradients;//.Filtering();

            //Invoke(new Action(() =>
            //{
            //    StateLbl.Text = "Произведена фильтрация. Готово!";
            //    StateLbl.Refresh();
            //}));

            //Invoke(new Action(() =>
            //{
            //    StateLbl.Text = "Нейросеть вычисляет есть ли человек на фотографии!";
            //    StateLbl.Refresh();
            //    BNPNet net = new BNPNet(@"C:\Users\vladb\Desktop\somaset\network.json");

            //    var output = net.GetResult(filteredGradients.LengthsToArray().ToVector());
            //    StateLbl.Text = "Человек " + ((1 - output[0]) < 0.2 ? "присутствует" : "отсутствует") + " на фотографии";
            //    StateLbl.Refresh();
            //}));

            return(filteredGradients.ToBitmap());
        }