Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Linq;
- using System;
- namespace Recognizer
- {
- internal static class MedianFilterTask
- {
- /*
- * Для борьбы с пиксельным шумом, подобным тому, что на изображении,
- * обычно применяют медианный фильтр, в котором цвет каждого пикселя,
- * заменяется на медиану всех цветов в некоторой окрестности пикселя.
- * https://en.wikipedia.org/wiki/Median_filter
- *
- * Используйте окно размером 3х3 для не граничных пикселей,
- * Окно размером 2х2 для угловых и 3х2 или 2х3 для граничных.
- */
- public static double[,] MedianFilter(double[,] original)
- {
- double[,] array = new double[original.GetLength(0) + 2, original.GetLength(1) + 2];
- for (int x = 0; x < original.GetLength(0); x++)
- for (int y = 0; y < original.GetLength(1); y++)
- array[x + 1, y + 1] = original[x, y];
- for (int x = 1; x < original.GetLength(0) + 1; x++)
- for (int y = 1; y < original.GetLength(1) + 1; y++)
- if ((array[x, 0] == 0) && (array[x, 1] == 0) && (array[x, 2] == 0) || (array[x,0] == 255) &&
- (array[x, 1] == 255) && (array[x, 2] == 255))
- {
- double r = 0;
- double g = 0;
- int good = 0;
- for (int i = -1; i <= 1; i++)
- if (!((array[x + i, 0] == 0) && (array[x + i, 1] == 0) && (array[x + i, 2] == 0) ||
- (array[x + i, 0] == 255) && (array[x + i, 1] == 255) && (array[x + i, 2] == 255)))
- {
- r += array[x + i, 0];
- g += array[x + i, 1];
- good++;
- }
- array[x, 0] = r / good;
- array[x, 1] = g / good;
- }
- for (int x = 0; x < original.GetLength(0); x++)
- for (int y = 0; y < original.GetLength(1); y++)
- for (int i = 0; i < 3; i++)
- original[x, y] = (byte)array[x + 1, y + 1];
- return original;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement