Одномерный медианный фильтр

nats

Есть ли у кого готовый алгоритм сабжа на С#, С++, С?

al70

А что там реализовывать-то? Сортировку трех чисел по возрастанию?

nats

Сортировка хрен сним.У меня на входе N чисел, длина окна, ну пусть будет три.После сортировки на выходе я должен получить N отфильтрованых чисел.
Как это сделать ведь при длине окна 3 на выходе N-2 чисел,5 - N-4.Мне нулями восполнять эти пробелы,т.е при длине окна 3 фильтровать массив 0,0,N,0,0.
 Хотелось бы посмотреть как это реализуется.

lurgi48

Обычно при использовании таких фильтров призывается смириться с уменьшением выхода.
Т.е корректно крайние значения ты все-равно не обработаешь.
Если для некоторых фильтров можно бы было попробовать считать по меньшему числу соседей, то для медианного это бесполезно.

lurgi48

ЗЫ. я бы на твоем месте крайние значения оставил как есть

bleyman


to demonstrate the median filter will be applied to the following array with a window size of 3
x = [2 80 6 3]
y[1] = Median[0 2 80] = 2
y[2] = Median[2 80 6] = Median[2 6 80] = 6
y[3] = Median[80 6 3] = Median[3 6 80] = 6
y[4] = Median[6 3 0] = Median[0 3 6] = 3
so
y = [2 6 6 3]
where y is the median filtered output of x

Да, нулями.

bleyman

Хотя, конечно, хз =)
Вот например если у тебя бывают отрицательные значения, то получится явно фигня.
Если смысл задачи позволяет, то можно закольцевать массив.
Или можно оставить их нефильтрованными. Или, если вообще окно достаточно длинное, уменьшать размер окна (с 5 до 3 до 1 (то есть до отсутствия фильтра.

nats

Спасибо сомнений стало меньше.Но если взять длину окна больше чем 3 нули вылезут вначале и в конце моего сигнала.Я так понимаю,что надо вместо этих нулей повставлять крайние ненулевые значения.

lurgi48

Чисто визуально нефильтрованные значения корректнее должны выглядеть

bleyman

вместо этих нулей повставлять крайние ненулевые значения.
Вот этого я не стал бы делать ни за что, потому что тогда сама идея фильтрации выделяющихся значений полностью теряет смысл.

lurgi48

она все-равно не работает для крайних

Dmitriy82

Я бы рассматривал продолжение сигнала как отражение (как будто к краю приставлено зеркало). Так делают, не знаю, с медианой ли. А вообще
наверное надо принимать во внимание, как результат будет использоваться.

Tatiana09

Отражение равнозначно уменьшению окна в два раза. А невозможность фильтрации краев - это проблема всех матричных фильтров (где есть движущееся окно). Оставь границы нефильтроваными или вообще обрежь, если объем данных позволяет.
Оставить комментарий
Имя или ник:
Комментарий: