/// <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)); }
/// <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="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)); }
/// <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)); }
/// <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)); }
/// <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)); }