/// <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)); }
/// <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> public override Vector DfDy() { return(NeuroFunc.Relu(OutputLayer, 0.0)); }
/// <summary> /// Ф-я активации /// </summary> /// <param name="inp">Вход</param> /// <returns></returns> public override Vector FActivation(Vector inp) { return(NeuroFunc.Relu(inp, 0.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)); }