示例#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));
        }
示例#2
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="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));
        }
示例#4
0
 /// <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));
        }