Exemple #1
0
        /// <summary>
        /// Маркирование
        /// </summary>
        /// <param name="bm">Изображение</param>
        /// <returns>Регионы</returns>
        public Bitmap Marking(Bitmap bm)
        {
            Matrix matr   = ImgConverter.BmpToMatr(bm);
            Matrix filter = new Matrix() - 1;

            filter[1, 1] = 8;
            matr         = NeuroFunc.Threshold(matr, 0.5);
            matr         = 1 - ImgFilters.SpaceFilter(matr, filter);
            matr         = NeuroFunc.Threshold(matr, 0.9);

            BinaryImg bi  = new BinaryImg(1 - matr);
            Matrix    img = bi.ToMatrixInvers();

            //img.MatrixShow();
            x      = 0;
            y      = 0;
            m      = img.M;
            n      = img.N;
            couter = 0;

            while (x < m - 1 && y < n - 1)
            {
                SerchNotMark(img);

                while (Area(img))
                {
                }
            }

            img /= couter;

            return(ImgConverter.MatrixToBitmap(img));
        }
        /// <summary>
        /// ФНЧ
        /// </summary>
        /// <param name="st">Отсчеты сигнала</param>
        /// <param name="sr">Частота среза</param>
        /// <param name="f">Вектор частот</param>
        /// <returns>Фильтрованный сигнал</returns>
        public static Vector FilterLow(Vector st, double sr, Vector f)
        {
            double srNew = Statistic.MaximalValue(f) - sr;
            Vector kw    = NeuroFunc.Threshold(f, srNew).Revers();

            //kw.Visual();
            return(Filter(st, kw));
        }
        /// <summary>
        /// Полосовой фильтр
        /// </summary>
        /// <param name="st">Отсчеты сигнала</param>
        /// <param name="sr1">Частота среза 1</param>
        /// <param name="sr2">Частота среза 2</param>
        /// <param name="f">Вектор частот</param>
        /// <returns>Фильтрованный сигнал</returns>
        public static Vector FilterBand(Vector st, double sr1, double sr2, Vector f)
        {
            double srNew = Statistic.MaximalValue(f) - sr2;
            Vector kw    = NeuroFunc.Threshold(f, srNew).Revers();
            Vector kw2   = NeuroFunc.Threshold(f, sr1);

            kw *= kw2;
            return(Filter(st, kw));
        }
Exemple #4
0
        /// <summary>
        /// Пространственный фильтр полутонового изображения
        /// </summary>
        /// <param name="img">Матрица изображения</param>
        /// <param name="filter">Матрица фильтра</param>
        /// <param name="coef">Коэффициент контраста</param>
        /// <param name="dx">Яркость</param>
        /// <returns>Возвращает результат фильтрации</returns>
        public static Matrix SpaceFilter(Matrix img, Matrix filter, double coef = 1, double dx = 0)
        {
            int    H = img.M - filter.M + 1, W = img.N - filter.N + 1;
            Matrix newMatr = new Matrix(H, W);

            for (int i = 0; i < H; i++)
            {
                for (int j = 0; j < W; j++)
                {
                    newMatr.Matr[i, j] = Filter(img, filter, j, i);
                }
            }

            return(NeuroFunc.Relu((newMatr * coef + dx / 255.0), 1, 0));
        }
Exemple #5
0
        /// <summary>
        /// Медианный фильтр полутонового изображения
        /// </summary>
        /// <param name="img">Матрица изображения</param>
        /// <param name="filter">Матрица фильтра</param>
        /// <param name="coef">Коэффициент контраста</param>
        /// <param name="dx">Яркость</param>
        /// <returns>Возвращает результат фильтрации</returns>
        public static Matrix MedianFilter(Matrix img, Matrix filter, double coef = 1, double dx = 0)
        {
            int    H = img.M - filter.M + 1, W = img.N - filter.N + 1;
            Matrix newMatr = new Matrix(H, W);

            for (int i = 0; i < H; i++)
            {
                for (int j = 0; j < W; j++)
                {
                    newMatr.Matr[i, j] = FilterMedian(img, filter, j, i);
                }
            }

            newMatr = MathFunc.abs((newMatr * coef + dx / 255.0) - Statistic.ExpectedValue(newMatr.Spagetiz()));

            return(NeuroFunc.Relu(newMatr, 1, 0));
        }
        /// <summary>
        /// Ретинекс
        /// </summary>
        /// <param name="bm">Картинка</param>
        /// <returns></returns>
        public static Bitmap Retin(Bitmap bm)
        {
            Matrix m       = ImgConverter.BmpToMatr(bm);
            Matrix filter  = new Matrix(5, 5) + 10;
            Matrix filter2 = new Matrix(5, 5);

            filter2[2, 2] = 1;
            double sum = 0;


            for (int i = 1; i < 4; i++)
            {
                for (int j = 1; j < 4; j++)
                {
                    filter[i, j] = 12;
                }
            }



            filter[2, 2] = 18;

            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    sum += filter[i, j];
                }
            }

            filter /= 1.7 * sum;
            Matrix bb = ImgFilters.SpaceFilter(m, filter);
            Matrix G  = MathFunc.lg(bb + 0.001);

            m = ImgFilters.SpaceFilter(m, filter2);
            double mean, sigm;

            m    = MathFunc.lg(m + 0.001);
            m   -= G;
            m   -= Statistic.MinimalValue(m.Spagetiz());
            m   /= Statistic.MaximalValue(m.Spagetiz());
            mean = Statistic.ExpectedValue(m.Spagetiz());
            sigm = 0.9 / Statistic.Std(m.Spagetiz());
            m    = NeuroFunc.Sigmoid(sigm * (m - mean));
            return(ImgConverter.MatrixToBitmap(m));
        }
        /// <summary>
        /// Создание АЧХ нужного типа
        /// </summary>
        /// <param name="f">Вектор частот</param>
        /// <param name="param">параметры</param>
        /// <param name="afh">Тип АЧХ</param>
        public Vector GetAFH(Vector f, double[] param, AFHType afh)
        {
            Vector kw = new Vector(f.N);

            if (afh == AFHType.Band)
            {
                for (int i = 0; i < f.N; i++)
                {
                    if ((f.DataInVector[i] >= param[0]) && (f.DataInVector[i] <= param[1]))
                    {
                        kw.DataInVector[i] = 1;
                    }
                }
            }

            if (afh == AFHType.High)
            {
                kw = NeuroFunc.Threshold(f, param[0]);
            }

            if (afh == AFHType.Low)
            {
                double srNew = f.DataInVector[f.N - 1] - param[0];
                kw = NeuroFunc.Threshold(f, srNew).Revers();
            }


            if (afh == AFHType.Rezector)
            {
                kw += 1;

                for (int i = 0; i < f.N; i++)
                {
                    if ((f.DataInVector[i] >= param[0]) && (f.DataInVector[i] <= param[1]))
                    {
                        kw.DataInVector[i] = 0;
                    }
                }
            }

            return(kw);
        }
        /// <summary>
        /// Распознавание векторов
        /// </summary>
        /// <param name="x">Вектора</param>
        public Vector RecognitionAll(Vector x)
        {
            Vector[] vecs = new Vector[x.N];

            for (int i = 0; i < x.N; i++)
            {
                vecs[i] = new Vector
                          (
                    new double[]
                {
                    1, x[i]
                }
                          );
            }


            Vector outp = _lr.Predict(vecs);

            return(NeuroFunc.Sigmoid(outp));
        }
Exemple #9
0
        //Элемент контрасного фильтра
        private static Matrix FilterContrast(Matrix img, int x, int y, int dx, int dy)
        {
            Vector vect;
            Matrix matr = new Matrix(y, x);

            for (int i = 0; i < y; i++)
            {
                for (int j = 0; j < x; j++)
                {
                    matr[i, j] = img.Matr[dy + i, dx + j];
                }
            }


            matr = MathFunc.lg(matr * 255 + 1);
            vect = matr.Spagetiz();
            double cko = 3 * Statistic.Std(vect), m = Statistic.ExpectedValue(vect);

            return(NeuroFunc.Sigmoid((matr - m) / (cko + 0.01), 3));
        }
        /// <summary>
        /// ФВЧ
        /// </summary>
        /// <param name="st">Отсчеты сигнала</param>
        /// <param name="sr">Частота среза</param>
        /// <param name="f">Вектор частот</param>
        /// <returns>Фильтрованный сигнал</returns>
        public static Vector FilterHigh(Vector st, double sr, Vector f)
        {
            Vector kw = NeuroFunc.Threshold(f, sr);

            return(Filter(st, kw));
        }
Exemple #11
0
 /// <summary>
 /// Прямоугольный сигнал
 /// </summary>
 /// <param name="t">Вектор отсчетов времени</param>
 /// <param name="f">Вектор частот</param>
 /// <returns>Отсчеты сигнала</returns>
 public static Vector Rect(Vector t, Vector f)
 {
     return(NeuroFunc.Threshold(Sin(t, f), 0.1));
 }
Exemple #12
0
 /// <summary>
 /// Прямоугольный сигнал
 /// </summary>
 /// <param name="t">Вектор отсчетов времени</param>
 /// <param name="A">Вектор амплитуда</param>
 /// <param name="f">Вектор частот</param>
 /// <returns>Отсчеты сигнала</returns>
 public static Vector Rect(Vector t, Vector A, double f)
 {
     return(A * NeuroFunc.Threshold(Sin(t, 1, f), 0.1));
 }
Exemple #13
0
 /// <summary>
 /// Производная ф-ии активации
 /// </summary>
 public override Vector DfDy()
 {
     return(NeuroFunc.Relu(OutputLayer, 0.0));
 }
Exemple #14
0
 /// <summary>
 /// Регулировка контраста и яркости
 /// </summary>
 /// <param name="img">Матрица изображения</param>
 /// <param name="coef">Контраст</param>
 /// <param name="dx">Яркость</param>
 /// <returns>Итоговое изображение</returns>
 public static Matrix Contrast(Matrix img, double coef = 1, double dx = 0)
 {
     return(NeuroFunc.Relu((img * coef + dx / 255.0), 1, 0));
 }
 /// <summary>
 /// Ф-я активации
 /// </summary>
 /// <param name="inp">Вход</param>
 public override Vector FActivation(Vector inp)
 {
     return(1.7159 * NeuroFunc.SigmoidBiplyar(inp, 2.0 / 3.0));
 }
Exemple #16
0
 /// <summary>
 /// Ф-я активации
 /// </summary>
 /// <param name="inp">Вход</param>
 /// <returns></returns>
 public override Vector FActivation(Vector inp)
 {
     return(NeuroFunc.Relu(inp, 0.0));
 }
Exemple #17
0
 /// <summary>
 /// Прямоугольный сигнал
 /// </summary>
 /// <param name="t">Вектор отсчетов времени</param>
 /// <param name="A">Амплитуда</param>
 /// <param name="f">Частота</param>
 /// <param name="fi">Вектор фаз</param>
 /// <returns>Отсчеты сигнала</returns>
 public static Vector Rect(Vector t, double A, double f, Vector fi)
 {
     return(A * NeuroFunc.Threshold(Sin(t, 1, f, fi), 0.1));
 }
 /// <summary>
 /// Функция активации
 /// </summary>
 /// <param name="inp">Выход линейного слоя</param>
 public override Vector FActivation(Vector inp)
 {
     return(NeuroFunc.Sigmoid(inp));
 }
        /// <summary>
        /// Распознавание вектора
        /// </summary>
        /// <param name="x">Вектор</param>
        public double Recognition(Vector x)
        {
            double outp = _lr.Predict(x.AddOne());

            return(NeuroFunc.Sigmoid(outp));
        }