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