/// <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)); }
//Элемент контрасного фильтра 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)); }
/// <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)); }