Медианный фильтр — это метод нелинейной цифровой фильтрации , часто используемый для удаления шума из изображения или сигнала. Такое снижение шума является типичным этапом предварительной обработки для улучшения результатов последующей обработки (например, обнаружения краев на изображении). Медианная фильтрация очень широко используется при цифровой обработке изображений , поскольку при определенных условиях она сохраняет края, удаляя при этом шум (но виды шума см. ниже), а также находит применение при обработке сигналов .
Основная идея медианного фильтра состоит в том, чтобы просмотреть запись сигнала за записью, заменяя каждую запись медианой записи и соседних записей. Идея очень похожа на фильтр скользящего среднего , который заменяет каждую запись средним арифметическим значением записи и ее соседей. Шаблон соседей называется «окном», которое скользит, запись за записью, по всему сигналу. Для одномерных сигналов наиболее очевидным окном являются только первые несколько предшествующих и последующих записей, тогда как для двумерных (или многомерных) данных окно должно включать все записи в пределах заданного радиуса, эллипсоидной или прямоугольной области (т. е. , медианный фильтр не является сепарабельным фильтром ). [ нужна цитата ]
Чтобы продемонстрировать, используя размер окна, равный трем, с одной записью, непосредственно предшествующей и следующей за каждой записью, и границами, дополненными нулями, медианный фильтр будет применен к следующему простому одномерному сигналу:
Этот сигнал имеет в основном входы с небольшим значением, за исключением одного входа, который необычно высок и считается всплеском шума, и цель состоит в том, чтобы устранить его. Таким образом, медианный фильтрованный выходной сигнал y будет:
то есть,
Видно, что всплеск шума практически устранен (и сигнал немного сглажен). Результатом фильтра скользящего среднего с той же шириной окна в том же наборе данных будет y = (1,7, 28,3, 29,7, 29,3, 3,7, 1,7). Видно, что всплеск шума заразил соседние элементы сигнала скользящего среднего и что медианный фильтр сработал намного лучше (для этого типа импульсного шума). Медианная фильтрация хорошо работает как для положительных импульсов (всплески), так и для отрицательных импульсов (выпадения), при условии, что окно можно выбрать так, чтобы количество записей, зараженных импульсным шумом, (почти) всегда было меньше половины размера окна.
При реализации медианного фильтра к границам сигнала следует обращаться с особой осторожностью, поскольку записей недостаточно для заполнения всего окна. Существует несколько схем, обладающих различными свойствами, которые могут быть предпочтительными в конкретных обстоятельствах:
Код простого алгоритма двумерного медианного фильтра может выглядеть так:
1. выделить выходное значениеPixelValue[ширина изображения][высота изображения]2. выделить окно [ширина окна × высота окна]3. Edgex := (ширина окна / 2) округляется вниз4. Edgey := (высота окна / 2) округляется вниз
для x от Edgex до ширины изображения — EdgeX do для y от Edgey до высоты изображения — Edgey Do я = 0 для fx от 0 до ширины окна do для fy от 0 до высоты окна do окно[i] := inputPixelValue[x + fx - Edgex] [y + fy - Edgey] я := я + 1 сортировать записи в окне [] outputPixelValue[x][y] := window[ширина окна * высота окна / 2]
Этот алгоритм:
Обычно большая часть вычислительных усилий и времени тратится на вычисление медианы каждого окна. Поскольку фильтр должен обрабатывать каждую запись в сигнале, для больших сигналов, таких как изображения, эффективность этого медианного вычисления является критическим фактором, определяющим, насколько быстро может работать алгоритм. Описанная выше наивная реализация сортирует каждую запись в окне, чтобы найти медиану; однако, поскольку требуется только среднее значение в списке чисел, алгоритмы выбора могут быть гораздо более эффективными. Более того, некоторые типы сигналов (очень часто это касается изображений) используют целочисленные представления: в этих случаях медианы гистограммы могут быть гораздо более эффективными, потому что гистограмму легко обновлять от окна к окну и находить медиану гистограммы. не является особенно обременительным. [1]
Медианный фильтр работает, рассматривая локальное окно (также известное как ядро) вокруг каждого пикселя изображения. Шаги применения медианного фильтра следующие:
После применения медианного фильтра ко всем пикселям преобразованное изображение становится следующим: Это отфильтрованное изображение эффективно удаляет зашумленные пиксели, сохраняя при этом важные особенности. Помните, что мы предполагали, что виртуальные строки и столбцы с повторяющимися значениями граничных пикселей будут обрабатывать краевые пиксели.
Медианная фильтрация — это один из методов сглаживания, как и линейная фильтрация Гаусса . Все методы сглаживания эффективны для удаления шума в гладких участках или гладких областях сигнала, но отрицательно влияют на края. Однако часто одновременно с уменьшением шума в сигнале важно сохранить края. Например, края имеют решающее значение для внешнего вида изображений. Для небольших и умеренных уровней гауссовского шума медианный фильтр явно лучше, чем размытие по Гауссу, удаляет шум, сохраняя при этом края для заданного фиксированного размера окна. [2] Однако его производительность не намного лучше, чем размытие по Гауссу для высоких уровней шума, тогда как для спекл-шума и шума типа «соль и перец» (импульсивный шум) оно особенно эффективно. [3] Из-за этого медианная фильтрация очень широко используется при цифровой обработке изображений .