Недостатки медианных фильтров

Digital signals processing

Тема 16. Медианные фильтры

Кому неведомо всегдашнее несоответствие между тем, что человек ищет, и что находит?

Николло Макиавелли. Итальянский политик, историк. 1469-1527 г.

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

Эрнст Трубов. Уральский геофизик. ХХ в.

Введение.

1. Медианная фильтрация одномерных сигналов. Принцип фильтрации. Одномерные фильтры. Подавление статистических шумов. Импульсные и точечные шумы. Перепад плюс шум. Ковариационные функции. Преобразование статистики шумов. Частотные свойства фильтра. Разновидности медианных фильтров. Достоинства медианных фильтров. Недостатки медианных фильтров.

2. Медианная фильтрация изображений. Шумы в изображениях. Двумерные фильтры. Адаптивные двумерные фильтры. Фильтры на основе ранговой статистики.

Введение

Медианные фильтры достаточно часто применяются на практике как средство предварительной обработки цифровых данных. Специфической особенностью фильтров явно выраженная избирательность по отношению к элементам массива, представляющим собой немонотонную составляющую последовательности чисел в пределах окна (апертуры) фильтра, и резко выделяющихся на фоне соседних отсчетов. В то же время на монотонную составляющую последовательности медианный фильтр не действует, оставляя её без изменений. Благодаря этой особенности, медианные фильтры при оптимально выбранной апертуре могут, например, сохранять без искажений резкие границы объектов, эффективно подавляя некоррелированные или слабо коррелированные помехи и малоразмерные детали. Это свойство позволяет применять медианную фильтрацию для устранения аномальных значений в массивах данных, уменьшения выбросов и импульсных помех. Характерной особенностью медианного фильтра является его нелинейность. Во многих случаях применение медианного фильтра оказывается более эффективным по сравнению с линейными фильтрами, поскольку процедуры линейной обработки являются оптимальными при равномерном или гауссовом распределении помех, что в реальных сигналах может быть далеко не так. В случаях, когда перепады значений сигналов велики по сравнению с дисперсией аддитивного белого шума, медианный фильтр дает меньшее значение среднеквадратической ошибки по сравнению с оптимальными линейными фильтрами. Особенно эффективным медианный фильтр оказывается при очистке сигналов от импульсных шумов при обработке изображений, акустических сигналов, передаче кодовых сигналов и т.п. Однако детальные исследования свойств медианных фильтров как средства фильтрации сигналов различного типа являются довольно редкими.

16.1. МедианНая фильтрацИя одномерных сигналов .

Принцип фильтрации. Медианы давно использовались и изучались в статистике как альтернатива средним арифметическим значениям отсчетов в оценке выборочных средних значений. Медианой числовой последовательности х 1 , х 2 , … , х n при нечетном n является средний по значению член ряда, получающегося при упорядочивании этой последовательности по возрастанию (или убыванию). Для четных n медиану обычно определяют как среднее арифметическое двух средних отсчетов упорядоченной последовательности.

Медианный фильтр представляет собой оконный фильтр, последовательно скользящий по массиву сигнала, и возвращающий на каждом шаге один из элементов, попавших в окно (апертуру) фильтра. Выходной сигнал y k скользящего медианного фильтра шириной 2n+1 для текущего отсчета k формируется из входного временного ряда …, x k -1 , x k , x k +1 ,… в соответствии с формулой:

y k = med(x k - n , x k - n +1 ,…, x k -1 , x k , x k +1 ,…, x k + n -1 , x k + n), (16.1.1)

где med(x 1 , …, x m , …, x 2n+1) = x n+1 , x m – элементы вариационного ряда, т.е. ранжированные в порядке возрастания значений x m: x 1 = min(x 1 , x 2 ,…, x 2n+1) ≤ x (2) ≤ x (3) ≤ … ≤ x 2n+1 = max(x 1 , x 2 ,…, x 2n+1).

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

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

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

Благодаря этой особенности, медианные фильтры при оптимально выбранной апертуре могут сохранять без искажений резкие границы объектов, подавляя некоррелированные и слабо коррелированные помехи и малоразмерные детали. При аналогичных условиях алгоритмы линейной фильтрации неизбежно «смазывает» резкие границы и контуры объектов. На рис. 16.1.1 приведен пример обработки сигнала с импульсными шумами медианным и треугольным фильтрами с одинаковыми размерами окна N=3. Преимущество медианного фильтра очевидно.

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

На рис. 16.1.2 приведен пример медианной фильтрации модельного сигнала a k , составленного из детерминированного сигнала s k в сумме со случайным сигналом q k , имеющим равномерное распределение с одиночными импульсными выбросами. Окно фильтра равно 5. Результат фильтрации – отсчеты b k .

Подавление статистических шумов медианными фильтрами в связи с их нелинейностью обычно рассматривается только на качественном уровне. Нельзя также четко разграничить влияние медианных фильтров на сигнал и шум.

Если значения элементов последовательности чисел {x i } в апертуре фильтра являются независимыми одинаково распределенными (НОР) случайными величинами со средним значением m

то математическое ожидание M{z} = 0 и, следовательно, M{x}=m.

Пусть F(x) и f(x)=F"(x) обозначают функции распределения и плотности вероятностей величин х. Согласно теории вероятностей, распределение у = med(х 1 , ... , х n) для больших n является приблизительно нормальным N(m t ,  n), где m t - теоретическая медиана, определяемая из условия F(m t) = 0.5, при этом дисперсия распределения:

 n 2 = 1/(n 4f 2 (m t)). (16.1.2)

Приведенные результаты справедливы как для одномерной, так и для двумерной фильтрации, если n выбирать равным числу точек в апертуре фильтра. Если f(x) симметрична относительно m, то распределение медиан также будет симметрично относительно m и, таким образом, справедлива формула:

M{med(х 1 , ... , х n)} = M{x i } = m.

Если случайные величины х являются НОР и равномерно распределены на отрезке , то можно найти точное значение дисперсии медианы по формуле:

 n 2 = 1/(4(n+2)) = 3 x /(n+2).

Если случайные величины х являются независимыми, одинаково распределенными с нормальным распределением N(m, ), то m t = m. Модифицированная формула дисперсии медианы для малых нечетных значений n:

 g    2 /(2n-2+). (16.1.2")

Значение дисперсии шумов для случайных величин в скользящем n-окне арифметического усреднения (фильтр МНК первого порядка) имеет значение  2 /n. Это означает, что для нормального белого шума при равных значениях n окон медианного фильтра и фильтра скользящего усреднения, дисперсия шумов на выходе медианного фильтра приблизительно на 57% больше, чем у фильтра скользящего среднего. Чтобы медианный фильтр давал ту же дисперсию, что и скользящее усреднение, его апертура должна быть на 57% больше. При этом следует иметь в виду, что искажение полезных сигналов, особенно при наличии в них скачков и крутых перепадов, даже при большей апертуре медианного фильтра может оказаться меньше, чем у фильтров скользящего среднего.

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

f(x) = (
/ exp(-
|x-m| /)

дисперсия шумов после медианного фильтра на 50% меньше, чем после фильтра скользящего среднего.

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

Импульсные и точечные шумы . При регистрации, обработке и обмене данными в современных измерительно-вычислительных и информационных системах потоки сигналов кроме полезного сигнала s(t- 0) и флуктуационных шумов q(t) содержат, как правило, импульсные потоки g(t)=
(t- k) различной интенсивности с регулярной или хаотической структурой

x(t) = s(t- 0) + g(t) + q(t). (16.1.3)

Под импульсным шумом понимается искажение сигналов большими импульсными выбросами произвольной полярности и малой длительности. Причиной появления импульсных потоков могут быть как внешние импульсные электромагнитные помехи, так и наводки, сбои и помехи в работе самих систем. Совокупность статистически распределенного шума и потока квазидетерминированных импульсов представляет собой комбинированную помеху. Радикальный метод борьбы с комбинированной помехой - применение помехоустойчивых кодов. Однако это приводит к снижению скорости и усложнению систем приемо-передачи данных. Простым, но достаточно эффективным альтернативным методом очистки сигналов в таких условиях является двухэтапный алгоритм обработки сигналов x(t), где на первом этапе производится устранение из потока x(t) шумовых импульсов, а на втором – очистка сигнала частотными фильтрами от статистических шумов.Для сигналов, искаженных действием импульсных шумов, отсутствует строгая в математическом смысле постановка и решение задачи фильтрации. Известны лишь эвристические алгоритмы, наиболее приемлемым из которых является алгоритм медианной фильтрации.

Допустим, что шум q(t) представляет собой статистический процесс с нулевым математическим ожиданием, полезный сигнал s(t- 0) имеет неизвестное временное положение  0  , а поток шумовых импульсов g(t) имеет вид:

g(t) = k a k g(t- k), (16.1.4)

где a k - амплитуда импульсов в потоке,  k - неизвестное временное положение импульсов,  k =1 с вероятностью p k и  k =0 с вероятностью 1-p k . Такое задание импульсной помехи соответствует потоку Бернулли /44/.

При применении к потоку x(t) скользящей медианной фильтрации с окном N отсчетов (N – нечетное) медианный фильтр полностью устраняет одиночные импульсы, удаленные друг от друга минимум на половину апертуры фильтра, и подавляет импульсные помехи, если количество импульсов в пределах апертуры не превосходит (N-1)/2. В этом случае, при p k = p для всех импульсов помехи, вероятность подавления помех может быть определена по выражению /3i/:

R(p) =
p m (1-p) N - p . (16.1.5)

На рис. 16.1.3 приведены результаты расчетов вероятности подавления импульсной помехи медианным фильтром. При p<0.5 результаты статистического моделирования процесса показывают хорошее соответствие расчетным значениям. Для интенсивных импульсных шумовых потоков при p>0.5 медианная фильтрация становится мало эффективной, т.к. происходит не подавление, а усиление и трансформация его в поток импульсов другой структуры (со случайной длительностью).

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

Перепад плюс шум. Рассмотрим фильтрацию перепадов при наличии аддитивного белого шума, т. е. фильтрацию последовательностей, или изображений, с

где s - детерминированный сигнал, равный 0 по одну сторону or перепада и h - по другую, a z - случайные значения белого шума. Предположим, что случайные значения шума z распределены по нормальному закону N(0, ). Для начала рассмотрим одномерную фильтрацию и будем считать, что перепад происходит в точке i = 1, таким образом, что для i0 величина x i есть N(0, ), а для i≥1 величина х i есть N(h, ).

На рис. 16.1.4 показана последовательность значений математического ожидания медиан и скользящего среднего вблизи перепада высотой h = 5 при n = 3. Значения скользящего среднего следуют по наклонной линии, что свидетельствует о смазывании перепада. Поведение математического ожидания значений медианы также свидетельствует о некотором смазывании, хотя в гораздо меньше, чем для скользящего среднего.

Если воспользоваться мерой среднеквадратичной ошибки (СКО), усредненной по N точкам вблизи перепада, и вычислить значения СКО в зависимости от значений h, то нетрудно зафиксировать, что при малых значениях h<2 СКО для скользящего среднего немного меньше, чем для медианы, но при h>3 СКО медианы значительно меньше, чем СКО среднего. Этот результат показывает, что скользящая медиана значительно лучше, чем скользящее среднее, для перепадов большой высоты. Похожие результаты можно получить и для апертуры n=5, и для двумерной фильтрации с апертурами 3x3 и 5x5. Таким образом, математические ожидания медианы для малых h близки к математическим ожиданиям для соответствующих средних, но для больших h они асимптотически ограничены. Объясняется это тем, что при больших h (скажем, h>4) переменные х со средним значением 0 (для данного примера) будут резко отделены от переменных х со средним h.

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

Ковариационные функции при белом шуме на входе. Нормализованные функции автокорреляции выходных сигналов медианных и усредняющих фильтров подобны друг другу. Сходство функций корреляции до некоторой степени объясняется относительно высокой корреляцией между медианой и средним, которая достигает 0.8 при больших n.

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

K() =  2 /(n+(/2)-1))
(1-|j|/n) arcsin((j+)). (16.1.6)

Скользящая медиана почти не сглаживает процессы, ведущие себя на больших интервалах, как функции вида x i = (-1) i y. В самом деле, форма входной последовательности x i = (-1) i y, будет оставлена медианным фильтром без изменений, хотя для некоторых значений n она сдвинется на один шаг. Скользящее усреднение оказывает большое сглаживающее действие на подобный процесс, так как регулярные флуктуации значений х полностью уничтожаются. В целом можно ожидать, что приближенные формулы ковариационных функций скользящих медиан будут полезны только для последовательностей, на которые медианные фильтры действуют так же, как и скользящее усреднение. В случае с сильно осциллирующими последовательностями и последовательностями перепадов большой пользы от них ждать не следует.

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

Рис. 16.1.5. Гистограммы шумовых сигналов.

На рис. 16.1.5 приведены примеры медианной фильтрации модельных шумовых сигналов с гауссовым и равномерным распределением при различной ширине окна фильтра. Как следует из этих графиков, при фильтрации происходит преимущественное подавление шумовых сигналов с большими отклонениями отсчетов от среднего значения с уменьшением стандарта (СКО - среднеквадратического отклонения) распределения. Уменьшение стандарта тем больше, чем больше окно фильтра. Этим же определяется и преобразование формы распределения выходного равномерного шума (а равно и других распределений шумов) к гауссовой по мере увеличения размера окна фильтра.

На рис. 16.1.6 приведен пример изменения гистограмм шума при выполнении дву- и трехкратной последовательной фильтрации. Как видно из графиков, основной эффект фильтрации достигается на первом цикле.

Уменьшение количества больших шумовых отклонений от среднего значения шума приводит также к изменению спектра шума и к определенному подавлению его высокочастотных составляющих, которых больше в "хвостах" шумовых распределений. Это можно видеть на рис. 16.1.7 на спектрах плотности мощности входного и выходного сигналов.

Следует, однако, заметить, что нелинейность медианной фильтрации (замена больших отклонений средними по рангу в окне) приводит к повышению низкочастотных составляющих спектра шума. Этот эффект наглядно виден на рис. 16.1.8, где приводятся сглаженные значения отношения модулей спектров выходного модельного шумового сигнала к входному, т.е. эквивалент коэффициента передачи фильтром шумовых сигналов. На коэффициент передачи фильтром полезных низкочастотных сигналов это не отражается, он остается равным 1, но может приводить к ухудшению отношения сигнал/шум.

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

Частотные свойства фильтра . Для описания линейных фильтров используют импульсную реакцию на единичный импульс, на ступенчатую функцию, и частотные передаточные функции в главном частотном диапазоне. Так как медианный фильтр ликвидирует единичные импульсы и сохраняет перепады, то можно говорить, что импульсная реакция фильтра равна нулю, а отклик на ступенчатую функцию равен 1. Что касается частотной характеристики фильтра, то, в силу нелинейности фильтра, ее нельзя представить какой-либо детерминированной функцией апертуры и частоты. В какой-то мере можно говорить о реакции фильтра на косинусоидальные функции, которая также существенно различается для низких и высоких частот главного частотного диапазона и фазы гармоник в апертуре фильтра, что можно видеть на рис. 16.1.9.

Рис. 16.1.9.

На рисунке приведено моделирование однотональных гармонических со случайной начальной фазой. Математические модели сигналов задавались в главном диапазоне спектральной области (0-2количество точек дискретизации спектра - 2000). Модуль гармоники устанавливался равным 1, при этом модуль спектра выходного сигнала после фильтрации, по-существу, отображает передаточную функцию фильтра. Окно медианного фильтра равно 3.

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

Рис. 16.1.10. Медианная фильтрация многотональных сигналов

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

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

Рис. 16.1.11.

Разновидности медианных фильтров.

Взвешенно-медианные фильтры применяют, если желательно придать больший вес центральным точкам. Это достигается путем повторения k i раз каждого набора отсчетов в апертуре фильтра. Так, например, при n=3 и k -1 =k 1 =2, k 0 =3 вычисление взвешенной медианы входного числового ряда производится по формуле:

y i = med (x i - 1 , x i - 1 , x 0 , x 0 , x 0 , x 1 , x 1).

Такая растянутая последовательность также сохраняет перепады сигнала и в определенных условиях позволяет увеличить подавление дисперсии статистических шумов в сигнале. Ни один из весовых коэффициентов k i не должен быть значительно больше всех других.

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

Достоинства медианных фильтров.

    Простая структура фильтра, как для аппаратной, так и для программной реализации.

    Фильтр не изменяет ступенчатые и пилообразные функции.

    Фильтр хорошо подавляет одиночные импульсные помехи и случайные шумовые выбросы отсчетов.

Недостатки медианных фильтров.

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

    Фильтр вызывает уплощение вершин треугольных функций.

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

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

Недостатки метода можно уменьшить, если применять медианную фильтрацию с адаптивным изменением размера окна фильтра в зависимости от динамики сигнала и характера шумов (адаптивная медианная фильтрация). В качестве критерия размера окна можно использовать, например, величину отклонения значений соседних отсчетов относительно центрального ранжированного отсчета /1i/. При уменьшении этой величины ниже определенного порога размер окна увеличивается.

Недавно пришлось столкнуться с необходимостью программной фильтрации данных АЦП. Гугление и курение (различной документации) привело меня к двум технологиям: Фильтр низких частот (ФНЧ) и Медианный фильтр. Про ФНЧ есть весьма подробная статья в сообществе Easyelectronics , поэтому далее речь пойдёт про медианный фильтр.

Дисклеймер (отмазка): Эта статья по большей частью является практически дословным переводом статьи с сайта embeddedgurus . Однако, переводчик (я) тоже использовал приведенные алгоритмы в работе, нашёл их полезными, и, возможно, представляющими интерес для этого сообщества.

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

Этот тип шума обычно возникает от какого-либо случайного события, такого, как электростатический разряд, сработавший рядом с прибором брелок сигнализации и прочее. При этом входной сигнал может принять заведомо невозможное значение. Например, с АЦП поступили данные: 385, 389, 388, 388, 912, 388, 387. Очевидно, что значение 912 тут ложное, и должно быть отброшено. При использовании классического фильтра, почти наверняка это большое число повлияет на выходное значение очень сильно. Очевидным решением тут будет применение медианного фильтра.

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

Отличия медианы от среднего арифметического

Предположим, что в одной комнате оказалось 19 бедняков и один миллиардер. Каждый кладёт на стол деньги - бедняки из кармана, а миллиардер - из чемодана. По $5 кладёт каждый бедняк, а миллиардер - $1 млрд (109). В сумме получается $1 000 000 095. Если мы разделим деньги равными долями на 20 человек, то получим $50 000 004,75. Это будет среднее арифметическое значение суммы наличных, которая была у всех 20 человек в этой комнате.

Медиана в этом случае будет равна $5 (полусумма десятого и одиннадцатого, срединных значений ранжированного ряда). Можно интерпретировать это следующим образом. Разделив нашу компанию на две равные группы по 10 человек, мы можем утверждать, что в первой группе каждый положил на стол не больше $5, во второй же не меньше $5. В общем случае можно сказать, что медиана это то, сколько принёс с собой средний человек. Наоборот, среднее арифметическое - неподходящая характеристика, так как оно значительно превышает сумму наличных, имеющуюся у среднего человека.
ru.wikipedia.org/wiki/Медиана_ (статистика)

По размеру этого множества разделим фильтры на два типа:
Размерность = 3
Размерность > 3

Фильтр размерностью 3
Размерность три - наименьшая из возможных. Вычислить среднее значение возможно, использовав лишь несколько операций IF. Ниже приведён код, реализующий этот фильтр:

Uint16_t middle_of_3(uint16_t a, uint16_t b, uint16_t c) { uint16_t middle; if ((a <= b) && (a <= c)) { middle = (b <= c) ? b: c; } else if ((b <= a) && (b <= c)) { middle = (a <= c) ? a: c; } else { middle = (a <= b) ? a: b; } return middle; }

Фильтр размерностью >3
Для фильтра размерностью больше трёх предлагаю воспользоваться алгоритмом, предложенным Филом Экстормом (Phil Ekstrom) в Ноябрьском номере журнала «Embedded Systems», и переписанного с Dynamic C на стандартный С Найджелом Джонсом (Nigel Jones). Алгоритм использует односвязный список, и использует тот факт, что когда массив отсортирован, удаление самого старого значения, и добавление нового не нарушает сортировку.

#define STOPPER 0 /* Smaller than any datum */ #define MEDIAN_FILTER_SIZE (13) uint16_t median_filter(uint16_t datum) { struct pair { struct pair *point; /* Pointers forming list linked in sorted order */ uint16_t value; /* Values to sort */ }; static struct pair buffer = {0}; /* Buffer of nwidth pairs */ static struct pair *datpoint = buffer; /* Pointer into circular buffer of data */ static struct pair small = {NULL, STOPPER}; /* Chain stopper */ static struct pair big = {&small, 0}; /* Pointer to head (largest) of linked list.*/ struct pair *successor; /* Pointer to successor of replaced data item */ struct pair *scan; /* Pointer used to scan down the sorted list */ struct pair *scanold; /* Previous value of scan */ struct pair *median; /* Pointer to median */ uint16_t i; if (datum == STOPPER) { datum = STOPPER + 1; /* No stoppers allowed. */ } if ((++datpoint - buffer) >= MEDIAN_FILTER_SIZE) { datpoint = buffer; /* Increment and wrap data in pointer.*/ } datpoint->value = datum; /* Copy in new datum */ successor = datpoint->point; /* Save pointer to old value"s successor */ median = &big; /* Median initially to first in chain */ scanold = NULL; /* Scanold initially null. */ scan = &big; /* Points to pointer to first (largest) datum in chain */ /* Handle chain-out of first item in chain as special case */ if (scan->point == datpoint) { scan->point = successor; } scanold = scan; /* Save this pointer and */ scan = scan->point ; /* step down chain */ /* Loop through the chain, normal loop exit via break. */ for (i = 0 ; i < MEDIAN_FILTER_SIZE; ++i) { /* Handle odd-numbered item in chain */ if (scan->point == datpoint) { scan->point = successor; /* Chain out the old datum.*/ } if (scan->value < datum) /* If datum is larger than scanned value,*/ { datpoint->point = scanold->point; /* Chain it in here. */ scanold->point = datpoint; /* Mark it chained in. */ datum = STOPPER; }; /* Step median pointer down chain after doing odd-numbered element */ median = median->point; /* Step median pointer. */ if (scan == &small) { break; /* Break at end of chain */ } scanold = scan; /* Save this pointer and */ scan = scan->point; /* step down chain */ /* Handle even-numbered item in chain. */ if (scan->point == datpoint) { scan->point = successor; } if (scan->value < datum) { datpoint->point = scanold->point; scanold->point = datpoint; datum = STOPPER; } if (scan == &small) { break; } scanold = scan; scan = scan->point; } return median->value; }
Чтобы воспользоваться этим кодом, просто вызываем функцию каждый раз, когда появляется новое значение. Она вернёт медианное из последних MEDIAN_FILTER_SIZE измерений.
Этот подход требует довольно много RAM, т.к. приходится хранить и значения, и указатели. Однако он довольно быстрый (58мкс на 40МГц PIC18).

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

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

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

Удачным решением перечисленных проблем является применение медианной фильтрации, предложенной Дж. Тьюки в 1971 г. для анализа экономических процессов. Наиболее полное исследование медианной фильтрации применительно к обработке изображений представлено в сборнике . Отметим, что медианная фильтрация представляет собой эвристический метод обработки, ее алгоритм не является математическим решением строго сформулированной задачи. Поэтому исследователями уделяется большое внимание анализу эффективности обработки изображений на ее основе и сопоставлению с другими методами.

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

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

Рис. 3.10. Примеры окон при медианной фильтрации

Двумерный характер окна позволяет выполнять, по существу, двумерную фильтрацию, поскольку для образования оценки привлекаются данные как из текущих строки и столбца, так и из соседних. Обозначим рабочую выборку в виде одномерного массива ; число его элементов равняется размеру окна, а их расположение произвольно. Обычно применяют окна с нечетным числом точек (это автоматически обеспечивается при центральной симметрии апертуры и при вхождении самой центральной точки в ее состав). Если упорядочить последовательность по возрастанию, то ее медианой будет тот элемент выборки, который занимает центральное положение в этой упорядоченной последовательности. Полученное таким образом число и является продуктом фильтрации для текущей точки кадра. Понятно, что результат такой обработки в самом деле не зависит от того, в какой последовательности представлены элементы изображения в рабочей выборке . Введем формальное обозначение описанной процедуры в виде:

. (3.48)

Рассмотрим пример. Предположим, что выборка имеет вид: , а элемент 250, расположенный в ее центре, соответствует текущей точке фильтрации (рис. 3.10). Большое значение яркости в этой точке кадра может быть результатом воздействия импульсной (точечной) помехи. Упорядоченная по возрастанию выборка имеет при этом вид {45,55,75,99,104,110,136,158,250}, следовательно, в соответствии с процедурой (3.48), получаем . Видим, что влияние “соседей” на результат фильтрации в текущей точке привело к “игнорированию” импульсного выброса яркости, что следует рассматривать как эффект фильтрации. Если импульсная помеха не является точечной, а покрывает некоторую локальную область, то она также может быть подавлена. Это произойдет, если размер этой локальной области будет меньше, чем половина размера апертуры МФ. Поэтому для подавления импульсных помех, поражающих локальные участки изображения, следует увеличивать размеры апертуры МФ.

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

Результаты экспериментов, иллюстрирующие работу МФ, приведены на рис. 3.11. В экспериментах применялся МФ, имеющий квадратную апертуру со

стороной равной 3. В левом ряду представлены изображения, искаженные помехой, в правом - результаты их медианной фильтрации. На рис. 3.11.а и рис. 3.11.в показано исходное изображение, искаженное импульсной помехой. При ее наложении использовался датчик случайных чисел с равномерным на интервале законом распределения, вырабатывающий во всех точках кадра независимые случайные числа. Интенсивность помехи задавалась вероятностью ее возникновения в каждой точке. Если для случайного числа , сформированного в точке , выполнялось условие , то яркость изображения в этой точке замещалась числом 255, соответствующим максимальной яркости (уровню белого). На рис. 3.11.а действием импульсной помехи искажено 5 % (=0.05), а на рис. 3.11.в - 10 % элементов изображения. Результаты обработки говорят о практически полном подавлении помехи в первом случае и о ее значительном ослаблении во втором.

Рис. 3.11. Примеры медианной фильтрации

Рис. 3.11.д показывает изображение, искаженное независимым гауссовским шумом при отношении сигнал/шум дБ, а рис. 3.11.е - результат его фильтрации медианным фильтром. Условия данного эксперимента позволяют сравнивать его результаты с результатами рассмотренной выше линейной фильтрации. В таблице 3.1 приведены данные, дающие возможность такого сравнения. Для различных методов фильтрации в этой таблице приводятся значения относительного среднего квадрата ошибок и коэффициента ослабления шума для случая, когда отношение сигнал/шум на входе фильтра составляет -5 дБ.

Табл.3.1. Сравнение эффективности подавления шума при фильтрации изображений, дБ

масочный фильтр с оптимальн. КИХ

масочный фильтр с равномерн. КИХ

двумерный рекуррентн. фильтр

двумерный фильтр Винера

Наибольшей эффективностью обладает двумерный фильтр Винера, уменьшающий средний квадрат ошибок в 17 раз. Медианный фильтр имеет наименьшую из всех рассмотренных фильтров эффективность, ему соответствует =5.86. Тем не менее, это число свидетельствует о том, что и при его помощи удается значительно снизить уровень шума на изображении.

Вместе с тем, как говорилось выше, и что демонстрирует рис. 3.11.е, медианная фильтрация в меньшей степени сглаживает границы изображения, чем любая линейная фильтрация. Механизм этого явления очень прост и заключается в следующем. Предположим, что апертура фильтра находится вблизи границы, разделяющей светлый и темный участки изображения, при этом ее центр располагается в области темного участка. Тогда, вероятнее всего, рабочая выборка будет содержать большее количество элементов с малыми значениями яркости, и, следовательно, медиана будет находиться среди тех элементов рабочей выборки, которые соответствуют этой области изображения. Ситуация меняется на противоположную, если центр апертуры смещен в область более высокой яркости. Но это и означает наличие чувствительности у МФ к перепадам яркости.

Введение

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

Реализуется с помощью окна, состоящего из нечётного количества отсчётов. Значения отсчётов внутри окна сортируются по порядку; и среднее значение, то есть значение находящееся в середине упорядоченного списка, принимается выходным значением. На следующем шаге окно передвигается на один отсчёт вперёд и вычисления повторяются. Крайние значения массива мыслим продублированными столько раз, чтобы можно было применить окно к первому и к последнему значению.

Медианная фильтрация - обычная процедура обработки изображений. Она особенно часто используется для уменьшения шума в изображении.

Постановка задачи

Дана матрица NxN. Необходимо реализовать параллельный алгоритм медианной фильтрации этой матрицы.

Метод решения

(Примечание: для простоты был реализован фильтр 3x3)

Последовательный алгоритм:

Фильтрация проводится построчно – для первого элемента строки заполняется массив окрестности (с учетом того, что искусственно добавляются три значения-соседи слева), этот массив сортируется быстрой сортировкой, затем среднее значение записывается в выходную матрицу. Для каждого следующего элемента строки массив окрестности не заполняется заново – в него лишь добавляются новые три элемента, замещая старые три. Для того, чтобы это было возможно сделать за один проход (по массиву окрестности и новым трем элементам) введен специальный массив с «количеством жизней» элемента. Жизней может быть 1, 2 и 3. Добавляемые 3 элемента предварительно сортируются и добавление производится слиянием: во время него элементы с 1й жизнью затираются, элементы, имевшие 2 и 3 жизни получают 1 и 2 соответственно, а добавляемые элементы становятся обладателями 3х жизней. Средний элемент записывается в выходной массив. Обработка последнего элемента производится повторением итерации предпоследнего шага. На практике данный метод по сравнению с полной выборкой окрестности и ее сортировкой показывает превосходство по скорости в 3 раза.

Параллельный алгоритм:

(Примечание: размерность матрицы была ограничена значениями кратными двойке)

Т.к. в данной задаче наблюдается независимость по данным, параллелизм производится на основе деления матрицы на части (по несколько строк, а именно N/p, где p –количество процессов). Если учесть что в персональных компьютерах обычно 1, 2, 4 или 8 ядер у процессора, то деление будет производиться без остатка. После деления матрицы на части по высоте – они обрабатываются последовательным алгоритмом, но необходимо учесть, то при этом невозможно обработать граничные строки (за исключением первой и последней в матрице) – после завершения параллельных вычислений, части собираются обратно в одну матрицу, а оставшиеся строки необходимо отфильтровать отдельно.

Анализ эффективности

Время фильтрации 1го элемента строки:

(2*9+9*ln(9)*2+1)*t , где t - время выполнения одной операции.

  • (2*9 операций – заполнение массива окрестности и соответствующего массива «жизней»
  • 9*ln(9)*2 – быстрая сортировка массивов

Фильтрация последующих элементов строки:

  • 9+3 – проход по массиву окрестности с добавлением новых элементов и удалением старых
  • 18 – копирование массива окрестности и массива «жизней» из вспомогательных массивов
  • 1 – выборка и присваивание медианы выходному элементу

Итого на требующееся на фильтрацию строки время:

((2*9+9*ln(9)*2)+1+(N-1)*(9+3+18+1))*t ≈(21N+37)*t

Время на фильтрацию всей матрицы:

Tp = (α+ω/β*N^2/p)+(21N+37)*t*(N/p+2*(p-1))

  • α – латентность
  • β - пропускная способность среды передачи
  • ω - размер элемента матрицы
  • 2*(p-1) – количество строк, оставшихся неотфильтрованными при делении матрицы на части)

T1 = (21N+37)*t*N

Ускорение: Sp = (T1)/(Tp) = ((21N+37)*t*N)/((21N+37)*t*(N/p+2*(p-1))+α+ω/β*N^2/p) = βp/ (β+ω/21) ,при N→∞

Эффективность: Ep = (Sp)/p = β/(β+ω/21) ,при N→∞

Демонстрация

Ширина матрицы

Время выполнения (сек)

Сравнение теоретических оценок ускорения с практическими:

Ширина матрицы

Характеристики машины: Intеl Core i7 920 @ 2.80GHz 2.00ГБ ОЗУ

латентность: a = 0,00005 cек

пропускная способность: b = 25,6 ГБ/с

время выполнения стандартной операции: t = 0,000000004912 сек

размер элемента набора: w = 4

Работу выполнили студенты группы 8411: Муравьев Владимир и Соловьев Павел

Для уменьшения уровня шума . Медианный фильтр является нелинейным КИХ-фильтром .

Значения отсчётов внутри окна фильтра сортируются в порядке возрастания (убывания); и значение, находящееся в середине упорядоченного списка, поступает на выход фильтра. В случае четного числа отсчетов в окне выходное значение фильтра равно среднему значению двух отсчетов в середине упорядоченного списка. Окно перемещается вдоль фильтруемого сигнала и вычисления повторяются.

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

Примеры

Пример 1

Ниже рассматривается пример применения медианного фильтра для одномерного сигнала с окном размером в три отсчёта ко входному массиву x (искусственно введённые продублированные значения показаны полужирно ):

  • y = медиана[2 2 80] = 2
  • y = медиана = медиана = 6
  • y = медиана = медиана = 6
  • y = медиана = медиана = 3

и в итоге:

y = - выход медианного фильтра

Пример 2

Медианный фильтр M из входящего сигнала C, создаёт медианный образ сигнала \widetilde{C}. Входящий сигнал C, подаётся на медианный фильтр M:C \rightarrow \widetilde{C}.
В медианном фильтре сначала производится выбор значений попавших в окно фильтра при нахождении окна в точке x, \hat{O}(x):C \rightarrow O.
Далее производится сортировка значений окна O, функцией сравнения значений \Phi, и строится упорядоченное множество , а после выбирается медианное значение (медиана ): и записывается в \widetilde{C}(x)= o_{m}.

Таким образом медианный фильтр M:C \rightarrow \widetilde{C}, является последовательностью трёх действий:

  1. Выбор значений попавших в окно фильтра \hat{O}(x):C \rightarrow O.
  2. Сортировка значений окна \Phi(O) \rightarrow \widetilde{O}.
  3. Выбора из \widetilde{O} медианного значения m(\widetilde{O}) \rightarrow o_{m} и запись его в медианный образ сигнала \widetilde{C} в точку с координатой x, \widetilde{C}(x) = o_{m} .

Данные действия повторяются для каждой точки входящего сигнала.

2D Медианный фильтр (псевдокод)

Алгоритм примитивного 2D Медианного фильтра выглядит примерно так:

Allocate outputPixelValue edgex:= (window width / 2) rounded down edgey:= (window height / 2) rounded down for x from edgex to image width - edgex for y from edgey to image height - edgey allocate colorArray for fx from 0 to window width for fy from 0 to window height colorArray := inputPixelValue sort all entries in colorArray outputPixelValue[x][y] := colorArray

Особенности этого алгоритма:

  • Применяется лишь к одному цветовому каналу,
  • Не применяется к крайним пикселям.

См. также

Напишите отзыв о статье "Медианный фильтр"

Ссылки

  • (англ.)

Отрывок, характеризующий Медианный фильтр

– Как что? – заговорил князь Андрей, останавливаясь от волнения. – Да ты пойми, что мы, или офицеры, которые служим своему царю и отечеству и радуемся общему успеху и печалимся об общей неудаче, или мы лакеи, которым дела нет до господского дела. Quarante milles hommes massacres et l"ario mee de nos allies detruite, et vous trouvez la le mot pour rire, – сказал он, как будто этою французскою фразой закрепляя свое мнение. – C"est bien pour un garcon de rien, comme cet individu, dont vous avez fait un ami, mais pas pour vous, pas pour vous. [Сорок тысяч человек погибло и союзная нам армия уничтожена, а вы можете при этом шутить. Это простительно ничтожному мальчишке, как вот этот господин, которого вы сделали себе другом, но не вам, не вам.] Мальчишкам только можно так забавляться, – сказал князь Андрей по русски, выговаривая это слово с французским акцентом, заметив, что Жерков мог еще слышать его.
Он подождал, не ответит ли что корнет. Но корнет повернулся и вышел из коридора.

Гусарский Павлоградский полк стоял в двух милях от Браунау. Эскадрон, в котором юнкером служил Николай Ростов, расположен был в немецкой деревне Зальценек. Эскадронному командиру, ротмистру Денисову, известному всей кавалерийской дивизии под именем Васьки Денисова, была отведена лучшая квартира в деревне. Юнкер Ростов с тех самых пор, как он догнал полк в Польше, жил вместе с эскадронным командиром.
11 октября, в тот самый день, когда в главной квартире всё было поднято на ноги известием о поражении Мака, в штабе эскадрона походная жизнь спокойно шла по старому. Денисов, проигравший всю ночь в карты, еще не приходил домой, когда Ростов, рано утром, верхом, вернулся с фуражировки. Ростов в юнкерском мундире подъехал к крыльцу, толконув лошадь, гибким, молодым жестом скинул ногу, постоял на стремени, как будто не желая расстаться с лошадью, наконец, спрыгнул и крикнул вестового.
– А, Бондаренко, друг сердечный, – проговорил он бросившемуся стремглав к его лошади гусару. – Выводи, дружок, – сказал он с тою братскою, веселою нежностию, с которою обращаются со всеми хорошие молодые люди, когда они счастливы.
– Слушаю, ваше сиятельство, – отвечал хохол, встряхивая весело головой.
– Смотри же, выводи хорошенько!
Другой гусар бросился тоже к лошади, но Бондаренко уже перекинул поводья трензеля. Видно было, что юнкер давал хорошо на водку, и что услужить ему было выгодно. Ростов погладил лошадь по шее, потом по крупу и остановился на крыльце.
«Славно! Такая будет лошадь!» сказал он сам себе и, улыбаясь и придерживая саблю, взбежал на крыльцо, погромыхивая шпорами. Хозяин немец, в фуфайке и колпаке, с вилами, которыми он вычищал навоз, выглянул из коровника. Лицо немца вдруг просветлело, как только он увидал Ростова. Он весело улыбнулся и подмигнул: «Schon, gut Morgen! Schon, gut Morgen!» [Прекрасно, доброго утра!] повторял он, видимо, находя удовольствие в приветствии молодого человека.
– Schon fleissig! [Уже за работой!] – сказал Ростов всё с тою же радостною, братскою улыбкой, какая не сходила с его оживленного лица. – Hoch Oestreicher! Hoch Russen! Kaiser Alexander hoch! [Ура Австрийцы! Ура Русские! Император Александр ура!] – обратился он к немцу, повторяя слова, говоренные часто немцем хозяином.