Сайт о телевидении

Сайт о телевидении

» » Медианная фильтрация сигналов. Медианная фильтрация

Медианная фильтрация сигналов. Медианная фильтрация

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

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

(8.10)

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

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

(8.11)
(8.12)

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

ВВЕДЕНИЕ

Лекция 16. МЕДИАННЫЕ ФИЛЬТРЫ

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

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

y k = Me(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)

где Me(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.

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

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

Рис. 16.1.2.

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

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

Рис. 16.1.3.

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

На рис. 16.1.4 приведен пример очистки зашумленного изображения медианным фильтром Черненко /2i/. Зашумление изображения по площади составляло 15%, для очистки фильтр применен последовательно 3 раза.

Рис. 16.1.4.

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

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

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

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

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

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

Введение

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

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

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

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

Дана матрица 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: Муравьев Владимир и Соловьев Павел

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

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

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

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

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

кроме того,

Однако медиана суммы двух произвольных последовательностей и не равна сумме их медиан:

Это неравенство можно проверить на примере последовательностей 80, 90, 100, 110, 120 и 80, 90, 100, 90, 80.

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

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

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

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