Медианный фильтр

Метод нелинейной цифровой фильтрации для удаления шума
Пример применения трех медианных фильтров разного радиуса к одной и той же зашумленной фотографии.

Медианный фильтр — это нелинейный метод цифровой фильтрации , часто используемый для удаления шума из изображения или сигнала. Такое шумоподавление является типичным шагом предварительной обработки для улучшения результатов последующей обработки (например, обнаружения краев на изображении). Медианная фильтрация очень широко используется в цифровой обработке изображений , поскольку при определенных условиях она сохраняет края, удаляя шум (но см. обсуждение ниже, какие именно виды шума), также имеет применение в обработке сигналов .

Описание алгоритма

Основная идея медианного фильтра заключается в том, чтобы проходить по входу сигнала за входом, заменяя каждый вход медианой входа и его соседних входов. Идея очень похожа на фильтр скользящего среднего , который заменяет каждый вход арифметическим средним входа и его соседей. Шаблон соседей называется «окном», которое скользит, вход за входом, по всему сигналу. Для одномерных сигналов наиболее очевидным окном являются только первые несколько предыдущих и последующих входов, тогда как для двумерных (или более многомерных) данных окно должно включать все входы в пределах заданного радиуса или эллипсоидальной или прямоугольной области (т. е. медианный фильтр не является разделяемым фильтром ). [ необходима цитата ]

Реализованный одномерный пример

Для демонстрации, используя размер окна, равный трем, с одной записью, непосредственно предшествующей и следующей за каждой записью, и заполненными нулями границами, медианный фильтр будет применен к следующему простому одномерному сигналу:

х = (2, 3, 80, 6, 2, 3).

Этот сигнал имеет в основном записи с небольшими значениями, за исключением одной записи, которая необычно высока и считается шумовым всплеском, и цель состоит в том, чтобы устранить ее. Таким образом, медианный отфильтрованный выходной сигнал y будет:

y 0 = med(0, 2, 3) = 2, (граничное значение принимается равным 0)
y 1 = med(2, 3, 80) = 3, (2, 3 и 80 уже находятся в порядке возрастания, поэтому нет необходимости их упорядочивать)
y 2 = med(3, 80, 6) = med(3, 6, 80) = 6, (3, 80 и 6 переставляются для нахождения медианы)
у 3 = мед(80, 6, 2) = мед(2, 6, 80) = 6,
у 4 = мед(6, 2, 3) = мед(2, 3, 6) = 3,
у 5 = мед(2, 3, 0) = мед(0, 2, 3) = 2,

то есть,

у = (2, 3, 6, 6, 3, 2).

Очевидно, что шумовой всплеск был по существу устранен (и сигнал также был немного сглажен). Результатом фильтра скользящего среднего с той же шириной окна на том же наборе данных будет y = (1,7, 28,3, 29,7, 29,3, 3,7, 1,7). Видно, что шумовой всплеск заразил соседние элементы в сигнале скользящего среднего, и что медианный фильтр показал себя намного лучше (для этого типа импульсного шума). Медианная фильтрация хорошо работает как для положительных импульсов (всплесков), так и для отрицательных импульсов (выпадений), при условии, что окно можно выбрать так, чтобы количество записей, зараженных импульсным шумом, было (почти) всегда меньше половины размера окна.


Пограничные вопросы

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

  • При вычислении медианы значения вблизи границы отсутствующие значения заполняются путем повторения граничного значения для получения достаточного количества записей для заполнения окна.
  • Избегайте обработки границ, с последующей обрезкой сигнала или границы изображения или без нее,
  • Извлечение записей из других мест сигнала, таких как значения с дальних концов (повторение граничных условий) или инвертирование сигнала (отраженные граничные условия). Например, с 2D-изображениями записи с дальней горизонтальной или вертикальной границы могут быть выбраны или повторение в обратном порядке точек на той же границе
  • Уменьшение окна вблизи границ, так что каждое окно становится заполненным,
  • Предполагая, что границы заполнены нулями.

Двумерный медианный фильтр псевдокода

Код простого алгоритма двумерного медианного фильтра может выглядеть следующим образом:

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]

Реализованный двумерный пример

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

  1. Выбор окна :
    • Выберите окно определенного размера (например, 3x3, 5x5), центрированное вокруг пикселя, который необходимо отфильтровать.
    • Для нашего примера давайте используем окно размером 3x3.
  2. Собирайте значения пикселей :
    • Соберите значения пикселей в окне.
    • Для центрального пикселя мы имеем следующие значения:
      • Окно: [ 1 2 3 4 8 6 7 5 9 ] {\displaystyle {\begin{bmatrix}1&2&3\\4&8&6\\7&5&9\end{bmatrix}}}
      • Центральный пиксель: 8
  3. Сортировать значения :
    • Отсортируйте собранные значения пикселей в порядке возрастания.
    • Для центрального пикселя отсортированные значения: [1, 2, 3, 4, 5, 6, 7, 8, 9]
  4. Выберите среднее значение :
    • Медианное значение — это среднее значение в отсортированном списке.
    • В нашем случае медианное значение равно 5.
  5. Заменить центральный пиксель :
    • Замените исходное значение центрального пикселя (8) на срединное значение (5).
  6. Повторите для всех пикселей :
    • Повторите шаги 2–5 для всех пикселей изображения.

Конвертированное изображение

После применения медианного фильтра ко всем пикселям преобразованное изображение становится: Это отфильтрованное изображение эффективно удаляет шумные пиксели, сохраняя важные особенности. Помните, что мы предполагали виртуальные строки и столбцы с повторяющимися значениями граничных пикселей для обработки краевых пикселей. [ 2 3 3 4 5 6 7 7 8 ] {\displaystyle {\begin{bmatrix}2&3&3\\4&5&6\\7&7&8\end{bmatrix}}}

Свойства сохранения кромок

Медианная фильтрация является одним из видов техники сглаживания, как и линейная гауссовская фильтрация . Все техники сглаживания эффективны для удаления шума в гладких участках или областях сигнала, но отрицательно влияют на края. Однако часто, одновременно с уменьшением шума в сигнале, важно сохранить края. Края имеют решающее значение для визуального вида изображений, например. Для малых и средних уровней гауссова шума медианный фильтр явно лучше гауссова размытия при удалении шума, сохраняя края для заданного фиксированного размера окна. [2] Однако его производительность не намного лучше гауссова размытия для высоких уровней шума, тогда как для спекл-шума и шума «соль-с-перцем » (импульсного шума) он особенно эффективен. [3] Из-за этого медианная фильтрация очень широко используется в цифровой обработке изображений .

Смотрите также

Ссылки

  1. ^ Хуан, Томас С.; Янг, Джордж Дж.; Тан, Грегори И. (февраль 1979 г.). «Быстрый алгоритм двумерной медианной фильтрации» (PDF) . IEEE Transactions on Acoustics, Speech, and Signal Processing . 27 (1): 13–18. doi :10.1109/TASSP.1979.1163188.
  2. ^ Ариас-Кастро, Эри; Донохо, Дэвид Л. (июнь 2009 г.). «Действительно ли медианная фильтрация сохраняет края лучше, чем линейная фильтрация?». Annals of Statistics . 37 (3): 1172–2009. arXiv : math/0612422 . Bibcode : 2006math.....12422A. doi : 10.1214/08-AOS604 . MR  2509071. Zbl  1160.62086.
  3. ^ Арсе, Гонсало Р. (2005). Нелинейная обработка сигналов: статистический подход . Нью-Джерси, США: Wiley. ISBN 0-471-67624-1.
  • Быстрая реализация одномерного медианного фильтра MATLAB
  • Функция медианного фильтра Mathematica
  • Медианный фильтр
  • Быстрый двумерный медианный фильтр
  • Реализация двумерного медианного фильтра за постоянное время (лицензия GPL) — время выполнения этого алгоритма на пиксель пропорционально количеству элементов в гистограмме (обычно это , где n — количество бит на канал), хотя это, в свою очередь, является константой. 2 н {\displaystyle 2^{n}}
  • Реализация, написанная на разных языках программирования (на Rosetta Code )
  • Статья доктора Доббса
  • В 100+ раз более быстрый взвешенный медианный фильтр
  • Круговой медианный фильтр Медианный фильтр для данных с круговыми значениями, таких как фазовые или ориентационные изображения (C++/Matlab)
Взято с "https://en.wikipedia.org/w/index.php?title=Медианный_фильтр&oldid=1223328768"