stringtranslate.com

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

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

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

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

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

Проработанный одномерный пример

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

х = (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). Видно, что всплеск шума заразил соседние элементы сигнала скользящего среднего и что медианный фильтр сработал намного лучше (для этого типа импульсного шума). Медианная фильтрация хорошо работает как для положительных импульсов (всплески), так и для отрицательных импульсов (выпадения), при условии, что окно можно выбрать так, чтобы количество записей, зараженных импульсным шумом, (почти) всегда было меньше половины размера окна.


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

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

Псевдокод двумерного медианного фильтра

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

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]

Проработанный двумерный пример

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

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

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

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

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

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

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

Рекомендации

  1. ^ Хуанг, Томас С.; Ян, Джордж Дж.; Тан, Грегори Ю. (февраль 1979 г.). «Быстрый алгоритм двумерной медианной фильтрации» (PDF) . Транзакции IEEE по акустике, речи и обработке сигналов . 27 (1): 13–18. дои :10.1109/ТАССП.1979.1163188.
  2. ^ Ариас-Кастро, Эри; Донохо, Дэвид Л. (июнь 2009 г.). «Действительно ли медианная фильтрация сохраняет края лучше, чем линейная фильтрация?». Анналы статистики . 37 (3): 1172–2009. arXiv : math/0612422 . Бибкод : 2006math.....12422A. дои : 10.1214/08-AOS604 . МР  2509071. Збл  1160.62086.
  3. ^ Арсе, Гонсало Р. (2005). Нелинейная обработка сигналов: статистический подход . Нью-Джерси, США: Уайли. ISBN 0-471-67624-1.

Внешние ссылки